MusicSheetDrawer.js 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438
  1. "use strict";
  2. var BoundingBox_1 = require("./BoundingBox");
  3. var DrawingEnums_1 = require("./DrawingEnums");
  4. var DrawingParameters_1 = require("./DrawingParameters");
  5. var GraphicalLine_1 = require("./GraphicalLine");
  6. var RectangleF2D_1 = require("../../Common/DataObjects/RectangleF2D");
  7. var PointF2D_1 = require("../../Common/DataObjects/PointF2D");
  8. var TextAlignment_1 = require("../../Common/Enums/TextAlignment");
  9. var Exceptions_1 = require("../Exceptions");
  10. var MusicSymbol_1 = require("./MusicSymbol");
  11. var DrawingMode_1 = require("./DrawingMode");
  12. var MusicSheetDrawer = (function () {
  13. function MusicSheetDrawer(textMeasurer, isPreviewImageDrawer) {
  14. if (isPreviewImageDrawer === void 0) { isPreviewImageDrawer = false; }
  15. this.drawingParameters = new DrawingParameters_1.DrawingParameters();
  16. this.phonicScoreMode = DrawingMode_1.PhonicScoreModes.Manual;
  17. this.textMeasurer = textMeasurer;
  18. this.splitScreenLineColor = -1;
  19. if (isPreviewImageDrawer) {
  20. this.drawingParameters.setForThumbmail();
  21. }
  22. else {
  23. this.drawingParameters.setForAllOn();
  24. }
  25. }
  26. Object.defineProperty(MusicSheetDrawer.prototype, "Mode", {
  27. set: function (value) {
  28. this.phonicScoreMode = value;
  29. },
  30. enumerable: true,
  31. configurable: true
  32. });
  33. MusicSheetDrawer.prototype.drawSheet = function (graphicalMusicSheet) {
  34. this.graphicalMusicSheet = graphicalMusicSheet;
  35. this.rules = graphicalMusicSheet.ParentMusicSheet.Rules;
  36. this.drawSplitScreenLine();
  37. if (this.drawingParameters.drawCursors) {
  38. for (var _i = 0, _a = graphicalMusicSheet.Cursors; _i < _a.length; _i++) {
  39. var line = _a[_i];
  40. var psi = new BoundingBox_1.BoundingBox(line);
  41. psi.AbsolutePosition = line.Start;
  42. psi.BorderBottom = line.End.y - line.Start.y;
  43. psi.BorderRight = line.Width / 2.0;
  44. psi.BorderLeft = -line.Width / 2.0;
  45. if (this.isVisible(psi)) {
  46. this.drawLineAsVerticalRectangle(line, DrawingEnums_1.GraphicalLayers.Cursor);
  47. }
  48. }
  49. }
  50. if (this.drawingParameters.drawScrollIndicator) {
  51. this.drawScrollIndicator();
  52. }
  53. for (var _b = 0, _c = this.graphicalMusicSheet.MusicPages; _b < _c.length; _b++) {
  54. var page = _c[_b];
  55. this.drawPage(page);
  56. }
  57. };
  58. MusicSheetDrawer.prototype.drawLineAsHorizontalRectangle = function (line, layer) {
  59. var rectangle = new RectangleF2D_1.RectangleF2D(line.Start.x, line.End.y - line.Width / 2, line.End.x - line.Start.x, line.Width);
  60. rectangle = this.applyScreenTransformationForRect(rectangle);
  61. this.renderRectangle(rectangle, layer, line.styleId);
  62. };
  63. MusicSheetDrawer.prototype.drawLineAsVerticalRectangle = function (line, layer) {
  64. var lineStart = line.Start;
  65. var lineWidth = line.Width;
  66. var rectangle = new RectangleF2D_1.RectangleF2D(lineStart.x - lineWidth / 2, lineStart.y, lineWidth, line.End.y - lineStart.y);
  67. rectangle = this.applyScreenTransformationForRect(rectangle);
  68. this.renderRectangle(rectangle, layer, line.styleId);
  69. };
  70. MusicSheetDrawer.prototype.drawLineAsHorizontalRectangleWithOffset = function (line, offset, layer) {
  71. var start = new PointF2D_1.PointF2D(line.Start.x + offset.x, line.Start.y + offset.y);
  72. var end = new PointF2D_1.PointF2D(line.End.x + offset.x, line.End.y + offset.y);
  73. var width = line.Width;
  74. var rectangle = new RectangleF2D_1.RectangleF2D(start.x, end.y - width / 2, end.x - start.x, width);
  75. rectangle = this.applyScreenTransformationForRect(rectangle);
  76. this.renderRectangle(rectangle, layer, line.styleId);
  77. };
  78. MusicSheetDrawer.prototype.drawLineAsVerticalRectangleWithOffset = function (line, offset, layer) {
  79. var start = new PointF2D_1.PointF2D(line.Start.x + offset.x, line.Start.y + offset.y);
  80. var end = new PointF2D_1.PointF2D(line.End.x + offset.x, line.End.y + offset.y);
  81. var width = line.Width;
  82. var rectangle = new RectangleF2D_1.RectangleF2D(start.x, start.y, width, end.y - start.y);
  83. rectangle = this.applyScreenTransformationForRect(rectangle);
  84. this.renderRectangle(rectangle, layer, line.styleId);
  85. };
  86. MusicSheetDrawer.prototype.drawRectangle = function (rect, layer) {
  87. var psi = rect.PositionAndShape;
  88. var rectangle = new RectangleF2D_1.RectangleF2D(psi.AbsolutePosition.x, psi.AbsolutePosition.y, psi.BorderRight, psi.BorderBottom);
  89. rectangle = this.applyScreenTransformationForRect(rectangle);
  90. this.renderRectangle(rectangle, layer, rect.style);
  91. };
  92. MusicSheetDrawer.prototype.calculatePixelDistance = function (unitDistance) {
  93. throw new Error("not implemented");
  94. };
  95. MusicSheetDrawer.prototype.drawLabel = function (graphicalLabel, layer) {
  96. if (!this.isVisible(graphicalLabel.PositionAndShape)) {
  97. return;
  98. }
  99. var label = graphicalLabel.Label;
  100. if (label.text.trim() === "") {
  101. return;
  102. }
  103. var screenPosition = this.applyScreenTransformation(graphicalLabel.PositionAndShape.AbsolutePosition);
  104. var heightInPixel = this.calculatePixelDistance(label.fontHeight);
  105. var widthInPixel = heightInPixel * this.textMeasurer.computeTextWidthToHeightRatio(label.text, label.font, label.fontStyle);
  106. var bitmapWidth = Math.ceil(widthInPixel);
  107. var bitmapHeight = Math.ceil(heightInPixel * 1.2);
  108. switch (label.textAlignment) {
  109. case TextAlignment_1.TextAlignment.LeftTop:
  110. break;
  111. case TextAlignment_1.TextAlignment.LeftCenter:
  112. screenPosition.y -= bitmapHeight / 2;
  113. break;
  114. case TextAlignment_1.TextAlignment.LeftBottom:
  115. screenPosition.y -= bitmapHeight;
  116. break;
  117. case TextAlignment_1.TextAlignment.CenterTop:
  118. screenPosition.x -= bitmapWidth / 2;
  119. break;
  120. case TextAlignment_1.TextAlignment.CenterCenter:
  121. screenPosition.x -= bitmapWidth / 2;
  122. screenPosition.y -= bitmapHeight / 2;
  123. break;
  124. case TextAlignment_1.TextAlignment.CenterBottom:
  125. screenPosition.x -= bitmapWidth / 2;
  126. screenPosition.y -= bitmapHeight;
  127. break;
  128. case TextAlignment_1.TextAlignment.RightTop:
  129. screenPosition.x -= bitmapWidth;
  130. break;
  131. case TextAlignment_1.TextAlignment.RightCenter:
  132. screenPosition.x -= bitmapWidth;
  133. screenPosition.y -= bitmapHeight / 2;
  134. break;
  135. case TextAlignment_1.TextAlignment.RightBottom:
  136. screenPosition.x -= bitmapWidth;
  137. screenPosition.y -= bitmapHeight;
  138. break;
  139. default:
  140. throw new Exceptions_1.ArgumentOutOfRangeException("");
  141. }
  142. this.renderLabel(graphicalLabel, layer, bitmapWidth, bitmapHeight, heightInPixel, screenPosition);
  143. };
  144. MusicSheetDrawer.prototype.applyScreenTransformation = function (point) {
  145. throw new Error("not implemented");
  146. };
  147. MusicSheetDrawer.prototype.applyScreenTransformations = function (points) {
  148. var transformedPoints = [];
  149. for (var _i = 0, points_1 = points; _i < points_1.length; _i++) {
  150. var point = points_1[_i];
  151. transformedPoints.push(this.applyScreenTransformation(point));
  152. }
  153. return transformedPoints;
  154. };
  155. MusicSheetDrawer.prototype.applyScreenTransformationForRect = function (rectangle) {
  156. throw new Error("not implemented");
  157. };
  158. MusicSheetDrawer.prototype.drawSplitScreenLine = function () {
  159. // empty
  160. };
  161. MusicSheetDrawer.prototype.renderRectangle = function (rectangle, layer, styleId) {
  162. throw new Error("not implemented");
  163. };
  164. MusicSheetDrawer.prototype.drawScrollIndicator = function () {
  165. // empty
  166. };
  167. MusicSheetDrawer.prototype.drawSelectionStartSymbol = function (symbol) {
  168. // empty
  169. };
  170. MusicSheetDrawer.prototype.drawSelectionEndSymbol = function (symbol) {
  171. // empty
  172. };
  173. MusicSheetDrawer.prototype.renderLabel = function (graphicalLabel, layer, bitmapWidth, bitmapHeight, heightInPixel, screenPosition) {
  174. throw new Error("not implemented");
  175. };
  176. MusicSheetDrawer.prototype.renderSystemToScreen = function (system, systemBoundingBoxInPixels, absBoundingRectWithMargin) {
  177. // empty
  178. };
  179. MusicSheetDrawer.prototype.drawMeasure = function (measure) {
  180. throw new Error("not implemented");
  181. };
  182. MusicSheetDrawer.prototype.drawSkyLine = function (staffLine) {
  183. // empty
  184. };
  185. MusicSheetDrawer.prototype.drawBottomLine = function (staffLine) {
  186. // empty
  187. };
  188. MusicSheetDrawer.prototype.drawInstrumentBracket = function (bracket, system) {
  189. // empty
  190. };
  191. MusicSheetDrawer.prototype.drawGroupBracket = function (bracket, system) {
  192. // empty
  193. };
  194. MusicSheetDrawer.prototype.isVisible = function (psi) {
  195. return true;
  196. };
  197. MusicSheetDrawer.prototype.drawMusicSystem = function (system) {
  198. var absBoundingRectWithMargin = this.getSystemAbsBoundingRect(system);
  199. var systemBoundingBoxInPixels = this.getSytemBoundingBoxInPixels(absBoundingRectWithMargin);
  200. this.drawMusicSystemComponents(system, systemBoundingBoxInPixels, absBoundingRectWithMargin);
  201. };
  202. MusicSheetDrawer.prototype.getSytemBoundingBoxInPixels = function (absBoundingRectWithMargin) {
  203. var systemBoundingBoxInPixels = this.applyScreenTransformationForRect(absBoundingRectWithMargin);
  204. systemBoundingBoxInPixels.x = Math.round(systemBoundingBoxInPixels.x);
  205. systemBoundingBoxInPixels.y = Math.round(systemBoundingBoxInPixels.y);
  206. return systemBoundingBoxInPixels;
  207. };
  208. MusicSheetDrawer.prototype.getSystemAbsBoundingRect = function (system) {
  209. var relBoundingRect = system.PositionAndShape.BoundingRectangle;
  210. var absBoundingRectWithMargin = new RectangleF2D_1.RectangleF2D(system.PositionAndShape.AbsolutePosition.x + system.PositionAndShape.BorderLeft - 1, system.PositionAndShape.AbsolutePosition.y + system.PositionAndShape.BorderTop - 1, (relBoundingRect.width + 6), (relBoundingRect.height + 2));
  211. return absBoundingRectWithMargin;
  212. };
  213. MusicSheetDrawer.prototype.drawMusicSystemComponents = function (musicSystem, systemBoundingBoxInPixels, absBoundingRectWithMargin) {
  214. var selectStartSymb = this.graphicalMusicSheet.SelectionStartSymbol;
  215. var selectEndSymb = this.graphicalMusicSheet.SelectionEndSymbol;
  216. if (this.drawingParameters.drawSelectionStartSymbol) {
  217. if (selectStartSymb !== undefined && this.isVisible(selectStartSymb.PositionAndShape)) {
  218. this.drawSelectionStartSymbol(selectStartSymb);
  219. }
  220. }
  221. if (this.drawingParameters.drawSelectionEndSymbol) {
  222. if (selectEndSymb !== undefined && this.isVisible(selectEndSymb.PositionAndShape)) {
  223. this.drawSelectionEndSymbol(selectEndSymb);
  224. }
  225. }
  226. for (var _i = 0, _a = musicSystem.StaffLines; _i < _a.length; _i++) {
  227. var staffLine = _a[_i];
  228. this.drawStaffLine(staffLine);
  229. }
  230. for (var _b = 0, _c = musicSystem.SystemLines; _b < _c.length; _b++) {
  231. var systemLine = _c[_b];
  232. this.drawSystemLineObject(systemLine);
  233. }
  234. if (musicSystem === musicSystem.Parent.MusicSystems[0] && musicSystem.Parent === musicSystem.Parent.Parent.MusicPages[0]) {
  235. for (var _d = 0, _e = musicSystem.Labels; _d < _e.length; _d++) {
  236. var label = _e[_d];
  237. this.drawLabel(label, DrawingEnums_1.GraphicalLayers.Notes);
  238. }
  239. }
  240. for (var _f = 0, _g = musicSystem.InstrumentBrackets; _f < _g.length; _f++) {
  241. var bracket = _g[_f];
  242. this.drawInstrumentBracket(bracket, musicSystem);
  243. }
  244. for (var _h = 0, _j = musicSystem.GroupBrackets; _h < _j.length; _h++) {
  245. var bracket = _j[_h];
  246. this.drawGroupBracket(bracket, musicSystem);
  247. }
  248. if (!this.leadSheet) {
  249. for (var _k = 0, _l = musicSystem.MeasureNumberLabels; _k < _l.length; _k++) {
  250. var measureNumberLabel = _l[_k];
  251. this.drawLabel(measureNumberLabel, DrawingEnums_1.GraphicalLayers.Notes);
  252. }
  253. }
  254. for (var _m = 0, _o = musicSystem.StaffLines; _m < _o.length; _m++) {
  255. var staffLine = _o[_m];
  256. this.drawStaffLineSymbols(staffLine);
  257. }
  258. if (this.drawingParameters.drawMarkedAreas) {
  259. this.drawMarkedAreas(musicSystem);
  260. }
  261. if (this.drawingParameters.drawComments) {
  262. this.drawComment(musicSystem);
  263. }
  264. };
  265. MusicSheetDrawer.prototype.activateSystemRendering = function (systemId, absBoundingRect, systemBoundingBoxInPixels, createNewImage) {
  266. return true;
  267. };
  268. MusicSheetDrawer.prototype.drawSystemLineObject = function (systemLine) {
  269. // empty
  270. };
  271. MusicSheetDrawer.prototype.drawStaffLine = function (staffLine) {
  272. for (var _i = 0, _a = staffLine.Measures; _i < _a.length; _i++) {
  273. var measure = _a[_i];
  274. this.drawMeasure(measure);
  275. }
  276. };
  277. // protected drawSlur(slur: GraphicalSlur, abs: PointF2D): void {
  278. //
  279. // }
  280. MusicSheetDrawer.prototype.drawOctaveShift = function (staffLine, graphicalOctaveShift) {
  281. this.drawSymbol(graphicalOctaveShift.octaveSymbol, DrawingMode_1.MusicSymbolDrawingStyle.Normal, graphicalOctaveShift.PositionAndShape.AbsolutePosition);
  282. var absolutePos = staffLine.PositionAndShape.AbsolutePosition;
  283. if (graphicalOctaveShift.dashesStart.x < graphicalOctaveShift.dashesEnd.x) {
  284. var horizontalLine = new GraphicalLine_1.GraphicalLine(graphicalOctaveShift.dashesStart, graphicalOctaveShift.dashesEnd, this.rules.OctaveShiftLineWidth);
  285. this.drawLineAsHorizontalRectangleWithOffset(horizontalLine, absolutePos, DrawingEnums_1.GraphicalLayers.Notes);
  286. }
  287. if (!graphicalOctaveShift.endsOnDifferentStaffLine || graphicalOctaveShift.isSecondPart) {
  288. var verticalLine = void 0;
  289. var dashEnd = graphicalOctaveShift.dashesEnd;
  290. var octShiftVertLineLength = this.rules.OctaveShiftVerticalLineLength;
  291. var octShiftLineWidth = this.rules.OctaveShiftLineWidth;
  292. if (graphicalOctaveShift.octaveSymbol === MusicSymbol_1.MusicSymbol.VA8 || graphicalOctaveShift.octaveSymbol === MusicSymbol_1.MusicSymbol.MA15) {
  293. verticalLine = new GraphicalLine_1.GraphicalLine(dashEnd, new PointF2D_1.PointF2D(dashEnd.x, dashEnd.y + octShiftVertLineLength), octShiftLineWidth);
  294. }
  295. else {
  296. verticalLine = new GraphicalLine_1.GraphicalLine(new PointF2D_1.PointF2D(dashEnd.x, dashEnd.y - octShiftVertLineLength), dashEnd, octShiftLineWidth);
  297. }
  298. this.drawLineAsVerticalRectangleWithOffset(verticalLine, absolutePos, DrawingEnums_1.GraphicalLayers.Notes);
  299. }
  300. };
  301. MusicSheetDrawer.prototype.drawStaffLines = function (staffLine) {
  302. if (staffLine.StaffLines !== undefined) {
  303. var position = staffLine.PositionAndShape.AbsolutePosition;
  304. for (var i = 0; i < 5; i++) {
  305. this.drawLineAsHorizontalRectangleWithOffset(staffLine.StaffLines[i], position, DrawingEnums_1.GraphicalLayers.Notes);
  306. }
  307. }
  308. };
  309. // protected drawEnding(ending: GraphicalRepetitionEnding, absolutePosition: PointF2D): void {
  310. // if (undefined !== ending.Left)
  311. // drawLineAsVerticalRectangle(ending.Left, absolutePosition, <number>GraphicalLayers.Notes);
  312. // this.drawLineAsHorizontalRectangle(ending.Top, absolutePosition, <number>GraphicalLayers.Notes);
  313. // if (undefined !== ending.Right)
  314. // drawLineAsVerticalRectangle(ending.Right, absolutePosition, <number>GraphicalLayers.Notes);
  315. // this.drawLabel(ending.Label, <number>GraphicalLayers.Notes);
  316. // }
  317. // protected drawInstantaniousDynamic(expression: GraphicalInstantaniousDynamicExpression): void {
  318. // expression.ExpressionSymbols.forEach(function (expressionSymbol) {
  319. // let position: PointF2D = expressionSymbol.PositionAndShape.AbsolutePosition;
  320. // let symbol: MusicSymbol = expressionSymbol.GetSymbol;
  321. // drawSymbol(symbol, MusicSymbolDrawingStyle.Normal, position);
  322. // });
  323. // }
  324. // protected drawContinuousDynamic(expression: GraphicalContinuousDynamicExpression,
  325. // absolute: PointF2D): void {
  326. // throw new Error("not implemented");
  327. // }
  328. MusicSheetDrawer.prototype.drawSymbol = function (symbol, symbolStyle, position, scalingFactor, layer) {
  329. if (scalingFactor === void 0) { scalingFactor = 1; }
  330. if (layer === void 0) { layer = DrawingEnums_1.GraphicalLayers.Notes; }
  331. //empty
  332. };
  333. Object.defineProperty(MusicSheetDrawer.prototype, "leadSheet", {
  334. get: function () {
  335. return this.graphicalMusicSheet.LeadSheet;
  336. },
  337. set: function (value) {
  338. this.graphicalMusicSheet.LeadSheet = value;
  339. },
  340. enumerable: true,
  341. configurable: true
  342. });
  343. MusicSheetDrawer.prototype.drawPage = function (page) {
  344. if (!this.isVisible(page.PositionAndShape)) {
  345. return;
  346. }
  347. for (var _i = 0, _a = page.MusicSystems; _i < _a.length; _i++) {
  348. var system = _a[_i];
  349. if (this.isVisible(system.PositionAndShape)) {
  350. this.drawMusicSystem(system);
  351. }
  352. }
  353. if (page === page.Parent.MusicPages[0]) {
  354. for (var _b = 0, _c = page.Labels; _b < _c.length; _b++) {
  355. var label = _c[_b];
  356. this.drawLabel(label, DrawingEnums_1.GraphicalLayers.Notes);
  357. }
  358. }
  359. };
  360. MusicSheetDrawer.prototype.drawMarkedAreas = function (system) {
  361. for (var _i = 0, _a = system.GraphicalMarkedAreas; _i < _a.length; _i++) {
  362. var markedArea = _a[_i];
  363. if (markedArea !== undefined) {
  364. if (markedArea.systemRectangle !== undefined) {
  365. this.drawRectangle(markedArea.systemRectangle, DrawingEnums_1.GraphicalLayers.Background);
  366. }
  367. if (markedArea.settings !== undefined) {
  368. this.drawLabel(markedArea.settings, DrawingEnums_1.GraphicalLayers.Comment);
  369. }
  370. if (markedArea.labelRectangle !== undefined) {
  371. this.drawRectangle(markedArea.labelRectangle, DrawingEnums_1.GraphicalLayers.Background);
  372. }
  373. if (markedArea.label !== undefined) {
  374. this.drawLabel(markedArea.label, DrawingEnums_1.GraphicalLayers.Comment);
  375. }
  376. }
  377. }
  378. };
  379. MusicSheetDrawer.prototype.drawComment = function (system) {
  380. for (var _i = 0, _a = system.GraphicalComments; _i < _a.length; _i++) {
  381. var comment = _a[_i];
  382. if (comment !== undefined) {
  383. if (comment.settings !== undefined) {
  384. this.drawLabel(comment.settings, DrawingEnums_1.GraphicalLayers.Comment);
  385. }
  386. if (comment.label !== undefined) {
  387. this.drawLabel(comment.label, DrawingEnums_1.GraphicalLayers.Comment);
  388. }
  389. }
  390. }
  391. };
  392. MusicSheetDrawer.prototype.drawStaffLineSymbols = function (staffLine) {
  393. var parentInst = staffLine.ParentStaff.ParentInstrument;
  394. var absX = staffLine.PositionAndShape.AbsolutePosition.x;
  395. var absY = staffLine.PositionAndShape.AbsolutePosition.y + 2;
  396. var borderRight = staffLine.PositionAndShape.BorderRight;
  397. if (parentInst.highlight && this.drawingParameters.drawHighlights) {
  398. this.drawLineAsHorizontalRectangle(new GraphicalLine_1.GraphicalLine(new PointF2D_1.PointF2D(absX, absY), new PointF2D_1.PointF2D(absX + borderRight, absY), 4, DrawingEnums_1.OutlineAndFillStyleEnum.Highlighted), DrawingEnums_1.GraphicalLayers.Highlight);
  399. }
  400. var style = DrawingMode_1.MusicSymbolDrawingStyle.Disabled;
  401. var symbol = MusicSymbol_1.MusicSymbol.PLAY;
  402. var drawSymbols = this.drawingParameters.drawActivitySymbols;
  403. switch (this.phonicScoreMode) {
  404. case DrawingMode_1.PhonicScoreModes.Midi:
  405. symbol = MusicSymbol_1.MusicSymbol.PLAY;
  406. if (this.midiPlaybackAvailable && staffLine.ParentStaff.audible) {
  407. style = DrawingMode_1.MusicSymbolDrawingStyle.PlaybackSymbols;
  408. }
  409. break;
  410. case DrawingMode_1.PhonicScoreModes.Following:
  411. symbol = MusicSymbol_1.MusicSymbol.MIC;
  412. if (staffLine.ParentStaff.following) {
  413. style = DrawingMode_1.MusicSymbolDrawingStyle.FollowSymbols;
  414. }
  415. break;
  416. default:
  417. drawSymbols = false;
  418. break;
  419. }
  420. if (drawSymbols) {
  421. var p = new PointF2D_1.PointF2D(absX + borderRight + 2, absY);
  422. this.drawSymbol(symbol, style, p);
  423. }
  424. if (this.drawingParameters.drawErrors) {
  425. for (var _i = 0, _a = staffLine.Measures; _i < _a.length; _i++) {
  426. var measure = _a[_i];
  427. var measurePSI = measure.PositionAndShape;
  428. var absXPSI = measurePSI.AbsolutePosition.x;
  429. var absYPSI = measurePSI.AbsolutePosition.y + 2;
  430. if (measure.hasError && this.graphicalMusicSheet.ParentMusicSheet.DrawErroneousMeasures) {
  431. this.drawLineAsHorizontalRectangle(new GraphicalLine_1.GraphicalLine(new PointF2D_1.PointF2D(absXPSI, absYPSI), new PointF2D_1.PointF2D(absXPSI + measurePSI.BorderRight, absYPSI), 4, DrawingEnums_1.OutlineAndFillStyleEnum.ErrorUnderlay), DrawingEnums_1.GraphicalLayers.MeasureError);
  432. }
  433. }
  434. }
  435. };
  436. return MusicSheetDrawer;
  437. }());
  438. exports.MusicSheetDrawer = MusicSheetDrawer;