@@ -416,19 +416,13 @@ class DomTextMeasurementService extends TextMeasurementService {
416
416
List <EngineLineMetrics > lines;
417
417
if (text != null ) {
418
418
final double lineWidth = maxIntrinsicWidth;
419
- final double alignOffset = _calculateAlignOffsetForLine (
420
- paragraph: paragraph,
421
- lineWidth: lineWidth,
422
- maxWidth: width,
423
- );
424
419
lines = < EngineLineMetrics > [
425
420
EngineLineMetrics .withText (
426
421
text,
427
422
startIndex: 0 ,
428
423
endIndex: text.length,
429
424
hardBreak: true ,
430
425
width: lineWidth,
431
- left: alignOffset,
432
426
lineNumber: 0 ,
433
427
),
434
428
];
@@ -446,8 +440,6 @@ class DomTextMeasurementService extends TextMeasurementService {
446
440
alphabeticBaseline: alphabeticBaseline,
447
441
ideographicBaseline: ideographicBaseline,
448
442
lines: lines,
449
- textAlign: paragraph._textAlign,
450
- textDirection: paragraph._textDirection,
451
443
);
452
444
}
453
445
@@ -496,8 +488,6 @@ class DomTextMeasurementService extends TextMeasurementService {
496
488
alphabeticBaseline: alphabeticBaseline,
497
489
ideographicBaseline: ideographicBaseline,
498
490
lines: null ,
499
- textAlign: paragraph._textAlign,
500
- textDirection: paragraph._textDirection,
501
491
);
502
492
}
503
493
@@ -556,7 +546,7 @@ class CanvasTextMeasurementService extends TextMeasurementService {
556
546
// TODO(mdebbar): Check if the whole text can fit in a single-line. Then avoid all this ceremony.
557
547
_canvasContext.font = style.cssFontString;
558
548
final LinesCalculator linesCalculator =
559
- LinesCalculator (_canvasContext, paragraph , constraints.width);
549
+ LinesCalculator (_canvasContext, text, style , constraints.width);
560
550
final MinIntrinsicCalculator minIntrinsicCalculator =
561
551
MinIntrinsicCalculator (_canvasContext, text, style);
562
552
final MaxIntrinsicCalculator maxIntrinsicCalculator =
@@ -607,8 +597,6 @@ class CanvasTextMeasurementService extends TextMeasurementService {
607
597
maxIntrinsicWidth: maxIntrinsicCalculator.value,
608
598
width: constraints.width,
609
599
lines: linesCalculator.lines,
610
- textAlign: paragraph._textAlign,
611
- textDirection: paragraph._textDirection,
612
600
);
613
601
return result;
614
602
}
@@ -714,18 +702,16 @@ int _excludeTrailing(String text, int start, int end, CharPredicate predicate) {
714
702
/// During the text layout phase, this class splits the lines of text so that it
715
703
/// ends up fitting into the given width constraint.
716
704
///
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.
719
707
class LinesCalculator {
720
- LinesCalculator (this ._canvasContext, this ._paragraph , this ._maxWidth);
708
+ LinesCalculator (this ._canvasContext, this ._text, this ._style , this ._maxWidth);
721
709
722
710
final html.CanvasRenderingContext2D _canvasContext;
723
- final EngineParagraph _paragraph;
711
+ final String _text;
712
+ final ParagraphGeometricStyle _style;
724
713
final double _maxWidth;
725
714
726
- String get _text => _paragraph._plainText;
727
- ParagraphGeometricStyle get _style => _paragraph._geometricStyle;
728
-
729
715
/// The lines that have been consumed so far.
730
716
List <EngineLineMetrics > lines = < EngineLineMetrics > [];
731
717
@@ -782,20 +768,12 @@ class LinesCalculator {
782
768
start: _lineStart,
783
769
end: chunkEndWithoutSpace,
784
770
);
785
- final double widthOfResultingLine =
786
- measureSubstring (_lineStart, breakingPoint) + _ellipsisWidth;
787
- final double alignOffset = _calculateAlignOffsetForLine (
788
- paragraph: _paragraph,
789
- lineWidth: widthOfResultingLine,
790
- maxWidth: _maxWidth,
791
- );
792
771
lines.add (EngineLineMetrics .withText (
793
772
_text.substring (_lineStart, breakingPoint) + _style.ellipsis,
794
773
startIndex: _lineStart,
795
774
endIndex: chunkEnd,
796
775
hardBreak: false ,
797
- width: widthOfResultingLine,
798
- left: alignOffset,
776
+ width: measureSubstring (_lineStart, breakingPoint) + _ellipsisWidth,
799
777
lineNumber: lines.length,
800
778
));
801
779
} else if (isChunkTooLong) {
@@ -848,19 +826,12 @@ class LinesCalculator {
848
826
_whitespacePredicate,
849
827
);
850
828
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
- );
857
829
final EngineLineMetrics metrics = EngineLineMetrics .withText (
858
830
_text.substring (_lineStart, endWithoutNewlines),
859
831
startIndex: _lineStart,
860
832
endIndex: lineEnd,
861
833
hardBreak: isHardBreak,
862
- width: lineWidth,
863
- left: alignOffset,
834
+ width: measureSubstring (_lineStart, endWithoutSpace),
864
835
lineNumber: lineNumber,
865
836
);
866
837
lines.add (metrics);
@@ -987,30 +958,3 @@ class MaxIntrinsicCalculator {
987
958
_lastHardLineEnd = hardLineEnd;
988
959
}
989
960
}
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