shiny/iconvg: make HighResolutionCoordinates optional.
On the full Material Design icon set, the 950 or so icons take up around
40% more bytes (172K vs 123K) at high resolution.
Change-Id: I6bd59c3aa75f7fc251c4283a0b244c656f1f9b86
Reviewed-on: https://go-review.googlesource.com/31111
Reviewed-by: David Crawshaw <crawshaw@golang.org>
diff --git a/shiny/iconvg/decode_test.go b/shiny/iconvg/decode_test.go
index 2fd604b..71ee314 100644
--- a/shiny/iconvg/decode_test.go
+++ b/shiny/iconvg/decode_test.go
@@ -130,7 +130,8 @@
filename string
variants string
}{
- {"testdata/action-info", ""},
+ {"testdata/action-info.lores", ""},
+ {"testdata/action-info.hires", ""},
{"testdata/blank", ""},
{"testdata/lod-polygon", ";64"},
{"testdata/video-005.primitive", ""},
diff --git a/shiny/iconvg/encode.go b/shiny/iconvg/encode.go
index bddec5e..9b1bb88 100644
--- a/shiny/iconvg/encode.go
+++ b/shiny/iconvg/encode.go
@@ -6,6 +6,7 @@
import (
"errors"
+ "math"
)
var (
@@ -29,6 +30,27 @@
// Metadata for the subsequent encoded form. If Reset is not called before
// other Encoder methods, the default metadata is implied.
type Encoder struct {
+ // HighResolutionCoordinates is whether the encoder should encode
+ // coordinate numbers for subsequent paths at the best possible resolution
+ // afforded by the underlying graphic format.
+ //
+ // By default (false), the encoder quantizes coordinates to 1/64th of a
+ // unit if possible (the default graphic size is 64 by 64 units, so
+ // 1/4096th of the default width or height). Each such coordinate can
+ // therefore be encoded in either 1 or 2 bytes. If true, some coordinates
+ // will be encoded in 4 bytes, giving greater accuracy but larger file
+ // sizes. On the Material Design icon set, the 950 or so icons take up
+ // around 40% more bytes (172K vs 123K) at high resolution.
+ //
+ // See the package documentation for more details on the coordinate number
+ // encoding format.
+ HighResolutionCoordinates bool
+
+ // highResolutionCoordinates is a local copy, copied during StartPath, to
+ // avoid having to specify the semantics of modifying the exported field
+ // while drawing.
+ highResolutionCoordinates bool
+
buf buffer
altBuf buffer
metadata Metadata
@@ -58,6 +80,8 @@
}
// Reset resets the Encoder for the given Metadata.
+//
+// This includes setting e.HighResolutionCoordinates to false.
func (e *Encoder) Reset(m Metadata) {
*e = Encoder{
buf: append(e.buf[:0], magic...),
@@ -259,6 +283,7 @@
e.err = errInvalidSelectorAdjustment
return
}
+ e.highResolutionCoordinates = e.HighResolutionCoordinates
e.buf = append(e.buf, uint8(0xc0+adj))
e.buf.encodeCoordinate(x)
e.buf.encodeCoordinate(y)
@@ -357,17 +382,17 @@
switch e.drawOp {
default:
for j := m * int(op.nArgs); j > 0; j-- {
- e.buf.encodeCoordinate(e.drawArgs[i])
+ e.buf.encodeCoordinate(e.quantize(e.drawArgs[i]))
i++
}
case 'A', 'a':
for j := m; j > 0; j-- {
- e.buf.encodeCoordinate(e.drawArgs[i+0])
- e.buf.encodeCoordinate(e.drawArgs[i+1])
+ e.buf.encodeCoordinate(e.quantize(e.drawArgs[i+0]))
+ e.buf.encodeCoordinate(e.quantize(e.drawArgs[i+1]))
e.buf.encodeZeroToOne(e.drawArgs[i+2])
e.buf.encodeNatural(uint32(e.drawArgs[i+3]))
- e.buf.encodeCoordinate(e.drawArgs[i+4])
- e.buf.encodeCoordinate(e.drawArgs[i+5])
+ e.buf.encodeCoordinate(e.quantize(e.drawArgs[i+4]))
+ e.buf.encodeCoordinate(e.quantize(e.drawArgs[i+5]))
i += 6
}
}
@@ -380,6 +405,14 @@
e.drawArgs = e.drawArgs[:0]
}
+func (e *Encoder) quantize(coord float32) float32 {
+ if !e.highResolutionCoordinates && (-128 <= coord && coord < 128) {
+ x := math.Floor(float64(coord*64 + 0.5))
+ return float32(x) / 64
+ }
+ return coord
+}
+
var drawOps = [256]struct {
opcodeBase byte
maxRepCount uint8
diff --git a/shiny/iconvg/encode_test.go b/shiny/iconvg/encode_test.go
index 00e0e31..7d28cdd 100644
--- a/shiny/iconvg/encode_test.go
+++ b/shiny/iconvg/encode_test.go
@@ -54,33 +54,36 @@
}
func TestEncodeActionInfo(t *testing.T) {
- var e Encoder
- e.Reset(Metadata{
- ViewBox: Rectangle{
- Min: f32.Vec2{-24, -24},
- Max: f32.Vec2{+24, +24},
- },
- Palette: DefaultPalette,
- })
+ for _, res := range []string{"lores", "hires"} {
+ var e Encoder
+ e.Reset(Metadata{
+ ViewBox: Rectangle{
+ Min: f32.Vec2{-24, -24},
+ Max: f32.Vec2{+24, +24},
+ },
+ Palette: DefaultPalette,
+ })
+ e.HighResolutionCoordinates = res == "hires"
- e.StartPath(0, 0, -20)
- e.AbsCubeTo(-11.05, -20, -20, -11.05, -20, 0)
- e.RelSmoothCubeTo(8.95, 20, 20, 20)
- e.RelSmoothCubeTo(20, -8.95, 20, -20)
- e.AbsSmoothCubeTo(11.05, -20, 0, -20)
- e.ClosePathRelMoveTo(2, 30)
- e.RelHLineTo(-4)
- e.AbsVLineTo(-2)
- e.RelHLineTo(4)
- e.RelVLineTo(12)
- e.ClosePathRelMoveTo(0, -16)
- e.RelHLineTo(-4)
- e.RelVLineTo(-4)
- e.RelHLineTo(4)
- e.RelVLineTo(4)
- e.ClosePathEndPath()
+ e.StartPath(0, 0, -20)
+ e.AbsCubeTo(-11.05, -20, -20, -11.05, -20, 0)
+ e.RelSmoothCubeTo(8.95, 20, 20, 20)
+ e.RelSmoothCubeTo(20, -8.95, 20, -20)
+ e.AbsSmoothCubeTo(11.05, -20, 0, -20)
+ e.ClosePathRelMoveTo(2, 30)
+ e.RelHLineTo(-4)
+ e.AbsVLineTo(-2)
+ e.RelHLineTo(4)
+ e.RelVLineTo(12)
+ e.ClosePathRelMoveTo(0, -16)
+ e.RelHLineTo(-4)
+ e.RelVLineTo(-4)
+ e.RelHLineTo(4)
+ e.RelVLineTo(4)
+ e.ClosePathEndPath()
- testEncode(t, &e, "testdata/action-info.ivg")
+ testEncode(t, &e, "testdata/action-info."+res+".ivg")
+ }
}
var video005PrimitiveSVGData = []struct {
diff --git a/shiny/iconvg/example_test.go b/shiny/iconvg/example_test.go
index 06346c8..879a1d0 100644
--- a/shiny/iconvg/example_test.go
+++ b/shiny/iconvg/example_test.go
@@ -16,7 +16,7 @@
)
func Example() {
- ivgData, err := ioutil.ReadFile(filepath.FromSlash("testdata/action-info.ivg"))
+ ivgData, err := ioutil.ReadFile(filepath.FromSlash("testdata/action-info.lores.ivg"))
if err != nil {
log.Fatal(err)
}
diff --git a/shiny/iconvg/testdata/README b/shiny/iconvg/testdata/README
index 663f256..67eb33c 100644
--- a/shiny/iconvg/testdata/README
+++ b/shiny/iconvg/testdata/README
@@ -2,11 +2,16 @@
action/svg/production/ic_info_48px.svg in the
github.com/google/material-design-icons repository.
-action-info.ivg is an IconVG version of action-info.svg.
+action-info.{lo,hi}res.ivg are low- and high-resolution IconVG versions of
+action-info.svg. Low resolution means that coordinates are quantized to 1/64th
+of a unit; the graphic's size is 48 by 48 units. High resolution means that
+coordinates are represented by all but the 2 least significant bits of a
+float32. Each low resolution coordinate is encoded in either 1 or 2 bytes. Each
+high resolution coordinate is encoded in either 1, 2 or 4 bytes.
-action-info.ivg.disassembly is a disassembly of that IconVG file.
+action-info.{lo,hi}res.ivg.disassembly are disassemblies of those IconVG files.
-action-info.png is a rendering of that IconVG file.
+action-info.{lo,hi}res.png are renderings of those IconVG files.
diff --git a/shiny/iconvg/testdata/action-info.ivg b/shiny/iconvg/testdata/action-info.hires.ivg
similarity index 100%
rename from shiny/iconvg/testdata/action-info.ivg
rename to shiny/iconvg/testdata/action-info.hires.ivg
Binary files differ
diff --git a/shiny/iconvg/testdata/action-info.ivg.disassembly b/shiny/iconvg/testdata/action-info.hires.ivg.disassembly
similarity index 100%
rename from shiny/iconvg/testdata/action-info.ivg.disassembly
rename to shiny/iconvg/testdata/action-info.hires.ivg.disassembly
diff --git a/shiny/iconvg/testdata/action-info.png b/shiny/iconvg/testdata/action-info.hires.png
similarity index 100%
rename from shiny/iconvg/testdata/action-info.png
rename to shiny/iconvg/testdata/action-info.hires.png
Binary files differ
diff --git a/shiny/iconvg/testdata/action-info.lores.ivg b/shiny/iconvg/testdata/action-info.lores.ivg
new file mode 100644
index 0000000..73589fe
--- /dev/null
+++ b/shiny/iconvg/testdata/action-info.lores.ivg
Binary files differ
diff --git a/shiny/iconvg/testdata/action-info.lores.ivg.disassembly b/shiny/iconvg/testdata/action-info.lores.ivg.disassembly
new file mode 100644
index 0000000..0624e7c
--- /dev/null
+++ b/shiny/iconvg/testdata/action-info.lores.ivg.disassembly
@@ -0,0 +1,56 @@
+89 49 56 47 IconVG Magic identifier
+02 Number of metadata chunks: 1
+0a Metadata chunk length: 5
+00 Metadata Identifier: 0 (viewBox)
+50 -24
+50 -24
+b0 +24
+b0 +24
+c0 Start path, filled with CREG[CSEL-0]; M (absolute moveTo)
+80 +0
+58 -20
+a0 C (absolute cubeTo), 1 reps
+f5 74 -11.046875
+58 -20
+58 -20
+f5 74 -11.046875
+58 -20
+80 +0
+91 s (relative smooth cubeTo), 2 reps
+f5 88 +8.953125
+a8 +20
+a8 +20
+a8 +20
+ s (relative smooth cubeTo), implicit
+a8 +20
+0d 77 -8.953125
+a8 +20
+58 -20
+80 S (absolute smooth cubeTo), 1 reps
+0d 8b +11.046875
+58 -20
+80 +0
+58 -20
+e3 z (closePath); m (relative moveTo)
+84 +2
+bc +30
+e7 h (relative horizontal lineTo)
+78 -4
+e8 V (absolute vertical lineTo)
+7c -2
+e7 h (relative horizontal lineTo)
+88 +4
+e9 v (relative vertical lineTo)
+98 +12
+e3 z (closePath); m (relative moveTo)
+80 +0
+60 -16
+e7 h (relative horizontal lineTo)
+78 -4
+e9 v (relative vertical lineTo)
+78 -4
+e7 h (relative horizontal lineTo)
+88 +4
+e9 v (relative vertical lineTo)
+88 +4
+e1 z (closePath); end path
diff --git a/shiny/iconvg/testdata/action-info.lores.png b/shiny/iconvg/testdata/action-info.lores.png
new file mode 100644
index 0000000..33911f2
--- /dev/null
+++ b/shiny/iconvg/testdata/action-info.lores.png
Binary files differ
diff --git a/shiny/iconvg/testdata/lod-polygon.64.png b/shiny/iconvg/testdata/lod-polygon.64.png
index 0a13565..02812f5 100644
--- a/shiny/iconvg/testdata/lod-polygon.64.png
+++ b/shiny/iconvg/testdata/lod-polygon.64.png
Binary files differ
diff --git a/shiny/iconvg/testdata/lod-polygon.ivg b/shiny/iconvg/testdata/lod-polygon.ivg
index 86a1c1c..a128b5d 100644
--- a/shiny/iconvg/testdata/lod-polygon.ivg
+++ b/shiny/iconvg/testdata/lod-polygon.ivg
Binary files differ
diff --git a/shiny/iconvg/testdata/lod-polygon.ivg.disassembly b/shiny/iconvg/testdata/lod-polygon.ivg.disassembly
index 32267b3..a61bb71 100644
--- a/shiny/iconvg/testdata/lod-polygon.ivg.disassembly
+++ b/shiny/iconvg/testdata/lod-polygon.ivg.disassembly
@@ -16,10 +16,10 @@
80 +0
01 L (absolute lineTo), 2 reps
64 -14
-5f fd c1 41 +24.24871
+41 98 +24.25
L (absolute lineTo), implicit
64 -14
-5f fd c1 c1 -24.24871
+c1 67 -24.25
e1 z (closePath); end path
c7 Set LOD
a0 +80
@@ -28,17 +28,17 @@
b8 +28
80 +0
03 L (absolute lineTo), 4 reps
-8f 70 0a 41 +8.652477
-67 09 d5 41 +26.629585
+a9 88 +8.65625
+a1 9a +26.625
L (absolute lineTo), implicit
-47 38 b5 c1 -22.652473
-f7 a9 83 41 +16.457985
+59 69 -22.65625
+75 90 +16.453125
L (absolute lineTo), implicit
-47 38 b5 c1 -22.652473
-f7 a9 83 c1 -16.457985
+59 69 -22.65625
+8d 6f -16.453125
L (absolute lineTo), implicit
-8f 70 0a 41 +8.652477
-67 09 d5 c1 -26.629585
+a9 88 +8.65625
+61 65 -26.625
e1 z (closePath); end path
c7 Set LOD
00 +0
diff --git a/shiny/iconvg/testdata/lod-polygon.png b/shiny/iconvg/testdata/lod-polygon.png
index 30af4e7..530a41c 100644
--- a/shiny/iconvg/testdata/lod-polygon.png
+++ b/shiny/iconvg/testdata/lod-polygon.png
Binary files differ
diff --git a/shiny/materialdesign/icons/data.go b/shiny/materialdesign/icons/data.go
index 5e64630..20c88d3 100644
--- a/shiny/materialdesign/icons/data.go
+++ b/shiny/materialdesign/icons/data.go
@@ -4,84 +4,71 @@
var ToggleCheckBox = []byte{
0x89, 0x49, 0x56, 0x47, 0x02, 0x0a, 0x00, 0x50, 0x50, 0xb0, 0xb0, 0xc0, 0x9c, 0x5c, 0xe6, 0x64,
- 0xb0, 0xa7, 0x70, 0x0d, 0xc0, 0x80, 0x78, 0xbb, 0x1e, 0xe5, 0x3f, 0x78, 0x88, 0xe9, 0xb8, 0xb0,
- 0x80, 0xa7, 0x70, 0x0d, 0x40, 0xbb, 0x1e, 0xe5, 0x3f, 0x88, 0x88, 0x88, 0xe7, 0xb8, 0xb0, 0xa7,
- 0x70, 0x0d, 0x40, 0x80, 0x88, 0xbb, 0x1e, 0xe5, 0xbf, 0x88, 0x78, 0xe8, 0x64, 0xb0, 0x80, 0xa7,
- 0x70, 0x0d, 0xc0, 0xbb, 0x1e, 0xe5, 0xbf, 0x78, 0x78, 0x78, 0xe2, 0x78, 0x94, 0x00, 0x64, 0x80,
- 0x20, 0xbb, 0x1e, 0x35, 0x40, 0xbb, 0x1e, 0x35, 0xc0, 0x00, 0x78, 0x4b, 0xe1, 0x8a, 0x40, 0x20,
- 0x57, 0xb8, 0x72, 0x41, 0x57, 0xb8, 0x72, 0xc1, 0x01, 0x9c, 0x70, 0x78, 0x94, 0xe1,
+ 0xb0, 0xcd, 0x7d, 0x80, 0x78, 0xcd, 0x81, 0x78, 0x88, 0xe9, 0xb8, 0xb0, 0x80, 0x35, 0x82, 0xcd,
+ 0x81, 0x88, 0x88, 0x88, 0xe7, 0xb8, 0xb0, 0x35, 0x82, 0x80, 0x88, 0x35, 0x7e, 0x88, 0x78, 0xe8,
+ 0x64, 0xb0, 0x80, 0xcd, 0x7d, 0x35, 0x7e, 0x78, 0x78, 0x78, 0xe2, 0x78, 0x94, 0x00, 0x64, 0x80,
+ 0x20, 0xd5, 0x82, 0x2d, 0x7d, 0x00, 0x78, 0x59, 0x84, 0x20, 0x2d, 0x8f, 0xd5, 0x70, 0x01, 0x9c,
+ 0x70, 0x78, 0x94, 0xe1,
}
var ToggleCheckBoxOutlineBlank = []byte{
0x89, 0x49, 0x56, 0x47, 0x02, 0x0a, 0x00, 0x50, 0x50, 0xb0, 0xb0, 0xc0, 0x9c, 0x64, 0xe9, 0xb8,
- 0xe6, 0x64, 0xe8, 0x64, 0xe7, 0xb8, 0xe3, 0x80, 0x78, 0xe6, 0x64, 0xb0, 0xa7, 0x70, 0x0d, 0xc0,
- 0x80, 0x78, 0xbb, 0x1e, 0xe5, 0x3f, 0x78, 0x88, 0xe9, 0xb8, 0xb0, 0x80, 0xa7, 0x70, 0x0d, 0x40,
- 0xbb, 0x1e, 0xe5, 0x3f, 0x88, 0x88, 0x88, 0xe7, 0xb8, 0xb0, 0xa7, 0x70, 0x0d, 0x40, 0x80, 0x88,
- 0xbb, 0x1e, 0xe5, 0xbf, 0x88, 0x78, 0xe8, 0x64, 0xb0, 0x80, 0xa7, 0x70, 0x0d, 0xc0, 0xbb, 0x1e,
- 0xe5, 0xbf, 0x78, 0x78, 0x78, 0xe1,
+ 0xe6, 0x64, 0xe8, 0x64, 0xe7, 0xb8, 0xe3, 0x80, 0x78, 0xe6, 0x64, 0xb0, 0xcd, 0x7d, 0x80, 0x78,
+ 0xcd, 0x81, 0x78, 0x88, 0xe9, 0xb8, 0xb0, 0x80, 0x35, 0x82, 0xcd, 0x81, 0x88, 0x88, 0x88, 0xe7,
+ 0xb8, 0xb0, 0x35, 0x82, 0x80, 0x88, 0x35, 0x7e, 0x88, 0x78, 0xe8, 0x64, 0xb0, 0x80, 0xcd, 0x7d,
+ 0x35, 0x7e, 0x78, 0x78, 0x78, 0xe1,
}
var ToggleIndeterminateCheckBox = []byte{
0x89, 0x49, 0x56, 0x47, 0x02, 0x0a, 0x00, 0x50, 0x50, 0xb0, 0xb0, 0xc0, 0x9c, 0x5c, 0xe6, 0x64,
- 0xb0, 0xcf, 0xcc, 0x0c, 0xc0, 0x80, 0x78, 0x6b, 0x66, 0xe6, 0x3f, 0x78, 0x88, 0xe9, 0xb8, 0xb0,
- 0x80, 0xcf, 0xcc, 0x0c, 0x40, 0x6b, 0x66, 0xe6, 0x3f, 0x88, 0x88, 0x88, 0xe7, 0xb8, 0xb0, 0xcf,
- 0xcc, 0x0c, 0x40, 0x80, 0x88, 0x6b, 0x66, 0xe6, 0xbf, 0x88, 0x78, 0xe8, 0x64, 0xb0, 0x80, 0xcf,
- 0xcc, 0x0c, 0xc0, 0x6b, 0x66, 0xe6, 0xbf, 0x78, 0x78, 0x78, 0xe3, 0x78, 0xa8, 0xe6, 0x6c, 0xe9,
+ 0xb0, 0xcd, 0x7d, 0x80, 0x78, 0xcd, 0x81, 0x78, 0x88, 0xe9, 0xb8, 0xb0, 0x80, 0x35, 0x82, 0xcd,
+ 0x81, 0x88, 0x88, 0x88, 0xe7, 0xb8, 0xb0, 0x35, 0x82, 0x80, 0x88, 0x35, 0x7e, 0x88, 0x78, 0xe8,
+ 0x64, 0xb0, 0x80, 0xcd, 0x7d, 0x35, 0x7e, 0x78, 0x78, 0x78, 0xe3, 0x78, 0xa8, 0xe6, 0x6c, 0xe9,
0x78, 0xe7, 0xa8, 0xe9, 0x88, 0xe1,
}
var ToggleRadioButtonChecked = []byte{
- 0x89, 0x49, 0x56, 0x47, 0x02, 0x0a, 0x00, 0x50, 0x50, 0xb0, 0xb0, 0xc0, 0x80, 0x6c, 0xb0, 0xdb,
- 0xa3, 0xb0, 0xc0, 0x80, 0x6c, 0x2b, 0x5c, 0x8f, 0x40, 0x6c, 0x94, 0x92, 0x2b, 0x5c, 0x8f, 0x40,
- 0x94, 0x94, 0x94, 0x94, 0x2b, 0x5c, 0x8f, 0xc0, 0x94, 0x6c, 0x2b, 0x5c, 0x8f, 0xc0, 0x6c, 0x6c,
- 0x6c, 0xe3, 0x80, 0x6c, 0xa0, 0xcf, 0xcc, 0x30, 0xc1, 0x58, 0x58, 0xcf, 0xcc, 0x30, 0xc1, 0x58,
- 0x80, 0x91, 0x37, 0x33, 0x0f, 0x41, 0xa8, 0xa8, 0xa8, 0xa8, 0x37, 0x33, 0x0f, 0xc1, 0xa8, 0x58,
- 0x80, 0xcf, 0xcc, 0x30, 0x41, 0x58, 0x80, 0x58, 0xe3, 0x80, 0xc8, 0xb0, 0xa7, 0x70, 0x0d, 0xc1,
- 0x80, 0x60, 0xbb, 0x1e, 0xe5, 0xc0, 0x60, 0x60, 0x80, 0xa7, 0x70, 0x0d, 0xc1, 0x60, 0x80, 0x60,
- 0x91, 0xa0, 0xbb, 0x1e, 0xe5, 0x40, 0xa0, 0xa0, 0xbb, 0x1e, 0xe5, 0xc0, 0xa0, 0x60, 0xa0, 0xe1,
+ 0x89, 0x49, 0x56, 0x47, 0x02, 0x0a, 0x00, 0x50, 0x50, 0xb0, 0xb0, 0xc0, 0x80, 0x6c, 0xb0, 0x7d,
+ 0x7a, 0x80, 0x6c, 0x7d, 0x84, 0x6c, 0x94, 0x92, 0x7d, 0x84, 0x94, 0x94, 0x94, 0x94, 0x85, 0x7b,
+ 0x94, 0x6c, 0x85, 0x7b, 0x6c, 0x6c, 0x6c, 0xe3, 0x80, 0x6c, 0xa0, 0xf5, 0x74, 0x58, 0x58, 0xf5,
+ 0x74, 0x58, 0x80, 0x91, 0xf5, 0x88, 0xa8, 0xa8, 0xa8, 0xa8, 0x0d, 0x77, 0xa8, 0x58, 0x80, 0x0d,
+ 0x8b, 0x58, 0x80, 0x58, 0xe3, 0x80, 0xc8, 0xb0, 0x29, 0x77, 0x80, 0x60, 0xd9, 0x78, 0x60, 0x60,
+ 0x80, 0x29, 0x77, 0x60, 0x80, 0x60, 0x91, 0xa0, 0x29, 0x87, 0xa0, 0xa0, 0xd9, 0x78, 0xa0, 0x60,
+ 0xa0, 0xe1,
}
var ToggleRadioButtonUnchecked = []byte{
- 0x89, 0x49, 0x56, 0x47, 0x02, 0x0a, 0x00, 0x50, 0x50, 0xb0, 0xb0, 0xc0, 0x80, 0x58, 0xa0, 0xcf,
- 0xcc, 0x30, 0xc1, 0x58, 0x58, 0xcf, 0xcc, 0x30, 0xc1, 0x58, 0x80, 0x91, 0x37, 0x33, 0x0f, 0x41,
- 0xa8, 0xa8, 0xa8, 0xa8, 0x37, 0x33, 0x0f, 0xc1, 0xa8, 0x58, 0x80, 0xcf, 0xcc, 0x30, 0x41, 0x58,
- 0x80, 0x58, 0xe3, 0x80, 0xc8, 0xb0, 0xa7, 0x70, 0x0d, 0xc1, 0x80, 0x60, 0xbb, 0x1e, 0xe5, 0xc0,
- 0x60, 0x60, 0x80, 0xa7, 0x70, 0x0d, 0xc1, 0x60, 0x80, 0x60, 0x91, 0xa0, 0xbb, 0x1e, 0xe5, 0x40,
- 0xa0, 0xa0, 0xbb, 0x1e, 0xe5, 0xc0, 0xa0, 0x60, 0xa0, 0xe1,
+ 0x89, 0x49, 0x56, 0x47, 0x02, 0x0a, 0x00, 0x50, 0x50, 0xb0, 0xb0, 0xc0, 0x80, 0x58, 0xa0, 0xf5,
+ 0x74, 0x58, 0x58, 0xf5, 0x74, 0x58, 0x80, 0x91, 0xf5, 0x88, 0xa8, 0xa8, 0xa8, 0xa8, 0x0d, 0x77,
+ 0xa8, 0x58, 0x80, 0x0d, 0x8b, 0x58, 0x80, 0x58, 0xe3, 0x80, 0xc8, 0xb0, 0x29, 0x77, 0x80, 0x60,
+ 0xd9, 0x78, 0x60, 0x60, 0x80, 0x29, 0x77, 0x60, 0x80, 0x60, 0x91, 0xa0, 0x29, 0x87, 0xa0, 0xa0,
+ 0xd9, 0x78, 0xa0, 0x60, 0xa0, 0xe1,
}
var ToggleStar = []byte{
0x89, 0x49, 0x56, 0x47, 0x02, 0x0a, 0x00, 0x50, 0x50, 0xb0, 0xb0, 0xc0, 0x80, 0xdb, 0xa3, 0x28,
- 0x41, 0x00, 0x93, 0xc2, 0x45, 0x41, 0xa4, 0x20, 0x87, 0xeb, 0x51, 0xc0, 0xc7, 0xf5, 0x60, 0xc1,
- 0x00, 0xa8, 0xdb, 0xa3, 0xb0, 0xc0, 0x20, 0x7f, 0x14, 0x66, 0xc1, 0xfb, 0x28, 0x9c, 0xbf, 0x02,
- 0x80, 0x58, 0x0f, 0xd7, 0xb3, 0xc0, 0x17, 0xae, 0xd7, 0xc0, 0x58, 0xdb, 0xa3, 0xb0, 0xc0, 0x20,
- 0x57, 0xb8, 0x2e, 0x41, 0x2b, 0x5c, 0x17, 0x41, 0x00, 0x93, 0xc2, 0x45, 0xc1, 0xa4, 0xe1,
+ 0x41, 0x00, 0x5d, 0x8c, 0xa4, 0x20, 0xb9, 0x7c, 0xf1, 0x71, 0x00, 0xa8, 0x7d, 0x7a, 0x20, 0xa1,
+ 0x71, 0xc9, 0x7e, 0x02, 0x80, 0x58, 0x61, 0x7a, 0x45, 0x79, 0x58, 0x7d, 0x7a, 0x20, 0xed, 0x8a,
+ 0x75, 0x89, 0x00, 0xa5, 0x73, 0xa4, 0xe1,
}
var ToggleStarBorder = []byte{
0x89, 0x49, 0x56, 0x47, 0x02, 0x0a, 0x00, 0x50, 0x50, 0xb0, 0xb0, 0xc0, 0xa8, 0xdb, 0xa3, 0xb0,
- 0xc0, 0x20, 0x7f, 0x14, 0x66, 0xc1, 0x57, 0xb8, 0x9e, 0xbf, 0x02, 0x80, 0x58, 0x0f, 0xd7, 0xb3,
- 0xc0, 0x17, 0xae, 0xd7, 0xc0, 0x58, 0xdb, 0xa3, 0xb0, 0xc0, 0x20, 0x57, 0xb8, 0x2e, 0x41, 0x2b,
- 0x5c, 0x17, 0x41, 0x02, 0x93, 0xc2, 0x45, 0xc1, 0xa4, 0x80, 0xdb, 0xa3, 0x28, 0x41, 0x93, 0xc2,
- 0x45, 0x41, 0xa4, 0x20, 0xdb, 0xa3, 0x50, 0xc0, 0xc7, 0xf5, 0x60, 0xc1, 0x00, 0xa8, 0xdb, 0xa3,
- 0xb0, 0xc0, 0xe2, 0x80, 0x9b, 0x99, 0xd9, 0x40, 0x23, 0xdb, 0xa3, 0xf0, 0xc0, 0xb3, 0x47, 0x91,
- 0x40, 0x84, 0xc7, 0xf5, 0x08, 0xc1, 0xe3, 0x7a, 0xd4, 0xc0, 0xef, 0x51, 0xb8, 0xc0, 0xfb, 0x28,
- 0x0c, 0x41, 0x5f, 0x8f, 0x42, 0xbf, 0x00, 0x80, 0xcf, 0xcc, 0x3c, 0xc1, 0x23, 0x4b, 0xe1, 0x5a,
- 0x40, 0xb3, 0x47, 0x01, 0x41, 0xfb, 0x28, 0x0c, 0x41, 0x5f, 0x8f, 0x42, 0x3f, 0xe3, 0x7a, 0xd4,
- 0xc0, 0xef, 0x51, 0xb8, 0x40, 0x84, 0xc7, 0xf5, 0x08, 0x41, 0x00, 0x80, 0x9b, 0x99, 0xd9, 0x40,
- 0xe1,
+ 0xc0, 0x20, 0xa1, 0x71, 0xc5, 0x7e, 0x02, 0x80, 0x58, 0x61, 0x7a, 0x45, 0x79, 0x58, 0x7d, 0x7a,
+ 0x20, 0xed, 0x8a, 0x75, 0x89, 0x02, 0xa5, 0x73, 0xa4, 0x80, 0x8d, 0x8a, 0x5d, 0x8c, 0xa4, 0x20,
+ 0xbd, 0x7c, 0xf1, 0x71, 0x00, 0xa8, 0x7d, 0x7a, 0xe2, 0x80, 0xcd, 0x86, 0x23, 0x7d, 0x78, 0x8d,
+ 0x84, 0x84, 0x71, 0x77, 0x5d, 0x79, 0x3d, 0x7a, 0xc5, 0x88, 0x3d, 0x7f, 0x00, 0x80, 0x35, 0x74,
+ 0x23, 0x6d, 0x83, 0x15, 0x88, 0xc5, 0x88, 0xc5, 0x80, 0x5d, 0x79, 0xc5, 0x85, 0x84, 0x91, 0x88,
+ 0x00, 0x80, 0xcd, 0x86, 0xe1,
}
var ToggleStarHalf = []byte{
0x89, 0x49, 0x56, 0x47, 0x02, 0x0a, 0x00, 0x50, 0x50, 0xb0, 0xb0, 0xc0, 0xa8, 0xdb, 0xa3, 0xb0,
- 0xc0, 0x20, 0x7f, 0x14, 0x66, 0xc1, 0x57, 0xb8, 0x9e, 0xbf, 0x00, 0x80, 0x58, 0x20, 0x0f, 0xd7,
- 0xb3, 0xc0, 0xfb, 0x28, 0x54, 0x41, 0x00, 0x58, 0xdb, 0xa3, 0xb0, 0xc0, 0x20, 0x57, 0xb8, 0x2e,
- 0x41, 0x2b, 0x5c, 0x17, 0x41, 0x04, 0x93, 0xc2, 0x45, 0xc1, 0xa4, 0x80, 0xdb, 0xa3, 0x28, 0x41,
- 0x93, 0xc2, 0x45, 0x41, 0xa4, 0x9b, 0x99, 0x11, 0x41, 0xfb, 0x28, 0x7c, 0x40, 0xa8, 0xdb, 0xa3,
- 0xb0, 0xc0, 0xe2, 0x80, 0x9b, 0x99, 0xd9, 0x40, 0xe8, 0xcf, 0xcc, 0x3c, 0xc1, 0x23, 0x4b, 0xe1,
- 0x5a, 0x40, 0xb3, 0x47, 0x01, 0x41, 0xfb, 0x28, 0x0c, 0x41, 0x5f, 0x8f, 0x42, 0x3f, 0xe3, 0x7a,
- 0xd4, 0xc0, 0xef, 0x51, 0xb8, 0x40, 0x84, 0xc7, 0xf5, 0x08, 0x41, 0x00, 0x80, 0x9b, 0x99, 0xd9,
- 0x40, 0xe1,
+ 0xc0, 0x20, 0xa1, 0x71, 0xc5, 0x7e, 0x00, 0x80, 0x58, 0x20, 0x61, 0x7a, 0x45, 0x8d, 0x00, 0x58,
+ 0x7d, 0x7a, 0x20, 0xed, 0x8a, 0x75, 0x89, 0x04, 0xa5, 0x73, 0xa4, 0x80, 0x8d, 0x8a, 0x5d, 0x8c,
+ 0xa4, 0x19, 0x89, 0xf1, 0x83, 0xa8, 0x7d, 0x7a, 0xe2, 0x80, 0xcd, 0x86, 0xe8, 0x35, 0x74, 0x23,
+ 0x6d, 0x83, 0x15, 0x88, 0xc5, 0x88, 0xc5, 0x80, 0x5d, 0x79, 0xc5, 0x85, 0x84, 0x91, 0x88, 0x00,
+ 0x80, 0xcd, 0x86, 0xe1,
}
-// In total, 1958 SVG bytes in 8 files (1957 PNG bytes at 24px * 24px, 2776 PNG bytes at 48px * 48px) converted to 870 IconVG bytes.
+// In total, 1958 SVG bytes in 8 files (1957 PNG bytes at 24px * 24px, 2776 PNG bytes at 48px * 48px) converted to 632 IconVG bytes.