// 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 ( negativeInfinity = math.Float32frombits(0xff800000) positiveInfinity = math.Float32frombits(0x7f800000) ) func isNaNOrInfinity(f float32) bool { return math.Float32bits(f)&0x7f800000 == 0x7f800000 } const ( midViewBox = 0 midSuggestedPalette = 1 ) var gradientShapeNames = [2]string{ "linear", "radial", } var gradientSpreadNames = [4]string{ "none", "pad", "reflect", "repeat", } // GradientSpread is how to spread a gradient past its nominal bounds (from // offset being 0.0 to offset being 1.0). type GradientSpread uint8 const ( GradientSpreadNone GradientSpread = 0 GradientSpreadPad GradientSpread = 1 GradientSpreadReflect GradientSpread = 2 GradientSpreadRepeat GradientSpread = 3 ) // GradientStop is a color/offset gradient stop. type GradientStop struct { Offset float32 Color color.Color } // 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}, }