1// Copyright 2016 The Go Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style 3// license that can be found in the LICENSE file. 4 5package iconvg 6 7import ( 8 "image/color" 9 "math" 10 11 "golang.org/x/image/math/f32" 12) 13 14const magic = "\x89IVG" 15 16var magicBytes = []byte(magic) 17 18var ( 19 negativeInfinity = math.Float32frombits(0xff800000) 20 positiveInfinity = math.Float32frombits(0x7f800000) 21) 22 23func isNaNOrInfinity(f float32) bool { 24 return math.Float32bits(f)&0x7f800000 == 0x7f800000 25} 26 27const ( 28 midViewBox = 0 29 midSuggestedPalette = 1 30) 31 32var gradientShapeNames = [2]string{ 33 "linear", 34 "radial", 35} 36 37var gradientSpreadNames = [4]string{ 38 "none", 39 "pad", 40 "reflect", 41 "repeat", 42} 43 44// GradientSpread is how to spread a gradient past its nominal bounds (from 45// offset being 0.0 to offset being 1.0). 46type GradientSpread uint8 47 48const ( 49 GradientSpreadNone GradientSpread = 0 50 GradientSpreadPad GradientSpread = 1 51 GradientSpreadReflect GradientSpread = 2 52 GradientSpreadRepeat GradientSpread = 3 53) 54 55// GradientStop is a color/offset gradient stop. 56type GradientStop struct { 57 Offset float32 58 Color color.Color 59} 60 61// Rectangle is defined by its minimum and maximum coordinates. 62type Rectangle struct { 63 Min, Max f32.Vec2 64} 65 66// AspectRatio returns the Rectangle's aspect ratio. An IconVG graphic is 67// scalable; these dimensions do not necessarily map 1:1 to pixels. 68func (r *Rectangle) AspectRatio() (dx, dy float32) { 69 return r.Max[0] - r.Min[0], r.Max[1] - r.Min[1] 70} 71 72// Palette is an IconVG palette. 73type Palette [64]color.RGBA 74 75// Metadata is an IconVG's metadata. 76type Metadata struct { 77 ViewBox Rectangle 78 79 // Palette is a 64 color palette. When encoding, it is the suggested 80 // palette to place within the IconVG graphic. When decoding, it is either 81 // the optional palette passed to Decode, or if no optional palette was 82 // given, the suggested palette within the IconVG graphic. 83 Palette Palette 84} 85 86// DefaultViewBox is the default ViewBox. Its values should not be modified. 87var DefaultViewBox = Rectangle{ 88 Min: f32.Vec2{-32, -32}, 89 Max: f32.Vec2{+32, +32}, 90} 91 92// DefaultPalette is the default Palette. Its values should not be modified. 93var DefaultPalette = Palette{ 94 color.RGBA{0x00, 0x00, 0x00, 0xff}, 95 color.RGBA{0x00, 0x00, 0x00, 0xff}, 96 color.RGBA{0x00, 0x00, 0x00, 0xff}, 97 color.RGBA{0x00, 0x00, 0x00, 0xff}, 98 color.RGBA{0x00, 0x00, 0x00, 0xff}, 99 color.RGBA{0x00, 0x00, 0x00, 0xff}, 100 color.RGBA{0x00, 0x00, 0x00, 0xff}, 101 color.RGBA{0x00, 0x00, 0x00, 0xff}, 102 color.RGBA{0x00, 0x00, 0x00, 0xff}, 103 color.RGBA{0x00, 0x00, 0x00, 0xff}, 104 color.RGBA{0x00, 0x00, 0x00, 0xff}, 105 color.RGBA{0x00, 0x00, 0x00, 0xff}, 106 color.RGBA{0x00, 0x00, 0x00, 0xff}, 107 color.RGBA{0x00, 0x00, 0x00, 0xff}, 108 color.RGBA{0x00, 0x00, 0x00, 0xff}, 109 color.RGBA{0x00, 0x00, 0x00, 0xff}, 110 color.RGBA{0x00, 0x00, 0x00, 0xff}, 111 color.RGBA{0x00, 0x00, 0x00, 0xff}, 112 color.RGBA{0x00, 0x00, 0x00, 0xff}, 113 color.RGBA{0x00, 0x00, 0x00, 0xff}, 114 color.RGBA{0x00, 0x00, 0x00, 0xff}, 115 color.RGBA{0x00, 0x00, 0x00, 0xff}, 116 color.RGBA{0x00, 0x00, 0x00, 0xff}, 117 color.RGBA{0x00, 0x00, 0x00, 0xff}, 118 color.RGBA{0x00, 0x00, 0x00, 0xff}, 119 color.RGBA{0x00, 0x00, 0x00, 0xff}, 120 color.RGBA{0x00, 0x00, 0x00, 0xff}, 121 color.RGBA{0x00, 0x00, 0x00, 0xff}, 122 color.RGBA{0x00, 0x00, 0x00, 0xff}, 123 color.RGBA{0x00, 0x00, 0x00, 0xff}, 124 color.RGBA{0x00, 0x00, 0x00, 0xff}, 125 color.RGBA{0x00, 0x00, 0x00, 0xff}, 126 color.RGBA{0x00, 0x00, 0x00, 0xff}, 127 color.RGBA{0x00, 0x00, 0x00, 0xff}, 128 color.RGBA{0x00, 0x00, 0x00, 0xff}, 129 color.RGBA{0x00, 0x00, 0x00, 0xff}, 130 color.RGBA{0x00, 0x00, 0x00, 0xff}, 131 color.RGBA{0x00, 0x00, 0x00, 0xff}, 132 color.RGBA{0x00, 0x00, 0x00, 0xff}, 133 color.RGBA{0x00, 0x00, 0x00, 0xff}, 134 color.RGBA{0x00, 0x00, 0x00, 0xff}, 135 color.RGBA{0x00, 0x00, 0x00, 0xff}, 136 color.RGBA{0x00, 0x00, 0x00, 0xff}, 137 color.RGBA{0x00, 0x00, 0x00, 0xff}, 138 color.RGBA{0x00, 0x00, 0x00, 0xff}, 139 color.RGBA{0x00, 0x00, 0x00, 0xff}, 140 color.RGBA{0x00, 0x00, 0x00, 0xff}, 141 color.RGBA{0x00, 0x00, 0x00, 0xff}, 142 color.RGBA{0x00, 0x00, 0x00, 0xff}, 143 color.RGBA{0x00, 0x00, 0x00, 0xff}, 144 color.RGBA{0x00, 0x00, 0x00, 0xff}, 145 color.RGBA{0x00, 0x00, 0x00, 0xff}, 146 color.RGBA{0x00, 0x00, 0x00, 0xff}, 147 color.RGBA{0x00, 0x00, 0x00, 0xff}, 148 color.RGBA{0x00, 0x00, 0x00, 0xff}, 149 color.RGBA{0x00, 0x00, 0x00, 0xff}, 150 color.RGBA{0x00, 0x00, 0x00, 0xff}, 151 color.RGBA{0x00, 0x00, 0x00, 0xff}, 152 color.RGBA{0x00, 0x00, 0x00, 0xff}, 153 color.RGBA{0x00, 0x00, 0x00, 0xff}, 154 color.RGBA{0x00, 0x00, 0x00, 0xff}, 155 color.RGBA{0x00, 0x00, 0x00, 0xff}, 156 color.RGBA{0x00, 0x00, 0x00, 0xff}, 157 color.RGBA{0x00, 0x00, 0x00, 0xff}, 158} 159