Skip to content
Permalink
Browse files
[LBSE] Text rendering is not pixel perfect
https://bugs.webkit.org/show_bug.cgi?id=244487

Reviewed by Rob Buis.

RenderSVGInlineText::computeNewScaledFontForStyle() uses SVGRenderingContext
calculateScreenFontSizeScalingFactor() to determine the scaling factor to apply
to the font size, to avoid scaling the rendered glyphs.

As we want to get rid of 'SVGRenderingContext' and 'SVGRenderSupport' in LBSE
(confusing, general purpose bins for different unrelated code pieces), add
a new dedicated class which contains the code for the necessary computations.

-> Introduce 'SVGLayerTransformComputation' for LBSE, which knows how to compute
   the 'Screen CTM' matrix (re-using SVG terminology here) for a given renderer.

It includes all transformations up to the enclosing composited layer (or root)
including the device scaling factor. Instead of manually multiplying matrices
this now fully relies on mapLocalToContainer(). The very same code will be used
to implement the SVG DOM getCTM() / getScreenCTM() APIs in a follow-up patch.

TransformState needs to be extended to also accumulate the actual transformation
matrix, instead of only points / quads, etc. This is precisely the information
we need for getCTM() / getScreenCTM() and calculateScreenFontSizeScalingFactor().

Covered by existing tests, fixes 14 additional SVG 1.1 testcases.

* LayoutTests/platform/mac-monterey-wk2-lbse-text/TestExpectations:
* LayoutTests/platform/mac-monterey-wk2-lbse-text/svg/W3C-SVG-1.1/animate-elem-84-t-expected.txt:
* LayoutTests/platform/mac-monterey-wk2-lbse-text/svg/W3C-SVG-1.1/coords-trans-02-t-expected.txt:
* LayoutTests/platform/mac-monterey-wk2-lbse-text/svg/W3C-SVG-1.1/coords-trans-03-t-expected.txt:
* LayoutTests/platform/mac-monterey-wk2-lbse-text/svg/W3C-SVG-1.1/coords-trans-04-t-expected.txt:
* LayoutTests/platform/mac-monterey-wk2-lbse-text/svg/W3C-SVG-1.1/coords-trans-05-t-expected.txt:
* LayoutTests/platform/mac-monterey-wk2-lbse-text/svg/W3C-SVG-1.1/coords-trans-06-t-expected.txt:
* LayoutTests/platform/mac-monterey-wk2-lbse-text/svg/W3C-SVG-1.1/filters-color-01-b-expected.txt:
* LayoutTests/platform/mac-monterey-wk2-lbse-text/svg/W3C-SVG-1.1/filters-comptran-01-b-expected.txt:
* LayoutTests/platform/mac-monterey-wk2-lbse-text/svg/W3C-SVG-1.1/interact-events-01-b-expected.txt:
* LayoutTests/platform/mac-monterey-wk2-lbse-text/svg/W3C-SVG-1.1/metadata-example-01-b-expected.txt:
* LayoutTests/platform/mac-monterey-wk2-lbse-text/svg/W3C-SVG-1.1/paths-data-04-t-expected.txt:
* LayoutTests/platform/mac-monterey-wk2-lbse-text/svg/W3C-SVG-1.1/paths-data-05-t-expected.txt:
* LayoutTests/platform/mac-monterey-wk2-lbse-text/svg/W3C-SVG-1.1/paths-data-06-t-expected.txt:
* LayoutTests/platform/mac-monterey-wk2-lbse-text/svg/W3C-SVG-1.1/paths-data-07-t-expected.txt:
* LayoutTests/platform/mac-monterey-wk2-lbse-text/svg/W3C-SVG-1.1/paths-data-08-t-expected.txt:
* LayoutTests/platform/mac-monterey-wk2-lbse-text/svg/W3C-SVG-1.1/pservers-grad-07-b-expected.txt:
* LayoutTests/platform/mac-monterey-wk2-lbse-text/svg/W3C-SVG-1.1/pservers-grad-08-b-expected.txt:
* LayoutTests/platform/mac-monterey-wk2-lbse-text/svg/W3C-SVG-1.1/struct-frag-02-t-expected.txt:
* LayoutTests/platform/mac-monterey-wk2-lbse-text/svg/W3C-SVG-1.1/struct-frag-03-t-expected.txt:
* LayoutTests/platform/mac-monterey-wk2-lbse-text/svg/W3C-SVG-1.1/text-text-01-b-expected.txt:
* LayoutTests/platform/mac-monterey-wk2-lbse-text/svg/foreignObject/text-tref-02-b-expected.txt:
* Source/WebCore/platform/graphics/transforms/TransformState.cpp:
(WebCore::TransformState::operator=):
(WebCore::TransformState::translateMappedCoordinates):
(WebCore::TransformState::move):
(WebCore::TransformState::flattenWithTransform):
* Source/WebCore/platform/graphics/transforms/TransformState.h:
(WebCore::TransformState::setTransformMatrixTracking):
(WebCore::TransformState::transformMatrixTracking const):
(WebCore::TransformState::releaseTrackedTransform):
* Source/WebCore/rendering/svg/RenderSVGInlineText.cpp:
(WebCore::RenderSVGInlineText::computeNewScaledFontForStyle):
* Source/WebCore/rendering/svg/SVGLayerTransformComputation.h: Added.
(WebCore::SVGLayerTransformComputation::SVGLayerTransformComputation):
(WebCore::SVGLayerTransformComputation::computeAccumulatedTransform const):
(WebCore::SVGLayerTransformComputation::calculateScreenFontSizeScalingFactor const):

