@@ -877,7 +877,7 @@ sk_sp<SkTypeface> Paragraph::GetDefaultSkiaTypeface(const TextStyle& style) {
877877// The x,y coordinates will be the very top left corner of the rendered
878878// paragraph.
879879void Paragraph::Paint (SkCanvas* canvas, double x, double y) {
880- canvas-> translate (x, y);
880+ SkPoint base_offset = SkPoint::Make (x, y);
881881 SkPaint paint;
882882 for (const PaintRecord& record : records_) {
883883 if (record.style ().has_foreground ) {
@@ -886,15 +886,16 @@ void Paragraph::Paint(SkCanvas* canvas, double x, double y) {
886886 paint.reset ();
887887 paint.setColor (record.style ().color );
888888 }
889- SkPoint offset = record.offset ();
890- PaintBackground (canvas, record);
889+ SkPoint offset = base_offset + record.offset ();
890+ PaintBackground (canvas, record, base_offset );
891891 canvas->drawTextBlob (record.text (), offset.x (), offset.y (), paint);
892- PaintDecorations (canvas, record);
892+ PaintDecorations (canvas, record, base_offset );
893893 }
894- canvas->translate (-x, -y);
895894}
896895
897- void Paragraph::PaintDecorations (SkCanvas* canvas, const PaintRecord& record) {
896+ void Paragraph::PaintDecorations (SkCanvas* canvas,
897+ const PaintRecord& record,
898+ SkPoint base_offset) {
898899 if (record.style ().decoration == TextDecoration::kNone )
899900 return ;
900901
@@ -935,8 +936,9 @@ void Paragraph::PaintDecorations(SkCanvas* canvas, const PaintRecord& record) {
935936 paint.setStrokeWidth (underline_thickness *
936937 record.style ().decoration_thickness_multiplier );
937938
938- SkScalar x = record.offset ().x ();
939- SkScalar y = record.offset ().y ();
939+ SkPoint record_offset = base_offset + record.offset ();
940+ SkScalar x = record_offset.x ();
941+ SkScalar y = record_offset.y ();
940942
941943 // Setup the decorations.
942944 switch (record.style ().decoration_style ) {
@@ -1052,14 +1054,16 @@ void Paragraph::PaintDecorations(SkCanvas* canvas, const PaintRecord& record) {
10521054 }
10531055}
10541056
1055- void Paragraph::PaintBackground (SkCanvas* canvas, const PaintRecord& record) {
1057+ void Paragraph::PaintBackground (SkCanvas* canvas,
1058+ const PaintRecord& record,
1059+ SkPoint base_offset) {
10561060 if (!record.style ().has_background )
10571061 return ;
10581062
10591063 const SkPaint::FontMetrics& metrics = record.metrics ();
10601064 SkRect rect (SkRect::MakeLTRB (0 , metrics.fAscent , record.GetRunWidth (),
10611065 metrics.fDescent ));
1062- rect.offset (record.offset ());
1066+ rect.offset (base_offset + record.offset ());
10631067 canvas->drawRect (rect, record.style ().background );
10641068}
10651069
0 commit comments