123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163 |
- // 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 (
- // File Format Version 0.
- midViewBox = 0
- midSuggestedPalette = 1
- // File Format Version 1.
- ffv1MIDViewBox = 8
- ffv1MIDSuggestedPalette = 16
- )
- 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},
- }
|