Canonical link: https://commits.webkit.org/253938@main
  • Loading branch information
nikolaszimmermann committed Aug 30, 2022
1 parent d51fb37 commit e3e969227c9e4c59148f4e78a81fb9cbc6e2a3a3
Show file tree
Hide file tree
Showing 26 changed files with 452 additions and 327 deletions.
@@ -75,7 +75,7 @@ svg/W3C-SVG-1.1/animate-elem-80-t.svg [ Pass ]
svg/W3C-SVG-1.1/animate-elem-81-t.svg [ Pass ]
svg/W3C-SVG-1.1/animate-elem-82-t.svg [ Pass ImageOnlyFailure ]
svg/W3C-SVG-1.1/animate-elem-83-t.svg [ Pass ]
svg/W3C-SVG-1.1/animate-elem-84-t.svg [ ImageOnlyFailure ]
svg/W3C-SVG-1.1/animate-elem-84-t.svg [ Pass ]
svg/W3C-SVG-1.1/animate-elem-85-t.svg [ Pass ]
svg/W3C-SVG-1.1/color-prof-01-f.svg [ Pass ]
svg/W3C-SVG-1.1/color-prop-01-b.svg [ ImageOnlyFailure ]
@@ -84,11 +84,11 @@ svg/W3C-SVG-1.1/color-prop-03-t.svg [ Pass ]
svg/W3C-SVG-1.1/coords-coord-01-t.svg [ Pass ]
svg/W3C-SVG-1.1/coords-coord-02-t.svg [ Pass ]
svg/W3C-SVG-1.1/coords-trans-01-b.svg [ Pass ]
svg/W3C-SVG-1.1/coords-trans-02-t.svg [ ImageOnlyFailure ]
svg/W3C-SVG-1.1/coords-trans-03-t.svg [ ImageOnlyFailure ]
svg/W3C-SVG-1.1/coords-trans-04-t.svg [ ImageOnlyFailure ]
svg/W3C-SVG-1.1/coords-trans-05-t.svg [ ImageOnlyFailure ]
svg/W3C-SVG-1.1/coords-trans-06-t.svg [ ImageOnlyFailure ]
svg/W3C-SVG-1.1/coords-trans-02-t.svg [ Pass ]
svg/W3C-SVG-1.1/coords-trans-03-t.svg [ Pass ]
svg/W3C-SVG-1.1/coords-trans-04-t.svg [ Pass ]
svg/W3C-SVG-1.1/coords-trans-05-t.svg [ Pass ]
svg/W3C-SVG-1.1/coords-trans-06-t.svg [ Pass ]
svg/W3C-SVG-1.1/coords-units-01-b.svg [ ImageOnlyFailure ]
svg/W3C-SVG-1.1/coords-units-02-b.svg [ Pass ]
svg/W3C-SVG-1.1/coords-units-03-b.svg [ Pass ]
@@ -150,7 +150,7 @@ svg/W3C-SVG-1.1/masking-path-02-b.svg [ ImageOnlyFailure ]
svg/W3C-SVG-1.1/masking-path-03-b.svg [ Pass ]
svg/W3C-SVG-1.1/masking-path-04-b.svg [ ImageOnlyFailure ]
svg/W3C-SVG-1.1/masking-path-05-f.svg [ ImageOnlyFailure ]
svg/W3C-SVG-1.1/metadata-example-01-b.svg [ ImageOnlyFailure ]
svg/W3C-SVG-1.1/metadata-example-01-b.svg [ Pass ]
svg/W3C-SVG-1.1/painting-fill-01-t.svg [ Pass ]
svg/W3C-SVG-1.1/painting-fill-02-t.svg [ Pass ]
svg/W3C-SVG-1.1/painting-fill-03-t.svg [ Pass ]
@@ -168,11 +168,11 @@ svg/W3C-SVG-1.1/painting-stroke-07-t.svg [ Pass ]
svg/W3C-SVG-1.1/paths-data-01-t.svg [ Pass ]
svg/W3C-SVG-1.1/paths-data-02-t.svg [ Pass ]
svg/W3C-SVG-1.1/paths-data-03-f.svg [ Pass ]
svg/W3C-SVG-1.1/paths-data-04-t.svg [ ImageOnlyFailure ]
svg/W3C-SVG-1.1/paths-data-05-t.svg [ ImageOnlyFailure ]
svg/W3C-SVG-1.1/paths-data-06-t.svg [ ImageOnlyFailure ]
svg/W3C-SVG-1.1/paths-data-07-t.svg [ ImageOnlyFailure ]
svg/W3C-SVG-1.1/paths-data-08-t.svg [ ImageOnlyFailure ]
svg/W3C-SVG-1.1/paths-data-04-t.svg [ Pass ]
svg/W3C-SVG-1.1/paths-data-05-t.svg [ Pass ]
svg/W3C-SVG-1.1/paths-data-06-t.svg [ Pass ]
svg/W3C-SVG-1.1/paths-data-07-t.svg [ Pass ]
svg/W3C-SVG-1.1/paths-data-08-t.svg [ Pass ]
svg/W3C-SVG-1.1/paths-data-09-t.svg [ Pass ]
svg/W3C-SVG-1.1/paths-data-10-t.svg [ Pass ]
svg/W3C-SVG-1.1/paths-data-12-t.svg [ Pass ]
@@ -206,7 +206,7 @@ svg/W3C-SVG-1.1/render-elems-06-t.svg [ Pass ]
svg/W3C-SVG-1.1/render-elems-07-t.svg [ Pass ]
svg/W3C-SVG-1.1/render-elems-08-t.svg [ Pass ]
svg/W3C-SVG-1.1/render-groups-01-b.svg [ ImageOnlyFailure ]
svg/W3C-SVG-1.1/render-groups-03-t.svg [ ImageOnlyFailure ]
svg/W3C-SVG-1.1/render-groups-03-t.svg [ Pass ]
svg/W3C-SVG-1.1/script-handle-01-b.svg [ Pass ]
svg/W3C-SVG-1.1/script-handle-02-b.svg [ Pass ]
svg/W3C-SVG-1.1/script-handle-03-b.svg [ Pass ]
@@ -233,7 +233,7 @@ svg/W3C-SVG-1.1/struct-dom-05-b.svg [ Pass ]
svg/W3C-SVG-1.1/struct-dom-06-b.svg [ Pass ]
svg/W3C-SVG-1.1/struct-frag-01-t.svg [ Pass ]
svg/W3C-SVG-1.1/struct-frag-02-t.svg [ ImageOnlyFailure ]
svg/W3C-SVG-1.1/struct-frag-03-t.svg [ ImageOnlyFailure ]
svg/W3C-SVG-1.1/struct-frag-03-t.svg [ Pass ]
svg/W3C-SVG-1.1/struct-frag-04-t.svg [ Pass ]
svg/W3C-SVG-1.1/struct-frag-05-t.svg [ Pass ]
svg/W3C-SVG-1.1/struct-frag-06-t.svg [ Pass ]
@@ -22,20 +22,20 @@ layer at (240,150) size 100x100
RenderSVGTransformableContainer {g} at (240,150) size 100x100
layer at (240,150) size 100x100
RenderSVGRect {rect} at (0,0) size 100x100 [fill={[type=SOLID] [color=#000000]}] [x=240.00] [y=150.00] [width=100.00] [height=100.00]
layer at (14,43) size 295x92
RenderSVGTransformableContainer {g} at (14,42) size 295x92
layer at (14,118) size 72x16
RenderSVGText {text} at (0,75) size 72x16 contains 1 chunk(s)
RenderSVGInlineText {#text} at (0,0) size 72x16
chunk 1 (middle anchor) text run 1 at (14.23,130.00) startOffset 0 endOffset 12 width 71.53: "currentColor"
layer at (154,43) size 31x16
RenderSVGText {text} at (140,0) size 32x16 contains 1 chunk(s)
RenderSVGInlineText {#text} at (0,0) size 32x16
chunk 1 (middle anchor) text run 1 at (154.46,55.00) startOffset 0 endOffset 5 width 31.09: "green"
layer at (272,118) size 37x16
RenderSVGText {text} at (257,75) size 38x16 contains 1 chunk(s)
RenderSVGInlineText {#text} at (0,0) size 37x16
chunk 1 (middle anchor) text run 1 at (271.73,130.00) startOffset 0 endOffset 7 width 36.54: "inherit"
layer at (15,43) size 293x92
RenderSVGTransformableContainer {g} at (15,42) size 293x92
layer at (15,118) size 70x15
RenderSVGText {text} at (0,75) size 70x16 contains 1 chunk(s)
RenderSVGInlineText {#text} at (0,0) size 70x16
chunk 1 (middle anchor) text run 1 at (15.16,130.00) startOffset 0 endOffset 12 width 69.67: "currentColor"
layer at (155,43) size 30x15
RenderSVGText {text} at (139,0) size 31x16 contains 1 chunk(s)
RenderSVGInlineText {#text} at (0,0) size 31x16
chunk 1 (middle anchor) text run 1 at (154.86,55.00) startOffset 0 endOffset 5 width 30.28: "green"
layer at (272,118) size 36x15
RenderSVGText {text} at (257,75) size 36x16 contains 1 chunk(s)
RenderSVGInlineText {#text} at (0,0) size 36x16
chunk 1 (middle anchor) text run 1 at (272.20,130.00) startOffset 0 endOffset 7 width 35.60: "inherit"
layer at (10,304) size 263x46
RenderSVGText {text} at (10,304) size 264x46 contains 1 chunk(s)
RenderSVGInlineText {#text} at (0,0) size 264x46
@@ -22,28 +22,28 @@ layer at (0,0) size 20x2
RenderSVGRect {rect} at (0,0) size 20x2 [fill={[type=SOLID] [color=#0000FF]}] [x=0.00] [y=0.00] [width=20.00] [height=2.00]
layer at (0,0) size 2x20
RenderSVGRect {rect} at (0,0) size 2x20 [fill={[type=SOLID] [color=#FF0000]}] [x=0.00] [y=0.00] [width=2.00] [height=20.00]
layer at (40,26) size 169x47
RenderSVGTransformableContainer {g} at (40,26) size 169x47
layer at (40,26) size 169x48
RenderSVGTransformableContainer {g} at (40,25) size 169x48
layer at (40,26) size 109x18
RenderSVGText {text} at (0,0) size 109x18 contains 1 chunk(s)
RenderSVGInlineText {#text} at (0,0) size 109x18
RenderSVGText {text} at (0,0) size 109x19 contains 1 chunk(s)
RenderSVGInlineText {#text} at (0,0) size 109x19
chunk 1 text run 1 at (40.00,40.00) startOffset 0 endOffset 18 width 108.85: "translate (50, 50)"
layer at (48,48) size 5x5
RenderSVGRect {rect} at (8,22) size 5x5 [fill={[type=SOLID] [color=#000000]}] [x=48.00] [y=48.00] [width=5.00] [height=5.00]
layer at (68,48) size 5x5
RenderSVGRect {rect} at (28,22) size 5x5 [fill={[type=SOLID] [color=#0000FF]}] [x=68.00] [y=48.00] [width=5.00] [height=5.00]
layer at (48,68) size 5x5
RenderSVGRect {rect} at (8,42) size 5x5 [fill={[type=SOLID] [color=#FF0000]}] [x=48.00] [y=68.00] [width=5.00] [height=5.00]
layer at (48,48) size 5x6
RenderSVGRect {rect} at (8,22) size 5x6 [fill={[type=SOLID] [color=#000000]}] [x=48.00] [y=48.00] [width=5.00] [height=5.00]
layer at (68,48) size 5x6
RenderSVGRect {rect} at (28,22) size 5x6 [fill={[type=SOLID] [color=#0000FF]}] [x=68.00] [y=48.00] [width=5.00] [height=5.00]
layer at (48,68) size 5x6
RenderSVGRect {rect} at (8,42) size 5x6 [fill={[type=SOLID] [color=#FF0000]}] [x=48.00] [y=68.00] [width=5.00] [height=5.00]
layer at (140,26) size 68x18
RenderSVGText {text} at (100,0) size 69x18 contains 1 chunk(s)
RenderSVGInlineText {#text} at (0,0) size 69x18
RenderSVGText {text} at (100,0) size 69x19 contains 1 chunk(s)
RenderSVGInlineText {#text} at (0,0) size 69x19
chunk 1 text run 1 at (140.00,40.00) startOffset 0 endOffset 11 width 68.41: "rotate(-90)"
layer at (148,68) size 5x5
RenderSVGRect {rect} at (108,42) size 5x5 [fill={[type=SOLID] [color=#000000]}] [x=148.00] [y=68.00] [width=5.00] [height=5.00]
layer at (148,48) size 5x5
RenderSVGRect {rect} at (108,22) size 5x5 [fill={[type=SOLID] [color=#0000FF]}] [x=148.00] [y=48.00] [width=5.00] [height=5.00]
layer at (168,68) size 5x5
RenderSVGRect {rect} at (128,42) size 5x5 [fill={[type=SOLID] [color=#FF0000]}] [x=168.00] [y=68.00] [width=5.00] [height=5.00]
layer at (148,68) size 5x6
RenderSVGRect {rect} at (108,42) size 5x6 [fill={[type=SOLID] [color=#000000]}] [x=148.00] [y=68.00] [width=5.00] [height=5.00]
layer at (148,48) size 5x6
RenderSVGRect {rect} at (108,22) size 5x6 [fill={[type=SOLID] [color=#0000FF]}] [x=148.00] [y=48.00] [width=5.00] [height=5.00]
layer at (168,68) size 5x6
RenderSVGRect {rect} at (128,42) size 5x6 [fill={[type=SOLID] [color=#FF0000]}] [x=168.00] [y=68.00] [width=5.00] [height=5.00]
layer at (10,304) size 263x46
RenderSVGText {text} at (10,304) size 264x46 contains 1 chunk(s)
RenderSVGInlineText {#text} at (0,0) size 264x46
@@ -22,28 +22,28 @@ layer at (0,0) size 20x2
RenderSVGRect {rect} at (0,0) size 20x2 [fill={[type=SOLID] [color=#0000FF]}] [x=0.00] [y=0.00] [width=20.00] [height=2.00]
layer at (0,0) size 2x20
RenderSVGRect {rect} at (0,0) size 2x20 [fill={[type=SOLID] [color=#FF0000]}] [x=0.00] [y=0.00] [width=2.00] [height=20.00]
layer at (240,26) size 176x47
RenderSVGTransformableContainer {g} at (240,26) size 176x47
layer at (240,26) size 176x48
RenderSVGTransformableContainer {g} at (240,25) size 176x48
layer at (240,26) size 76x18
RenderSVGText {text} at (0,0) size 76x18 contains 1 chunk(s)
RenderSVGInlineText {#text} at (0,0) size 76x18
RenderSVGText {text} at (0,0) size 76x19 contains 1 chunk(s)
RenderSVGInlineText {#text} at (0,0) size 76x19
chunk 1 text run 1 at (240.00,40.00) startOffset 0 endOffset 11 width 75.54: "skew x (45)"
layer at (248,48) size 5x5
RenderSVGRect {rect} at (8,22) size 5x5 [fill={[type=SOLID] [color=#000000]}] [x=248.00] [y=48.00] [width=5.00] [height=5.00]
layer at (268,48) size 5x5
RenderSVGRect {rect} at (28,22) size 5x5 [fill={[type=SOLID] [color=#0000FF]}] [x=268.00] [y=48.00] [width=5.00] [height=5.00]
layer at (268,68) size 5x5
RenderSVGRect {rect} at (28,42) size 5x5 [fill={[type=SOLID] [color=#FF0000]}] [x=268.00] [y=68.00] [width=5.00] [height=5.00]
layer at (248,48) size 5x6
RenderSVGRect {rect} at (8,22) size 5x6 [fill={[type=SOLID] [color=#000000]}] [x=248.00] [y=48.00] [width=5.00] [height=5.00]
layer at (268,48) size 5x6
RenderSVGRect {rect} at (28,22) size 5x6 [fill={[type=SOLID] [color=#0000FF]}] [x=268.00] [y=48.00] [width=5.00] [height=5.00]
layer at (268,68) size 5x6
RenderSVGRect {rect} at (28,42) size 5x6 [fill={[type=SOLID] [color=#FF0000]}] [x=268.00] [y=68.00] [width=5.00] [height=5.00]
layer at (340,26) size 76x18
RenderSVGText {text} at (100,0) size 76x18 contains 1 chunk(s)
RenderSVGInlineText {#text} at (0,0) size 76x18
RenderSVGText {text} at (100,0) size 76x19 contains 1 chunk(s)
RenderSVGInlineText {#text} at (0,0) size 76x19
chunk 1 text run 1 at (340.00,40.00) startOffset 0 endOffset 11 width 75.54: "skew y (45)"
layer at (348,48) size 5x5
RenderSVGRect {rect} at (108,22) size 5x5 [fill={[type=SOLID] [color=#000000]}] [x=348.00] [y=48.00] [width=5.00] [height=5.00]
layer at (368,68) size 5x5
RenderSVGRect {rect} at (128,42) size 5x5 [fill={[type=SOLID] [color=#0000FF]}] [x=368.00] [y=68.00] [width=5.00] [height=5.00]
layer at (348,68) size 5x5
RenderSVGRect {rect} at (108,42) size 5x5 [fill={[type=SOLID] [color=#FF0000]}] [x=348.00] [y=68.00] [width=5.00] [height=5.00]
layer at (348,48) size 5x6
RenderSVGRect {rect} at (108,22) size 5x6 [fill={[type=SOLID] [color=#000000]}] [x=348.00] [y=48.00] [width=5.00] [height=5.00]
layer at (368,68) size 5x6
RenderSVGRect {rect} at (128,42) size 5x6 [fill={[type=SOLID] [color=#0000FF]}] [x=368.00] [y=68.00] [width=5.00] [height=5.00]
layer at (348,68) size 5x6
RenderSVGRect {rect} at (108,42) size 5x6 [fill={[type=SOLID] [color=#FF0000]}] [x=348.00] [y=68.00] [width=5.00] [height=5.00]
layer at (10,304) size 263x46
RenderSVGText {text} at (10,304) size 264x46 contains 1 chunk(s)
RenderSVGInlineText {#text} at (0,0) size 264x46
@@ -16,18 +16,18 @@ layer at (0,0) size 20x1
RenderSVGRect {rect} at (0,0) size 20x1 [fill={[type=SOLID] [color=#0000FF]}] [x=0.00] [y=0.00] [width=20.00] [height=1.00]
layer at (0,0) size 1x20
RenderSVGRect {rect} at (0,0) size 1x20 [fill={[type=SOLID] [color=#FF0000]}] [x=0.00] [y=0.00] [width=1.00] [height=20.00]
layer at (200,96) size 55x67
RenderSVGTransformableContainer {g} at (200,96) size 55x67
layer at (200,96) size 55x68
RenderSVGTransformableContainer {g} at (200,95) size 55x68
layer at (200,96) size 55x18
RenderSVGText {text} at (0,0) size 55x18 contains 1 chunk(s)
RenderSVGInlineText {#text} at (0,0) size 55x18
RenderSVGText {text} at (0,0) size 55x19 contains 1 chunk(s)
RenderSVGInlineText {#text} at (0,0) size 55x19
chunk 1 text run 1 at (200.00,110.00) startOffset 0 endOffset 9 width 54.63: "scale (2)"
layer at (208,118) size 5x5
RenderSVGRect {rect} at (8,22) size 5x5 [fill={[type=SOLID] [color=#000000]}] [x=208.00] [y=118.00] [width=5.00] [height=5.00]
layer at (248,118) size 5x5
RenderSVGRect {rect} at (48,22) size 5x5 [fill={[type=SOLID] [color=#0000FF]}] [x=248.00] [y=118.00] [width=5.00] [height=5.00]
layer at (208,158) size 5x5
RenderSVGRect {rect} at (8,62) size 5x5 [fill={[type=SOLID] [color=#FF0000]}] [x=208.00] [y=158.00] [width=5.00] [height=5.00]
layer at (208,118) size 5x6
RenderSVGRect {rect} at (8,22) size 5x6 [fill={[type=SOLID] [color=#000000]}] [x=208.00] [y=118.00] [width=5.00] [height=5.00]
layer at (248,118) size 5x6
RenderSVGRect {rect} at (48,22) size 5x6 [fill={[type=SOLID] [color=#0000FF]}] [x=248.00] [y=118.00] [width=5.00] [height=5.00]
layer at (208,158) size 5x6
RenderSVGRect {rect} at (8,62) size 5x6 [fill={[type=SOLID] [color=#FF0000]}] [x=208.00] [y=158.00] [width=5.00] [height=5.00]
layer at (10,304) size 263x46
RenderSVGText {text} at (10,304) size 264x46 contains 1 chunk(s)
RenderSVGInlineText {#text} at (0,0) size 264x46
@@ -16,18 +16,18 @@ layer at (0,0) size 20x1
RenderSVGRect {rect} at (0,0) size 20x1 [fill={[type=SOLID] [color=#0000FF]}] [x=0.00] [y=0.00] [width=20.00] [height=1.00]
layer at (0,0) size 1x20
RenderSVGRect {rect} at (0,0) size 1x20 [fill={[type=SOLID] [color=#FF0000]}] [x=0.00] [y=0.00] [width=0.67] [height=20.00]
layer at (40,186) size 185x67
RenderSVGTransformableContainer {g} at (40,186) size 185x67
layer at (40,186) size 185x68
RenderSVGTransformableContainer {g} at (40,185) size 185x68
layer at (40,186) size 185x18
RenderSVGText {text} at (0,0) size 185x18 contains 1 chunk(s)
RenderSVGInlineText {#text} at (0,0) size 185x18
RenderSVGText {text} at (0,0) size 185x19 contains 1 chunk(s)
RenderSVGInlineText {#text} at (0,0) size 185x19
chunk 1 text run 1 at (40.00,200.00) startOffset 0 endOffset 31 width 184.81: "scale(25, 95) - translate(2, 2)"
layer at (48,208) size 5x5
RenderSVGRect {rect} at (8,22) size 5x5 [fill={[type=SOLID] [color=#000000]}] [x=48.00] [y=208.00] [width=5.00] [height=5.00]
layer at (108,208) size 5x5
RenderSVGRect {rect} at (68,22) size 5x5 [fill={[type=SOLID] [color=#0000FF]}] [x=108.00] [y=208.00] [width=5.00] [height=5.00]
layer at (48,248) size 5x5
RenderSVGRect {rect} at (8,62) size 5x5 [fill={[type=SOLID] [color=#FF0000]}] [x=48.00] [y=248.00] [width=5.00] [height=5.00]
layer at (48,208) size 5x6
RenderSVGRect {rect} at (8,22) size 5x6 [fill={[type=SOLID] [color=#000000]}] [x=48.00] [y=208.00] [width=5.00] [height=5.00]
layer at (108,208) size 5x6
RenderSVGRect {rect} at (68,22) size 5x6 [fill={[type=SOLID] [color=#0000FF]}] [x=108.00] [y=208.00] [width=5.00] [height=5.00]
layer at (48,248) size 5x6
RenderSVGRect {rect} at (8,62) size 5x6 [fill={[type=SOLID] [color=#FF0000]}] [x=48.00] [y=248.00] [width=5.00] [height=5.00]
layer at (10,304) size 263x46
RenderSVGText {text} at (10,304) size 264x46 contains 1 chunk(s)
RenderSVGInlineText {#text} at (0,0) size 264x46
@@ -20,18 +20,18 @@ layer at (0,0) size 20x1
RenderSVGRect {rect} at (0,0) size 20x1 [fill={[type=SOLID] [color=#0000FF]}] [x=0.00] [y=0.00] [width=20.00] [height=1.00]
layer at (0,0) size 1x20
RenderSVGRect {rect} at (0,0) size 1x20 [fill={[type=SOLID] [color=#FF0000]}] [x=0.00] [y=0.00] [width=0.67] [height=20.00]
layer at (240,186) size 208x67
RenderSVGTransformableContainer {g} at (240,186) size 208x67
layer at (240,186) size 208x68
RenderSVGTransformableContainer {g} at (240,185) size 208x68
layer at (240,186) size 207x18
RenderSVGText {text} at (0,0) size 208x18 contains 1 chunk(s)
RenderSVGInlineText {#text} at (0,0) size 208x18
RenderSVGText {text} at (0,0) size 208x19 contains 1 chunk(s)
RenderSVGInlineText {#text} at (0,0) size 208x19
chunk 1 text run 1 at (240.00,200.00) startOffset 0 endOffset 34 width 207.03: "scale(25, 95) then translate(2, 2)"
layer at (248,208) size 5x5
RenderSVGRect {rect} at (8,22) size 5x5 [fill={[type=SOLID] [color=#000000]}] [x=248.00] [y=208.00] [width=5.00] [height=5.00]
layer at (308,208) size 5x5
RenderSVGRect {rect} at (68,22) size 5x5 [fill={[type=SOLID] [color=#0000FF]}] [x=308.00] [y=208.00] [width=5.00] [height=5.00]
layer at (248,248) size 5x5
RenderSVGRect {rect} at (8,62) size 5x5 [fill={[type=SOLID] [color=#FF0000]}] [x=248.00] [y=248.00] [width=5.00] [height=5.00]
layer at (248,208) size 5x6
RenderSVGRect {rect} at (8,22) size 5x6 [fill={[type=SOLID] [color=#000000]}] [x=248.00] [y=208.00] [width=5.00] [height=5.00]
layer at (308,208) size 5x6
RenderSVGRect {rect} at (68,22) size 5x6 [fill={[type=SOLID] [color=#0000FF]}] [x=308.00] [y=208.00] [width=5.00] [height=5.00]
layer at (248,248) size 5x6
RenderSVGRect {rect} at (8,62) size 5x6 [fill={[type=SOLID] [color=#FF0000]}] [x=248.00] [y=248.00] [width=5.00] [height=5.00]
layer at (10,304) size 263x46
RenderSVGText {text} at (10,304) size 264x46 contains 1 chunk(s)
RenderSVGInlineText {#text} at (0,0) size 264x46

0 comments on commit e3e9692

Please sign in to comment.