Skip to content

Commit

Permalink
[skrifa] Implement an optimized fill_glyph operation (#754)
Browse files Browse the repository at this point in the history
* [skrifa] Implement an optimized fill_glyph operation

In COLRv0/v1 drawing clients may gain a performance benefit from filling
a shape (with a solid or gradient fill) instead of performing a clip +
unbounded fill in sequence.

Allow clients to do that using a fill_glyph() operation that combines
the two.

Implement this using a temporary painter that speculatively traverses
the glyph tree down from a `PaintGlyph` operation collecting potential
transforms along the way.

New behavior shows clearly in new baselines for tests added in #758 that
nest `PaintGlyph` tables and cover mixed situations in
which the optimization succeeds for a leaf but fails for the
`PaintGlyph` at a layer above, and demonstrate recording transforms
along the way.

Fixes #746.
  • Loading branch information
drott authored Jan 23, 2024
1 parent 5143ffa commit c31397f
Show file tree
Hide file tree
Showing 53 changed files with 1,055 additions and 898 deletions.
10 changes: 5 additions & 5 deletions font-test-data/test_data/colrv1_json/colrv1_clipbox
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{"glyph_id":156,"ops":[{"PushClipBox":{"clip_box":{"x_min":0.0,"y_min":500.0,"x_max":500.0,"y_max":1000.0}}},{"PushLayer":{"composite_mode":3}},{"PushClipBox":{"clip_box":{"x_min":100.0,"y_min":100.0,"x_max":900.0,"y_max":900.0}}},{"PushClipBox":{"clip_box":{"x_min":0.0,"y_min":0.0,"x_max":1000.0,"y_max":1000.0}}},{"PushClipGlyph":{"gid":2}},{"FillBrush":{"brush":{"RadialGradient":{"c0":{"x":166.0,"y":768.0},"r0":0.0,"c1":{"x":166.0,"y":768.0},"r1":256.0,"color_stops":[{"offset":0.0,"palette_index":3,"alpha":1.0},{"offset":0.5,"palette_index":9,"alpha":1.0},{"offset":1.0,"palette_index":0,"alpha":1.0}],"extend":"Reflect"}}}},"PopClip","PopClip","PopClip",{"PushLayer":{"composite_mode":3}},{"PushClipGlyph":{"gid":161}},{"FillBrush":{"brush":{"Solid":{"palette_index":13,"alpha":0.4000244}}}},"PopClip","PopLayer","PopLayer","PopClip"]}
{"glyph_id":157,"ops":[{"PushClipBox":{"clip_box":{"x_min":0.0,"y_min":0.0,"x_max":500.0,"y_max":500.0}}},{"PushLayer":{"composite_mode":3}},{"PushClipBox":{"clip_box":{"x_min":100.0,"y_min":100.0,"x_max":900.0,"y_max":900.0}}},{"PushClipBox":{"clip_box":{"x_min":0.0,"y_min":0.0,"x_max":1000.0,"y_max":1000.0}}},{"PushClipGlyph":{"gid":2}},{"FillBrush":{"brush":{"RadialGradient":{"c0":{"x":166.0,"y":768.0},"r0":0.0,"c1":{"x":166.0,"y":768.0},"r1":256.0,"color_stops":[{"offset":0.0,"palette_index":3,"alpha":1.0},{"offset":0.5,"palette_index":9,"alpha":1.0},{"offset":1.0,"palette_index":0,"alpha":1.0}],"extend":"Reflect"}}}},"PopClip","PopClip","PopClip",{"PushLayer":{"composite_mode":3}},{"PushClipGlyph":{"gid":162}},{"FillBrush":{"brush":{"Solid":{"palette_index":13,"alpha":0.4000244}}}},"PopClip","PopLayer","PopLayer","PopClip"]}
{"glyph_id":158,"ops":[{"PushClipBox":{"clip_box":{"x_min":500.0,"y_min":0.0,"x_max":1000.0,"y_max":500.0}}},{"PushLayer":{"composite_mode":3}},{"PushClipBox":{"clip_box":{"x_min":100.0,"y_min":100.0,"x_max":900.0,"y_max":900.0}}},{"PushClipBox":{"clip_box":{"x_min":0.0,"y_min":0.0,"x_max":1000.0,"y_max":1000.0}}},{"PushClipGlyph":{"gid":2}},{"FillBrush":{"brush":{"RadialGradient":{"c0":{"x":166.0,"y":768.0},"r0":0.0,"c1":{"x":166.0,"y":768.0},"r1":256.0,"color_stops":[{"offset":0.0,"palette_index":3,"alpha":1.0},{"offset":0.5,"palette_index":9,"alpha":1.0},{"offset":1.0,"palette_index":0,"alpha":1.0}],"extend":"Reflect"}}}},"PopClip","PopClip","PopClip",{"PushLayer":{"composite_mode":3}},{"PushClipGlyph":{"gid":163}},{"FillBrush":{"brush":{"Solid":{"palette_index":13,"alpha":0.4000244}}}},"PopClip","PopLayer","PopLayer","PopClip"]}
{"glyph_id":159,"ops":[{"PushClipBox":{"clip_box":{"x_min":500.0,"y_min":500.0,"x_max":1000.0,"y_max":1000.0}}},{"PushLayer":{"composite_mode":3}},{"PushClipBox":{"clip_box":{"x_min":100.0,"y_min":100.0,"x_max":900.0,"y_max":900.0}}},{"PushClipBox":{"clip_box":{"x_min":0.0,"y_min":0.0,"x_max":1000.0,"y_max":1000.0}}},{"PushClipGlyph":{"gid":2}},{"FillBrush":{"brush":{"RadialGradient":{"c0":{"x":166.0,"y":768.0},"r0":0.0,"c1":{"x":166.0,"y":768.0},"r1":256.0,"color_stops":[{"offset":0.0,"palette_index":3,"alpha":1.0},{"offset":0.5,"palette_index":9,"alpha":1.0},{"offset":1.0,"palette_index":0,"alpha":1.0}],"extend":"Reflect"}}}},"PopClip","PopClip","PopClip",{"PushLayer":{"composite_mode":3}},{"PushClipGlyph":{"gid":164}},{"FillBrush":{"brush":{"Solid":{"palette_index":13,"alpha":0.4000244}}}},"PopClip","PopLayer","PopLayer","PopClip"]}
{"glyph_id":160,"ops":[{"PushClipBox":{"clip_box":{"x_min":250.0,"y_min":250.0,"x_max":750.0,"y_max":750.0}}},{"PushLayer":{"composite_mode":3}},{"PushClipBox":{"clip_box":{"x_min":100.0,"y_min":100.0,"x_max":900.0,"y_max":900.0}}},{"PushClipBox":{"clip_box":{"x_min":0.0,"y_min":0.0,"x_max":1000.0,"y_max":1000.0}}},{"PushClipGlyph":{"gid":2}},{"FillBrush":{"brush":{"RadialGradient":{"c0":{"x":166.0,"y":768.0},"r0":0.0,"c1":{"x":166.0,"y":768.0},"r1":256.0,"color_stops":[{"offset":0.0,"palette_index":3,"alpha":1.0},{"offset":0.5,"palette_index":9,"alpha":1.0},{"offset":1.0,"palette_index":0,"alpha":1.0}],"extend":"Reflect"}}}},"PopClip","PopClip","PopClip",{"PushLayer":{"composite_mode":3}},{"PushClipGlyph":{"gid":165}},{"FillBrush":{"brush":{"Solid":{"palette_index":13,"alpha":0.4000244}}}},"PopClip","PopLayer","PopLayer","PopClip"]}
{"glyph_id":156,"ops":[{"PushClipBox":{"clip_box":{"x_min":0.0,"y_min":500.0,"x_max":500.0,"y_max":1000.0}}},{"PushLayer":{"composite_mode":3}},{"PushClipBox":{"clip_box":{"x_min":100.0,"y_min":100.0,"x_max":900.0,"y_max":900.0}}},{"PushClipBox":{"clip_box":{"x_min":0.0,"y_min":0.0,"x_max":1000.0,"y_max":1000.0}}},{"FillGlyph":{"gid":2,"transform":{"xx":1.0,"yx":0.0,"xy":0.0,"yy":1.0,"dx":0.0,"dy":0.0},"brush":{"RadialGradient":{"c0":{"x":166.0,"y":768.0},"r0":0.0,"c1":{"x":166.0,"y":768.0},"r1":256.0,"color_stops":[{"offset":0.0,"palette_index":3,"alpha":1.0},{"offset":0.5,"palette_index":9,"alpha":1.0},{"offset":1.0,"palette_index":0,"alpha":1.0}],"extend":"Reflect"}}}},"PopClip","PopClip",{"PushLayer":{"composite_mode":3}},{"FillGlyph":{"gid":161,"transform":{"xx":1.0,"yx":0.0,"xy":0.0,"yy":1.0,"dx":0.0,"dy":0.0},"brush":{"Solid":{"palette_index":13,"alpha":0.4000244}}}},"PopLayer","PopLayer","PopClip"]}
{"glyph_id":157,"ops":[{"PushClipBox":{"clip_box":{"x_min":0.0,"y_min":0.0,"x_max":500.0,"y_max":500.0}}},{"PushLayer":{"composite_mode":3}},{"PushClipBox":{"clip_box":{"x_min":100.0,"y_min":100.0,"x_max":900.0,"y_max":900.0}}},{"PushClipBox":{"clip_box":{"x_min":0.0,"y_min":0.0,"x_max":1000.0,"y_max":1000.0}}},{"FillGlyph":{"gid":2,"transform":{"xx":1.0,"yx":0.0,"xy":0.0,"yy":1.0,"dx":0.0,"dy":0.0},"brush":{"RadialGradient":{"c0":{"x":166.0,"y":768.0},"r0":0.0,"c1":{"x":166.0,"y":768.0},"r1":256.0,"color_stops":[{"offset":0.0,"palette_index":3,"alpha":1.0},{"offset":0.5,"palette_index":9,"alpha":1.0},{"offset":1.0,"palette_index":0,"alpha":1.0}],"extend":"Reflect"}}}},"PopClip","PopClip",{"PushLayer":{"composite_mode":3}},{"FillGlyph":{"gid":162,"transform":{"xx":1.0,"yx":0.0,"xy":0.0,"yy":1.0,"dx":0.0,"dy":0.0},"brush":{"Solid":{"palette_index":13,"alpha":0.4000244}}}},"PopLayer","PopLayer","PopClip"]}
{"glyph_id":158,"ops":[{"PushClipBox":{"clip_box":{"x_min":500.0,"y_min":0.0,"x_max":1000.0,"y_max":500.0}}},{"PushLayer":{"composite_mode":3}},{"PushClipBox":{"clip_box":{"x_min":100.0,"y_min":100.0,"x_max":900.0,"y_max":900.0}}},{"PushClipBox":{"clip_box":{"x_min":0.0,"y_min":0.0,"x_max":1000.0,"y_max":1000.0}}},{"FillGlyph":{"gid":2,"transform":{"xx":1.0,"yx":0.0,"xy":0.0,"yy":1.0,"dx":0.0,"dy":0.0},"brush":{"RadialGradient":{"c0":{"x":166.0,"y":768.0},"r0":0.0,"c1":{"x":166.0,"y":768.0},"r1":256.0,"color_stops":[{"offset":0.0,"palette_index":3,"alpha":1.0},{"offset":0.5,"palette_index":9,"alpha":1.0},{"offset":1.0,"palette_index":0,"alpha":1.0}],"extend":"Reflect"}}}},"PopClip","PopClip",{"PushLayer":{"composite_mode":3}},{"FillGlyph":{"gid":163,"transform":{"xx":1.0,"yx":0.0,"xy":0.0,"yy":1.0,"dx":0.0,"dy":0.0},"brush":{"Solid":{"palette_index":13,"alpha":0.4000244}}}},"PopLayer","PopLayer","PopClip"]}
{"glyph_id":159,"ops":[{"PushClipBox":{"clip_box":{"x_min":500.0,"y_min":500.0,"x_max":1000.0,"y_max":1000.0}}},{"PushLayer":{"composite_mode":3}},{"PushClipBox":{"clip_box":{"x_min":100.0,"y_min":100.0,"x_max":900.0,"y_max":900.0}}},{"PushClipBox":{"clip_box":{"x_min":0.0,"y_min":0.0,"x_max":1000.0,"y_max":1000.0}}},{"FillGlyph":{"gid":2,"transform":{"xx":1.0,"yx":0.0,"xy":0.0,"yy":1.0,"dx":0.0,"dy":0.0},"brush":{"RadialGradient":{"c0":{"x":166.0,"y":768.0},"r0":0.0,"c1":{"x":166.0,"y":768.0},"r1":256.0,"color_stops":[{"offset":0.0,"palette_index":3,"alpha":1.0},{"offset":0.5,"palette_index":9,"alpha":1.0},{"offset":1.0,"palette_index":0,"alpha":1.0}],"extend":"Reflect"}}}},"PopClip","PopClip",{"PushLayer":{"composite_mode":3}},{"FillGlyph":{"gid":164,"transform":{"xx":1.0,"yx":0.0,"xy":0.0,"yy":1.0,"dx":0.0,"dy":0.0},"brush":{"Solid":{"palette_index":13,"alpha":0.4000244}}}},"PopLayer","PopLayer","PopClip"]}
{"glyph_id":160,"ops":[{"PushClipBox":{"clip_box":{"x_min":250.0,"y_min":250.0,"x_max":750.0,"y_max":750.0}}},{"PushLayer":{"composite_mode":3}},{"PushClipBox":{"clip_box":{"x_min":100.0,"y_min":100.0,"x_max":900.0,"y_max":900.0}}},{"PushClipBox":{"clip_box":{"x_min":0.0,"y_min":0.0,"x_max":1000.0,"y_max":1000.0}}},{"FillGlyph":{"gid":2,"transform":{"xx":1.0,"yx":0.0,"xy":0.0,"yy":1.0,"dx":0.0,"dy":0.0},"brush":{"RadialGradient":{"c0":{"x":166.0,"y":768.0},"r0":0.0,"c1":{"x":166.0,"y":768.0},"r1":256.0,"color_stops":[{"offset":0.0,"palette_index":3,"alpha":1.0},{"offset":0.5,"palette_index":9,"alpha":1.0},{"offset":1.0,"palette_index":0,"alpha":1.0}],"extend":"Reflect"}}}},"PopClip","PopClip",{"PushLayer":{"composite_mode":3}},{"FillGlyph":{"gid":165,"transform":{"xx":1.0,"yx":0.0,"xy":0.0,"yy":1.0,"dx":0.0,"dy":0.0},"brush":{"Solid":{"palette_index":13,"alpha":0.4000244}}}},"PopLayer","PopLayer","PopClip"]}
10 changes: 5 additions & 5 deletions font-test-data/test_data/colrv1_json/colrv1_clipbox_CLIO_200
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{"glyph_id":156,"ops":[{"PushClipBox":{"clip_box":{"x_min":0.0,"y_min":500.0,"x_max":500.0,"y_max":1000.0}}},{"PushLayer":{"composite_mode":3}},{"PushClipBox":{"clip_box":{"x_min":300.0122,"y_min":300.0122,"x_max":699.9878,"y_max":699.9878}}},{"PushClipBox":{"clip_box":{"x_min":0.0,"y_min":0.0,"x_max":1000.0,"y_max":1000.0}}},{"PushClipGlyph":{"gid":2}},{"FillBrush":{"brush":{"RadialGradient":{"c0":{"x":166.0,"y":768.0},"r0":0.0,"c1":{"x":166.0,"y":768.0},"r1":256.0,"color_stops":[{"offset":0.0,"palette_index":3,"alpha":1.0},{"offset":0.5,"palette_index":9,"alpha":1.0},{"offset":1.0,"palette_index":0,"alpha":1.0}],"extend":"Reflect"}}}},"PopClip","PopClip","PopClip",{"PushLayer":{"composite_mode":3}},{"PushClipGlyph":{"gid":161}},{"FillBrush":{"brush":{"Solid":{"palette_index":13,"alpha":0.4000244}}}},"PopClip","PopLayer","PopLayer","PopClip"]}
{"glyph_id":157,"ops":[{"PushClipBox":{"clip_box":{"x_min":0.0,"y_min":0.0,"x_max":500.0,"y_max":500.0}}},{"PushLayer":{"composite_mode":3}},{"PushClipBox":{"clip_box":{"x_min":300.0122,"y_min":300.0122,"x_max":699.9878,"y_max":699.9878}}},{"PushClipBox":{"clip_box":{"x_min":0.0,"y_min":0.0,"x_max":1000.0,"y_max":1000.0}}},{"PushClipGlyph":{"gid":2}},{"FillBrush":{"brush":{"RadialGradient":{"c0":{"x":166.0,"y":768.0},"r0":0.0,"c1":{"x":166.0,"y":768.0},"r1":256.0,"color_stops":[{"offset":0.0,"palette_index":3,"alpha":1.0},{"offset":0.5,"palette_index":9,"alpha":1.0},{"offset":1.0,"palette_index":0,"alpha":1.0}],"extend":"Reflect"}}}},"PopClip","PopClip","PopClip",{"PushLayer":{"composite_mode":3}},{"PushClipGlyph":{"gid":162}},{"FillBrush":{"brush":{"Solid":{"palette_index":13,"alpha":0.4000244}}}},"PopClip","PopLayer","PopLayer","PopClip"]}
{"glyph_id":158,"ops":[{"PushClipBox":{"clip_box":{"x_min":500.0,"y_min":0.0,"x_max":1000.0,"y_max":500.0}}},{"PushLayer":{"composite_mode":3}},{"PushClipBox":{"clip_box":{"x_min":300.0122,"y_min":300.0122,"x_max":699.9878,"y_max":699.9878}}},{"PushClipBox":{"clip_box":{"x_min":0.0,"y_min":0.0,"x_max":1000.0,"y_max":1000.0}}},{"PushClipGlyph":{"gid":2}},{"FillBrush":{"brush":{"RadialGradient":{"c0":{"x":166.0,"y":768.0},"r0":0.0,"c1":{"x":166.0,"y":768.0},"r1":256.0,"color_stops":[{"offset":0.0,"palette_index":3,"alpha":1.0},{"offset":0.5,"palette_index":9,"alpha":1.0},{"offset":1.0,"palette_index":0,"alpha":1.0}],"extend":"Reflect"}}}},"PopClip","PopClip","PopClip",{"PushLayer":{"composite_mode":3}},{"PushClipGlyph":{"gid":163}},{"FillBrush":{"brush":{"Solid":{"palette_index":13,"alpha":0.4000244}}}},"PopClip","PopLayer","PopLayer","PopClip"]}
{"glyph_id":159,"ops":[{"PushClipBox":{"clip_box":{"x_min":500.0,"y_min":500.0,"x_max":1000.0,"y_max":1000.0}}},{"PushLayer":{"composite_mode":3}},{"PushClipBox":{"clip_box":{"x_min":300.0122,"y_min":300.0122,"x_max":699.9878,"y_max":699.9878}}},{"PushClipBox":{"clip_box":{"x_min":0.0,"y_min":0.0,"x_max":1000.0,"y_max":1000.0}}},{"PushClipGlyph":{"gid":2}},{"FillBrush":{"brush":{"RadialGradient":{"c0":{"x":166.0,"y":768.0},"r0":0.0,"c1":{"x":166.0,"y":768.0},"r1":256.0,"color_stops":[{"offset":0.0,"palette_index":3,"alpha":1.0},{"offset":0.5,"palette_index":9,"alpha":1.0},{"offset":1.0,"palette_index":0,"alpha":1.0}],"extend":"Reflect"}}}},"PopClip","PopClip","PopClip",{"PushLayer":{"composite_mode":3}},{"PushClipGlyph":{"gid":164}},{"FillBrush":{"brush":{"Solid":{"palette_index":13,"alpha":0.4000244}}}},"PopClip","PopLayer","PopLayer","PopClip"]}
{"glyph_id":160,"ops":[{"PushClipBox":{"clip_box":{"x_min":250.0,"y_min":250.0,"x_max":750.0,"y_max":750.0}}},{"PushLayer":{"composite_mode":3}},{"PushClipBox":{"clip_box":{"x_min":300.0122,"y_min":300.0122,"x_max":699.9878,"y_max":699.9878}}},{"PushClipBox":{"clip_box":{"x_min":0.0,"y_min":0.0,"x_max":1000.0,"y_max":1000.0}}},{"PushClipGlyph":{"gid":2}},{"FillBrush":{"brush":{"RadialGradient":{"c0":{"x":166.0,"y":768.0},"r0":0.0,"c1":{"x":166.0,"y":768.0},"r1":256.0,"color_stops":[{"offset":0.0,"palette_index":3,"alpha":1.0},{"offset":0.5,"palette_index":9,"alpha":1.0},{"offset":1.0,"palette_index":0,"alpha":1.0}],"extend":"Reflect"}}}},"PopClip","PopClip","PopClip",{"PushLayer":{"composite_mode":3}},{"PushClipGlyph":{"gid":165}},{"FillBrush":{"brush":{"Solid":{"palette_index":13,"alpha":0.4000244}}}},"PopClip","PopLayer","PopLayer","PopClip"]}
{"glyph_id":156,"ops":[{"PushClipBox":{"clip_box":{"x_min":0.0,"y_min":500.0,"x_max":500.0,"y_max":1000.0}}},{"PushLayer":{"composite_mode":3}},{"PushClipBox":{"clip_box":{"x_min":300.0122,"y_min":300.0122,"x_max":699.9878,"y_max":699.9878}}},{"PushClipBox":{"clip_box":{"x_min":0.0,"y_min":0.0,"x_max":1000.0,"y_max":1000.0}}},{"FillGlyph":{"gid":2,"transform":{"xx":1.0,"yx":0.0,"xy":0.0,"yy":1.0,"dx":0.0,"dy":0.0},"brush":{"RadialGradient":{"c0":{"x":166.0,"y":768.0},"r0":0.0,"c1":{"x":166.0,"y":768.0},"r1":256.0,"color_stops":[{"offset":0.0,"palette_index":3,"alpha":1.0},{"offset":0.5,"palette_index":9,"alpha":1.0},{"offset":1.0,"palette_index":0,"alpha":1.0}],"extend":"Reflect"}}}},"PopClip","PopClip",{"PushLayer":{"composite_mode":3}},{"FillGlyph":{"gid":161,"transform":{"xx":1.0,"yx":0.0,"xy":0.0,"yy":1.0,"dx":0.0,"dy":0.0},"brush":{"Solid":{"palette_index":13,"alpha":0.4000244}}}},"PopLayer","PopLayer","PopClip"]}
{"glyph_id":157,"ops":[{"PushClipBox":{"clip_box":{"x_min":0.0,"y_min":0.0,"x_max":500.0,"y_max":500.0}}},{"PushLayer":{"composite_mode":3}},{"PushClipBox":{"clip_box":{"x_min":300.0122,"y_min":300.0122,"x_max":699.9878,"y_max":699.9878}}},{"PushClipBox":{"clip_box":{"x_min":0.0,"y_min":0.0,"x_max":1000.0,"y_max":1000.0}}},{"FillGlyph":{"gid":2,"transform":{"xx":1.0,"yx":0.0,"xy":0.0,"yy":1.0,"dx":0.0,"dy":0.0},"brush":{"RadialGradient":{"c0":{"x":166.0,"y":768.0},"r0":0.0,"c1":{"x":166.0,"y":768.0},"r1":256.0,"color_stops":[{"offset":0.0,"palette_index":3,"alpha":1.0},{"offset":0.5,"palette_index":9,"alpha":1.0},{"offset":1.0,"palette_index":0,"alpha":1.0}],"extend":"Reflect"}}}},"PopClip","PopClip",{"PushLayer":{"composite_mode":3}},{"FillGlyph":{"gid":162,"transform":{"xx":1.0,"yx":0.0,"xy":0.0,"yy":1.0,"dx":0.0,"dy":0.0},"brush":{"Solid":{"palette_index":13,"alpha":0.4000244}}}},"PopLayer","PopLayer","PopClip"]}
{"glyph_id":158,"ops":[{"PushClipBox":{"clip_box":{"x_min":500.0,"y_min":0.0,"x_max":1000.0,"y_max":500.0}}},{"PushLayer":{"composite_mode":3}},{"PushClipBox":{"clip_box":{"x_min":300.0122,"y_min":300.0122,"x_max":699.9878,"y_max":699.9878}}},{"PushClipBox":{"clip_box":{"x_min":0.0,"y_min":0.0,"x_max":1000.0,"y_max":1000.0}}},{"FillGlyph":{"gid":2,"transform":{"xx":1.0,"yx":0.0,"xy":0.0,"yy":1.0,"dx":0.0,"dy":0.0},"brush":{"RadialGradient":{"c0":{"x":166.0,"y":768.0},"r0":0.0,"c1":{"x":166.0,"y":768.0},"r1":256.0,"color_stops":[{"offset":0.0,"palette_index":3,"alpha":1.0},{"offset":0.5,"palette_index":9,"alpha":1.0},{"offset":1.0,"palette_index":0,"alpha":1.0}],"extend":"Reflect"}}}},"PopClip","PopClip",{"PushLayer":{"composite_mode":3}},{"FillGlyph":{"gid":163,"transform":{"xx":1.0,"yx":0.0,"xy":0.0,"yy":1.0,"dx":0.0,"dy":0.0},"brush":{"Solid":{"palette_index":13,"alpha":0.4000244}}}},"PopLayer","PopLayer","PopClip"]}
{"glyph_id":159,"ops":[{"PushClipBox":{"clip_box":{"x_min":500.0,"y_min":500.0,"x_max":1000.0,"y_max":1000.0}}},{"PushLayer":{"composite_mode":3}},{"PushClipBox":{"clip_box":{"x_min":300.0122,"y_min":300.0122,"x_max":699.9878,"y_max":699.9878}}},{"PushClipBox":{"clip_box":{"x_min":0.0,"y_min":0.0,"x_max":1000.0,"y_max":1000.0}}},{"FillGlyph":{"gid":2,"transform":{"xx":1.0,"yx":0.0,"xy":0.0,"yy":1.0,"dx":0.0,"dy":0.0},"brush":{"RadialGradient":{"c0":{"x":166.0,"y":768.0},"r0":0.0,"c1":{"x":166.0,"y":768.0},"r1":256.0,"color_stops":[{"offset":0.0,"palette_index":3,"alpha":1.0},{"offset":0.5,"palette_index":9,"alpha":1.0},{"offset":1.0,"palette_index":0,"alpha":1.0}],"extend":"Reflect"}}}},"PopClip","PopClip",{"PushLayer":{"composite_mode":3}},{"FillGlyph":{"gid":164,"transform":{"xx":1.0,"yx":0.0,"xy":0.0,"yy":1.0,"dx":0.0,"dy":0.0},"brush":{"Solid":{"palette_index":13,"alpha":0.4000244}}}},"PopLayer","PopLayer","PopClip"]}
{"glyph_id":160,"ops":[{"PushClipBox":{"clip_box":{"x_min":250.0,"y_min":250.0,"x_max":750.0,"y_max":750.0}}},{"PushLayer":{"composite_mode":3}},{"PushClipBox":{"clip_box":{"x_min":300.0122,"y_min":300.0122,"x_max":699.9878,"y_max":699.9878}}},{"PushClipBox":{"clip_box":{"x_min":0.0,"y_min":0.0,"x_max":1000.0,"y_max":1000.0}}},{"FillGlyph":{"gid":2,"transform":{"xx":1.0,"yx":0.0,"xy":0.0,"yy":1.0,"dx":0.0,"dy":0.0},"brush":{"RadialGradient":{"c0":{"x":166.0,"y":768.0},"r0":0.0,"c1":{"x":166.0,"y":768.0},"r1":256.0,"color_stops":[{"offset":0.0,"palette_index":3,"alpha":1.0},{"offset":0.5,"palette_index":9,"alpha":1.0},{"offset":1.0,"palette_index":0,"alpha":1.0}],"extend":"Reflect"}}}},"PopClip","PopClip",{"PushLayer":{"composite_mode":3}},{"FillGlyph":{"gid":165,"transform":{"xx":1.0,"yx":0.0,"xy":0.0,"yy":1.0,"dx":0.0,"dy":0.0},"brush":{"Solid":{"palette_index":13,"alpha":0.4000244}}}},"PopLayer","PopLayer","PopClip"]}
Original file line number Diff line number Diff line change
@@ -1 +1 @@
{"glyph_id":168,"ops":[{"PushClipGlyph":{"gid":176}},{"FillBrush":{"brush":{"Solid":{"palette_index":0,"alpha":1.0}}}},"PopClip",{"PushClipGlyph":{"gid":175}},{"FillBrush":{"brush":{"Solid":{"palette_index":1,"alpha":1.0}}}},"PopClip",{"PushClipGlyph":{"gid":174}},{"FillBrush":{"brush":{"Solid":{"palette_index":2,"alpha":1.0}}}},"PopClip",{"PushClipGlyph":{"gid":173}},{"FillBrush":{"brush":{"Solid":{"palette_index":3,"alpha":1.0}}}},"PopClip",{"PushClipGlyph":{"gid":172}},{"FillBrush":{"brush":{"Solid":{"palette_index":4,"alpha":1.0}}}},"PopClip",{"PushClipGlyph":{"gid":171}},{"FillBrush":{"brush":{"Solid":{"palette_index":5,"alpha":1.0}}}},"PopClip",{"PushClipGlyph":{"gid":170}},{"FillBrush":{"brush":{"Solid":{"palette_index":6,"alpha":1.0}}}},"PopClip",{"PushClipGlyph":{"gid":5}},{"FillBrush":{"brush":{"Solid":{"palette_index":10,"alpha":1.0}}}},"PopClip"]}
{"glyph_id":168,"ops":[{"FillGlyph":{"gid":176,"transform":{"xx":1.0,"yx":0.0,"xy":0.0,"yy":1.0,"dx":0.0,"dy":0.0},"brush":{"Solid":{"palette_index":0,"alpha":1.0}}}},{"FillGlyph":{"gid":175,"transform":{"xx":1.0,"yx":0.0,"xy":0.0,"yy":1.0,"dx":0.0,"dy":0.0},"brush":{"Solid":{"palette_index":1,"alpha":1.0}}}},{"FillGlyph":{"gid":174,"transform":{"xx":1.0,"yx":0.0,"xy":0.0,"yy":1.0,"dx":0.0,"dy":0.0},"brush":{"Solid":{"palette_index":2,"alpha":1.0}}}},{"FillGlyph":{"gid":173,"transform":{"xx":1.0,"yx":0.0,"xy":0.0,"yy":1.0,"dx":0.0,"dy":0.0},"brush":{"Solid":{"palette_index":3,"alpha":1.0}}}},{"FillGlyph":{"gid":172,"transform":{"xx":1.0,"yx":0.0,"xy":0.0,"yy":1.0,"dx":0.0,"dy":0.0},"brush":{"Solid":{"palette_index":4,"alpha":1.0}}}},{"FillGlyph":{"gid":171,"transform":{"xx":1.0,"yx":0.0,"xy":0.0,"yy":1.0,"dx":0.0,"dy":0.0},"brush":{"Solid":{"palette_index":5,"alpha":1.0}}}},{"FillGlyph":{"gid":170,"transform":{"xx":1.0,"yx":0.0,"xy":0.0,"yy":1.0,"dx":0.0,"dy":0.0},"brush":{"Solid":{"palette_index":6,"alpha":1.0}}}},{"FillGlyph":{"gid":5,"transform":{"xx":1.0,"yx":0.0,"xy":0.0,"yy":1.0,"dx":0.0,"dy":0.0},"brush":{"Solid":{"palette_index":10,"alpha":1.0}}}}]}
Loading

0 comments on commit c31397f

Please sign in to comment.