| // Copyright 2016 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| package iconvg |
| |
| import ( |
| "image/color" |
| "math" |
| |
| "golang.org/x/image/math/f32" |
| ) |
| |
| const magic = "\x89IVG" |
| |
| var magicBytes = []byte(magic) |
| |
| var positiveInfinity = math.Float32frombits(0x7f800000) |
| |
| func isNaNOrInfinity(f float32) bool { |
| return math.Float32bits(f)&0x7f800000 == 0x7f800000 |
| } |
| |
| const ( |
| midViewBox = 0 |
| midSuggestedPalette = 1 |
| ) |
| |
| type mode bool |
| |
| const ( |
| modeStyling mode = false |
| modeDrawing mode = true |
| ) |
| |
| // Rectangle is defined by its minimum and maximum coordinates. |
| type Rectangle struct { |
| Min, Max f32.Vec2 |
| } |
| |
| // AspectRatio returns the Rectangle's aspect ratio. An IconVG graphic is |
| // scalable; these dimensions do not necessarily map 1:1 to pixels. |
| func (r *Rectangle) AspectRatio() (dx, dy float32) { |
| return r.Max[0] - r.Min[0], r.Max[1] - r.Min[1] |
| } |
| |
| // Palette is an IconVG palette. |
| type Palette [64]color.RGBA |
| |
| // Metadata is an IconVG's metadata. |
| type Metadata struct { |
| ViewBox Rectangle |
| |
| // Palette is a 64 color palette. When encoding, it is the suggested |
| // palette to place within the IconVG graphic. When decoding, it is either |
| // the optional palette passed to Decode, or if no optional palette was |
| // given, the suggested palette within the IconVG graphic. |
| Palette Palette |
| } |
| |
| // DefaultViewBox is the default ViewBox. Its values should not be modified. |
| var DefaultViewBox = Rectangle{ |
| Min: f32.Vec2{-32, -32}, |
| Max: f32.Vec2{+32, +32}, |
| } |
| |
| // DefaultPalette is the default Palette. Its values should not be modified. |
| var DefaultPalette = Palette{ |
| color.RGBA{0x00, 0x00, 0x00, 0xff}, |
| color.RGBA{0x00, 0x00, 0x00, 0xff}, |
| color.RGBA{0x00, 0x00, 0x00, 0xff}, |
| color.RGBA{0x00, 0x00, 0x00, 0xff}, |
| color.RGBA{0x00, 0x00, 0x00, 0xff}, |
| color.RGBA{0x00, 0x00, 0x00, 0xff}, |
| color.RGBA{0x00, 0x00, 0x00, 0xff}, |
| color.RGBA{0x00, 0x00, 0x00, 0xff}, |
| color.RGBA{0x00, 0x00, 0x00, 0xff}, |
| color.RGBA{0x00, 0x00, 0x00, 0xff}, |
| color.RGBA{0x00, 0x00, 0x00, 0xff}, |
| color.RGBA{0x00, 0x00, 0x00, 0xff}, |
| color.RGBA{0x00, 0x00, 0x00, 0xff}, |
| color.RGBA{0x00, 0x00, 0x00, 0xff}, |
| color.RGBA{0x00, 0x00, 0x00, 0xff}, |
| color.RGBA{0x00, 0x00, 0x00, 0xff}, |
| color.RGBA{0x00, 0x00, 0x00, 0xff}, |
| color.RGBA{0x00, 0x00, 0x00, 0xff}, |
| color.RGBA{0x00, 0x00, 0x00, 0xff}, |
| color.RGBA{0x00, 0x00, 0x00, 0xff}, |
| color.RGBA{0x00, 0x00, 0x00, 0xff}, |
| color.RGBA{0x00, 0x00, 0x00, 0xff}, |
| color.RGBA{0x00, 0x00, 0x00, 0xff}, |
| color.RGBA{0x00, 0x00, 0x00, 0xff}, |
| color.RGBA{0x00, 0x00, 0x00, 0xff}, |
| color.RGBA{0x00, 0x00, 0x00, 0xff}, |
| color.RGBA{0x00, 0x00, 0x00, 0xff}, |
| color.RGBA{0x00, 0x00, 0x00, 0xff}, |
| color.RGBA{0x00, 0x00, 0x00, 0xff}, |
| color.RGBA{0x00, 0x00, 0x00, 0xff}, |
| color.RGBA{0x00, 0x00, 0x00, 0xff}, |
| color.RGBA{0x00, 0x00, 0x00, 0xff}, |
| color.RGBA{0x00, 0x00, 0x00, 0xff}, |
| color.RGBA{0x00, 0x00, 0x00, 0xff}, |
| color.RGBA{0x00, 0x00, 0x00, 0xff}, |
| color.RGBA{0x00, 0x00, 0x00, 0xff}, |
| color.RGBA{0x00, 0x00, 0x00, 0xff}, |
| color.RGBA{0x00, 0x00, 0x00, 0xff}, |
| color.RGBA{0x00, 0x00, 0x00, 0xff}, |
| color.RGBA{0x00, 0x00, 0x00, 0xff}, |
| color.RGBA{0x00, 0x00, 0x00, 0xff}, |
| color.RGBA{0x00, 0x00, 0x00, 0xff}, |
| color.RGBA{0x00, 0x00, 0x00, 0xff}, |
| color.RGBA{0x00, 0x00, 0x00, 0xff}, |
| color.RGBA{0x00, 0x00, 0x00, 0xff}, |
| color.RGBA{0x00, 0x00, 0x00, 0xff}, |
| color.RGBA{0x00, 0x00, 0x00, 0xff}, |
| color.RGBA{0x00, 0x00, 0x00, 0xff}, |
| color.RGBA{0x00, 0x00, 0x00, 0xff}, |
| color.RGBA{0x00, 0x00, 0x00, 0xff}, |
| color.RGBA{0x00, 0x00, 0x00, 0xff}, |
| color.RGBA{0x00, 0x00, 0x00, 0xff}, |
| color.RGBA{0x00, 0x00, 0x00, 0xff}, |
| color.RGBA{0x00, 0x00, 0x00, 0xff}, |
| color.RGBA{0x00, 0x00, 0x00, 0xff}, |
| color.RGBA{0x00, 0x00, 0x00, 0xff}, |
| color.RGBA{0x00, 0x00, 0x00, 0xff}, |
| color.RGBA{0x00, 0x00, 0x00, 0xff}, |
| color.RGBA{0x00, 0x00, 0x00, 0xff}, |
| color.RGBA{0x00, 0x00, 0x00, 0xff}, |
| color.RGBA{0x00, 0x00, 0x00, 0xff}, |
| color.RGBA{0x00, 0x00, 0x00, 0xff}, |
| color.RGBA{0x00, 0x00, 0x00, 0xff}, |
| color.RGBA{0x00, 0x00, 0x00, 0xff}, |
| } |