@@ -416,19 +416,13 @@ class DomTextMeasurementService extends TextMeasurementService {
416416 List <EngineLineMetrics > lines;
417417 if (text != null ) {
418418 final double lineWidth = maxIntrinsicWidth;
419- final double alignOffset = _calculateAlignOffsetForLine (
420- paragraph: paragraph,
421- lineWidth: lineWidth,
422- maxWidth: width,
423- );
424419 lines = < EngineLineMetrics > [
425420 EngineLineMetrics .withText (
426421 text,
427422 startIndex: 0 ,
428423 endIndex: text.length,
429424 hardBreak: true ,
430425 width: lineWidth,
431- left: alignOffset,
432426 lineNumber: 0 ,
433427 ),
434428 ];
@@ -446,8 +440,6 @@ class DomTextMeasurementService extends TextMeasurementService {
446440 alphabeticBaseline: alphabeticBaseline,
447441 ideographicBaseline: ideographicBaseline,
448442 lines: lines,
449- textAlign: paragraph._textAlign,
450- textDirection: paragraph._textDirection,
451443 );
452444 }
453445
@@ -496,8 +488,6 @@ class DomTextMeasurementService extends TextMeasurementService {
496488 alphabeticBaseline: alphabeticBaseline,
497489 ideographicBaseline: ideographicBaseline,
498490 lines: null ,
499- textAlign: paragraph._textAlign,
500- textDirection: paragraph._textDirection,
501491 );
502492 }
503493
@@ -556,7 +546,7 @@ class CanvasTextMeasurementService extends TextMeasurementService {
556546 // TODO(mdebbar): Check if the whole text can fit in a single-line. Then avoid all this ceremony.
557547 _canvasContext.font = style.cssFontString;
558548 final LinesCalculator linesCalculator =
559- LinesCalculator (_canvasContext, paragraph , constraints.width);
549+ LinesCalculator (_canvasContext, text, style , constraints.width);
560550 final MinIntrinsicCalculator minIntrinsicCalculator =
561551 MinIntrinsicCalculator (_canvasContext, text, style);
562552 final MaxIntrinsicCalculator maxIntrinsicCalculator =
@@ -607,8 +597,6 @@ class CanvasTextMeasurementService extends TextMeasurementService {
607597 maxIntrinsicWidth: maxIntrinsicCalculator.value,
608598 width: constraints.width,
609599 lines: linesCalculator.lines,
610- textAlign: paragraph._textAlign,
611- textDirection: paragraph._textDirection,
612600 );
613601 return result;
614602 }
@@ -714,18 +702,16 @@ int _excludeTrailing(String text, int start, int end, CharPredicate predicate) {
714702/// During the text layout phase, this class splits the lines of text so that it
715703/// ends up fitting into the given width constraint.
716704///
717- /// It implements the Flutter engine's behavior when it comes to handling
718- /// ellipsis and max lines.
705+ /// It mimicks the Flutter engine's behavior when it comes to handling ellipsis
706+ /// and max lines.
719707class LinesCalculator {
720- LinesCalculator (this ._canvasContext, this ._paragraph , this ._maxWidth);
708+ LinesCalculator (this ._canvasContext, this ._text, this ._style , this ._maxWidth);
721709
722710 final html.CanvasRenderingContext2D _canvasContext;
723- final EngineParagraph _paragraph;
711+ final String _text;
712+ final ParagraphGeometricStyle _style;
724713 final double _maxWidth;
725714
726- String get _text => _paragraph._plainText;
727- ParagraphGeometricStyle get _style => _paragraph._geometricStyle;
728-
729715 /// The lines that have been consumed so far.
730716 List <EngineLineMetrics > lines = < EngineLineMetrics > [];
731717
@@ -782,20 +768,12 @@ class LinesCalculator {
782768 start: _lineStart,
783769 end: chunkEndWithoutSpace,
784770 );
785- final double widthOfResultingLine =
786- measureSubstring (_lineStart, breakingPoint) + _ellipsisWidth;
787- final double alignOffset = _calculateAlignOffsetForLine (
788- paragraph: _paragraph,
789- lineWidth: widthOfResultingLine,
790- maxWidth: _maxWidth,
791- );
792771 lines.add (EngineLineMetrics .withText (
793772 _text.substring (_lineStart, breakingPoint) + _style.ellipsis,
794773 startIndex: _lineStart,
795774 endIndex: chunkEnd,
796775 hardBreak: false ,
797- width: widthOfResultingLine,
798- left: alignOffset,
776+ width: measureSubstring (_lineStart, breakingPoint) + _ellipsisWidth,
799777 lineNumber: lines.length,
800778 ));
801779 } else if (isChunkTooLong) {
@@ -848,19 +826,12 @@ class LinesCalculator {
848826 _whitespacePredicate,
849827 );
850828 final int lineNumber = lines.length;
851- final double lineWidth = measureSubstring (_lineStart, endWithoutSpace);
852- final double alignOffset = _calculateAlignOffsetForLine (
853- paragraph: _paragraph,
854- lineWidth: lineWidth,
855- maxWidth: _maxWidth,
856- );
857829 final EngineLineMetrics metrics = EngineLineMetrics .withText (
858830 _text.substring (_lineStart, endWithoutNewlines),
859831 startIndex: _lineStart,
860832 endIndex: lineEnd,
861833 hardBreak: isHardBreak,
862- width: lineWidth,
863- left: alignOffset,
834+ width: measureSubstring (_lineStart, endWithoutSpace),
864835 lineNumber: lineNumber,
865836 );
866837 lines.add (metrics);
@@ -987,30 +958,3 @@ class MaxIntrinsicCalculator {
987958 _lastHardLineEnd = hardLineEnd;
988959 }
989960}
990-
991- /// Calculates the offset necessary for the given line to be correctly aligned.
992- double _calculateAlignOffsetForLine ({
993- @required EngineParagraph paragraph,
994- @required double lineWidth,
995- @required double maxWidth,
996- }) {
997- final double emptySpace = maxWidth - lineWidth;
998- // WARNING: the [paragraph] may not be laid out yet at this point. This
999- // function must not use layout metrics, such as [paragraph.height].
1000- switch (paragraph._textAlign) {
1001- case ui.TextAlign .center:
1002- return emptySpace / 2.0 ;
1003- case ui.TextAlign .right:
1004- return emptySpace;
1005- case ui.TextAlign .start:
1006- return paragraph._textDirection == ui.TextDirection .rtl
1007- ? emptySpace
1008- : 0.0 ;
1009- case ui.TextAlign .end:
1010- return paragraph._textDirection == ui.TextDirection .rtl
1011- ? 0.0
1012- : emptySpace;
1013- default :
1014- return 0.0 ;
1015- }
1016- }
0 commit comments