Documentation ¶
Index ¶
- Constants
- Variables
- func Equal(a, b float64) bool
- type ArcsJoiner
- type BevelJoiner
- type ButtCapper
- type CSSColor
- type Canvas
- func (c *Canvas) Empty() bool
- func (c *Canvas) Fit(margin float64)
- func (c *Canvas) Render(r Renderer)
- func (c *Canvas) RenderImage(img image.Image, m Matrix)
- func (c *Canvas) RenderPath(path *Path, style Style, m Matrix)
- func (c *Canvas) RenderText(text *Text, m Matrix)
- func (c *Canvas) Reset()
- func (c *Canvas) SetZIndex(zindex int)
- func (c *Canvas) Size() (float64, float64)
- func (c *Canvas) WriteFile(filename string, w Writer) error
- type Capper
- type ColorSpace
- type Context
- func (c *Context) Arc(rx, ry, rot, theta0, theta1 float64)
- func (c *Context) ArcTo(rx, ry, rot float64, large, sweep bool, x, y float64)
- func (c *Context) Close()
- func (c *Context) ComposeView(view Matrix)
- func (c *Context) CoordView() Matrix
- func (c *Context) CubeTo(cpx1, cpy1, cpx2, cpy2, x, y float64)
- func (c *Context) DrawImage(x, y float64, img image.Image, resolution Resolution)
- func (c *Context) DrawPath(x, y float64, paths ...*Path)
- func (c *Context) DrawText(x, y float64, texts ...*Text)
- func (c *Context) Fill()
- func (c *Context) FillStroke()
- func (c *Context) Height() float64
- func (c *Context) LineTo(x, y float64)
- func (c *Context) MoveTo(x, y float64)
- func (c *Context) Pop()
- func (c *Context) Pos() (float64, float64)
- func (c *Context) Push()
- func (c *Context) QuadTo(cpx, cpy, x, y float64)
- func (c *Context) ReflectX()
- func (c *Context) ReflectXAbout(x float64)
- func (c *Context) ReflectY()
- func (c *Context) ReflectYAbout(y float64)
- func (c *Context) ResetStyle()
- func (c *Context) ResetView()
- func (c *Context) Rotate(rot float64)
- func (c *Context) RotateAbout(rot, x, y float64)
- func (c *Context) Scale(sx, sy float64)
- func (c *Context) ScaleAbout(sx, sy, x, y float64)
- func (c *Context) SetCoordRect(rect Rect, width, height float64)
- func (c *Context) SetCoordSystem(coordSystem CoordSystem)
- func (c *Context) SetCoordView(coordView Matrix)
- func (c *Context) SetDashes(offset float64, dashes ...float64)
- func (c *Context) SetFillColor(col color.Color)
- func (c *Context) SetFillRule(rule FillRule)
- func (c *Context) SetStrokeCapper(capper Capper)
- func (c *Context) SetStrokeColor(col color.Color)
- func (c *Context) SetStrokeJoiner(joiner Joiner)
- func (c *Context) SetStrokeWidth(width float64)
- func (c *Context) SetView(view Matrix)
- func (c *Context) SetZIndex(zindex int)
- func (c *Context) Shear(sx, sy float64)
- func (c *Context) ShearAbout(sx, sy, x, y float64)
- func (c *Context) Stroke()
- func (c *Context) Translate(x, y float64)
- func (c *Context) View() Matrix
- func (c *Context) Width() float64
- type ContextState
- type CoordSystem
- type FillRule
- type Font
- type FontDecorator
- type FontFace
- func (face *FontFace) Decorate(width float64) *Path
- func (face *FontFace) Equals(other *FontFace) bool
- func (face *FontFace) HasDecoration() bool
- func (face *FontFace) Metrics() FontMetrics
- func (face *FontFace) Name() string
- func (face *FontFace) PPEM(resolution Resolution) uint16
- func (face *FontFace) TextWidth(s string) float64
- func (face *FontFace) ToPath(s string) (*Path, float64, error)
- type FontFamily
- func (family *FontFamily) Destroy()
- func (family *FontFamily) Face(size float64, col color.Color, style FontStyle, variant FontVariant, ...) *FontFace
- func (family *FontFamily) FindLocalFont(name string, style FontStyle) string
- func (family *FontFamily) LoadFont(b []byte, index int, style FontStyle) error
- func (family *FontFamily) LoadFontCollection(filename string, index int, style FontStyle) error
- func (family *FontFamily) LoadFontFile(filename string, style FontStyle) error
- func (family *FontFamily) LoadLocalFont(name string, style FontStyle) error
- func (family *FontFamily) Name() string
- func (family *FontFamily) SetFeatures(features string)
- func (family *FontFamily) SetVariations(variations string)
- type FontMetrics
- type FontStyle
- type FontSubsetter
- type FontVariant
- type GammaColorSpace
- type Image
- type ImageEncoding
- type Joiner
- type LinearColorSpace
- type Matrix
- func (m Matrix) Decompose() (float64, float64, float64, float64, float64, float64)
- func (m Matrix) Det() float64
- func (m Matrix) Dot(p Point) Point
- func (m Matrix) Eigen() (float64, float64, Point, Point)
- func (m Matrix) Equals(q Matrix) bool
- func (m Matrix) Inv() Matrix
- func (m Matrix) IsRigid() bool
- func (m Matrix) IsSimilarity() bool
- func (m Matrix) IsTranslation() bool
- func (m Matrix) Mul(q Matrix) Matrix
- func (m Matrix) Pos() (float64, float64)
- func (m Matrix) ReflectX() Matrix
- func (m Matrix) ReflectXAbout(x float64) Matrix
- func (m Matrix) ReflectY() Matrix
- func (m Matrix) ReflectYAbout(y float64) Matrix
- func (m Matrix) Rotate(rot float64) Matrix
- func (m Matrix) RotateAbout(rot, x, y float64) Matrix
- func (m Matrix) Scale(sx, sy float64) Matrix
- func (m Matrix) ScaleAbout(sx, sy, x, y float64) Matrix
- func (m Matrix) Shear(sx, sy float64) Matrix
- func (m Matrix) ShearAbout(sx, sy, x, y float64) Matrix
- func (m Matrix) String() string
- func (m Matrix) T() Matrix
- func (m Matrix) ToSVG(h float64) string
- func (m Matrix) Translate(x, y float64) Matrix
- type MiterJoiner
- type Path
- func Arc(r, theta0, theta1 float64) *Path
- func BeveledRectangle(w, h, r float64) *Path
- func Circle(r float64) *Path
- func Ellipse(rx, ry float64) *Path
- func EllipticalArc(rx, ry, rot, theta0, theta1 float64) *Path
- func Grid(w, h float64, nx, ny int, r float64) *Path
- func Line(x, y float64) *Path
- func MustParseSVG(s string) *Path
- func ParseLaTeX(s string) (*Path, error)
- func ParseSVG(s string) (*Path, error)
- func Rectangle(w, h float64) *Path
- func RegularPolygon(n int, r float64, up bool) *Path
- func RegularStarPolygon(n, d int, r float64, up bool) *Path
- func RoundedRectangle(w, h, r float64) *Path
- func StarPolygon(n int, R, r float64, up bool) *Path
- func (p *Path) And(q *Path) *Path
- func (p *Path) Append(q *Path) *Path
- func (p *Path) Arc(rx, ry, rot, theta0, theta1 float64)
- func (p *Path) ArcTo(rx, ry, rot float64, large, sweep bool, x, y float64)
- func (p *Path) Bounds() Rect
- func (p *Path) CCW() bool
- func (p *Path) Close()
- func (p *Path) Closed() bool
- func (p *Path) Coords() []Point
- func (p *Path) Copy() *Path
- func (p *Path) CubeTo(cpx1, cpy1, cpx2, cpy2, x, y float64)
- func (p *Path) Cut(q *Path) []*Path
- func (p *Path) Dash(offset float64, d ...float64) *Path
- func (p *Path) Div(q *Path) []*Path
- func (p *Path) Empty() bool
- func (p *Path) Equals(q *Path) bool
- func (p *Path) Filling(fillRule FillRule) []bool
- func (p *Path) Flatten() *Path
- func (p *Path) Interior(x, y float64, fillRule FillRule) bool
- func (p *Path) Intersections(q *Path) intersections
- func (p *Path) Iterate(move func(Point, Point), line func(Point, Point), ...)
- func (p *Path) Join(q *Path) *Path
- func (p *Path) Length() float64
- func (p *Path) LineTo(x, y float64)
- func (p *Path) Markers(first, mid, last *Path, align bool) []*Path
- func (p *Path) MoveTo(x, y float64)
- func (p *Path) Not(q *Path) *Path
- func (p *Path) Offset(w float64, fillRule FillRule) *Path
- func (p *Path) Or(q *Path) *Path
- func (p *Path) Pos() Point
- func (p *Path) QuadTo(cpx, cpy, x, y float64)
- func (p *Path) ReplaceArcs() *Path
- func (p *Path) Reverse() *Path
- func (p *Path) Segments() []Segment
- func (p *Path) Split() []*Path
- func (p *Path) SplitAt(ts ...float64) []*Path
- func (p *Path) StartPos() Point
- func (p *Path) String() string
- func (p *Path) Stroke(w float64, cr Capper, jr Joiner) *Path
- func (p *Path) Tile(n, m int, tiler Tiler) *Path
- func (p *Path) ToPDF() string
- func (p *Path) ToPS() string
- func (p *Path) ToRasterizer(ras *vector.Rasterizer, resolution Resolution)
- func (p *Path) ToSVG() string
- func (p *Path) Transform(m Matrix) *Path
- func (p *Path) Translate(x, y float64) *Path
- func (p *Path) Triangulate() ([][3]Point, [][5]Point)
- func (p *Path) Xor(q *Path) *Path
- type Point
- func (p Point) Add(q Point) Point
- func (p Point) Angle() float64
- func (p Point) AngleBetween(q Point) float64
- func (p Point) Div(f float64) Point
- func (p Point) Dot(q Point) float64
- func (p Point) Equals(q Point) bool
- func (p Point) Interpolate(q Point, t float64) Point
- func (p Point) IsZero() bool
- func (p Point) Length() float64
- func (p Point) Mul(f float64) Point
- func (p Point) Neg() Point
- func (p Point) Norm(length float64) Point
- func (p Point) PerpDot(q Point) float64
- func (p Point) Rot(phi float64, p0 Point) Point
- func (p Point) Rot90CCW() Point
- func (p Point) Rot90CW() Point
- func (p Point) Slope() float64
- func (p Point) String() string
- func (p Point) Sub(q Point) Point
- type Polyline
- type Rect
- type Renderer
- type Resolution
- type RichText
- func (rt *RichText) Add(face *FontFace, text string) *RichText
- func (rt *RichText) Reset()
- func (rt *RichText) SetFace(face *FontFace)
- func (rt *RichText) SetFaceSpan(face *FontFace, start, end int)
- func (rt *RichText) SetTextOrientation(orient TextOrientation)
- func (rt *RichText) SetWritingMode(mode WritingMode)
- func (rt *RichText) ToText(width, height float64, halign, valign TextAlign, indent, lineStretch float64) *Text
- type RoundCapper
- type RoundJoiner
- type SRGBColorSpace
- type Segment
- type Size
- type SquareCapper
- type Style
- type Text
- func (t *Text) Bounds() Rect
- func (t *Text) Empty() bool
- func (t *Text) Fonts() []*Font
- func (t *Text) Heights() (float64, float64)
- func (t *Text) OutlineBounds() Rect
- func (t *Text) RenderAsPath(r Renderer, m Matrix, resolution Resolution)
- func (t *Text) WalkDecorations(callback func(col color.RGBA, deco *Path))
- func (t *Text) WalkSpans(callback func(x, y float64, span TextSpan))
- type TextAlign
- type TextOrientation
- type TextSpan
- type Tiler
- type Writer
- type WritingMode
Constants ¶
const ( MoveToCmd = 1.0 << iota // 1.0 LineToCmd // 2.0 QuadToCmd // 4.0 CubeToCmd // 8.0 ArcToCmd // 16.0 CloseCmd // 32.0 )
const DefaultResolution = Resolution(96.0 * inchPerMm)
DefaultResolution is the default resolution used for font PPEMs and is set to 96 DPI.
Variables ¶
var ( A0 = Size{841.0, 1189.0} A1 = Size{594.0, 841.0} A2 = Size{420.0, 594.0} A3 = Size{297.0, 420.0} A4 = Size{210.0, 297.0} A5 = Size{148.0, 210.0} A6 = Size{105.0, 148.0} A7 = Size{74.0, 105.0} A8 = Size{52.0, 74.0} B0 = Size{1000.0, 1414.0} B1 = Size{707.0, 1000.0} B2 = Size{500.0, 707.0} B3 = Size{353.0, 500.0} B4 = Size{250.0, 353.0} B5 = Size{176.0, 250.0} B6 = Size{125.0, 176.0} B7 = Size{88.0, 125.0} B8 = Size{62.0, 88.0} B9 = Size{44.0, 62.0} B10 = Size{31.0, 44.0} C2 = Size{648.0, 458.0} C3 = Size{458.0, 324.0} C4 = Size{324.0, 229.0} C5 = Size{229.0, 162.0} C6 = Size{162.0, 114.0} D0 = Size{1090.0, 771.0} SRA0 = Size{1280.0, 900.0} SRA1 = Size{900.0, 640.0} SRA2 = Size{640.0, 450.0} SRA3 = Size{450.0, 320.0} SRA4 = Size{320.0, 225.0} RA0 = Size{1220.0, 860.0} RA1 = Size{860.0, 610.0} RA2 = Size{610.0, 430.0} Letter = Size{215.9, 279.4} Legal = Size{215.9, 355.6} Ledger = Size{279.4, 431.8} Tabloid = Size{431.8, 279.4} Executive = Size{184.1, 266.7} )
var ( Aliceblue = color.RGBA{0xf0, 0xf8, 0xff, 0xff} // rgb(240, 248, 255) Antiquewhite = color.RGBA{0xfa, 0xeb, 0xd7, 0xff} // rgb(250, 235, 215) Aqua = color.RGBA{0x00, 0xff, 0xff, 0xff} // rgb(0, 255, 255) Aquamarine = color.RGBA{0x7f, 0xff, 0xd4, 0xff} // rgb(127, 255, 212) Azure = color.RGBA{0xf0, 0xff, 0xff, 0xff} // rgb(240, 255, 255) Beige = color.RGBA{0xf5, 0xf5, 0xdc, 0xff} // rgb(245, 245, 220) Bisque = color.RGBA{0xff, 0xe4, 0xc4, 0xff} // rgb(255, 228, 196) Black = color.RGBA{0x00, 0x00, 0x00, 0xff} // rgb(0, 0, 0) Blanchedalmond = color.RGBA{0xff, 0xeb, 0xcd, 0xff} // rgb(255, 235, 205) Blue = color.RGBA{0x00, 0x00, 0xff, 0xff} // rgb(0, 0, 255) Blueviolet = color.RGBA{0x8a, 0x2b, 0xe2, 0xff} // rgb(138, 43, 226) Brown = color.RGBA{0xa5, 0x2a, 0x2a, 0xff} // rgb(165, 42, 42) Burlywood = color.RGBA{0xde, 0xb8, 0x87, 0xff} // rgb(222, 184, 135) Cadetblue = color.RGBA{0x5f, 0x9e, 0xa0, 0xff} // rgb(95, 158, 160) Chartreuse = color.RGBA{0x7f, 0xff, 0x00, 0xff} // rgb(127, 255, 0) Chocolate = color.RGBA{0xd2, 0x69, 0x1e, 0xff} // rgb(210, 105, 30) Coral = color.RGBA{0xff, 0x7f, 0x50, 0xff} // rgb(255, 127, 80) Cornflowerblue = color.RGBA{0x64, 0x95, 0xed, 0xff} // rgb(100, 149, 237) Cornsilk = color.RGBA{0xff, 0xf8, 0xdc, 0xff} // rgb(255, 248, 220) Crimson = color.RGBA{0xdc, 0x14, 0x3c, 0xff} // rgb(220, 20, 60) Cyan = color.RGBA{0x00, 0xff, 0xff, 0xff} // rgb(0, 255, 255) Darkblue = color.RGBA{0x00, 0x00, 0x8b, 0xff} // rgb(0, 0, 139) Darkcyan = color.RGBA{0x00, 0x8b, 0x8b, 0xff} // rgb(0, 139, 139) Darkgoldenrod = color.RGBA{0xb8, 0x86, 0x0b, 0xff} // rgb(184, 134, 11) Darkgray = color.RGBA{0xa9, 0xa9, 0xa9, 0xff} // rgb(169, 169, 169) Darkgreen = color.RGBA{0x00, 0x64, 0x00, 0xff} // rgb(0, 100, 0) Darkgrey = color.RGBA{0xa9, 0xa9, 0xa9, 0xff} // rgb(169, 169, 169) Darkkhaki = color.RGBA{0xbd, 0xb7, 0x6b, 0xff} // rgb(189, 183, 107) Darkmagenta = color.RGBA{0x8b, 0x00, 0x8b, 0xff} // rgb(139, 0, 139) Darkolivegreen = color.RGBA{0x55, 0x6b, 0x2f, 0xff} // rgb(85, 107, 47) Darkorange = color.RGBA{0xff, 0x8c, 0x00, 0xff} // rgb(255, 140, 0) Darkorchid = color.RGBA{0x99, 0x32, 0xcc, 0xff} // rgb(153, 50, 204) Darkred = color.RGBA{0x8b, 0x00, 0x00, 0xff} // rgb(139, 0, 0) Darksalmon = color.RGBA{0xe9, 0x96, 0x7a, 0xff} // rgb(233, 150, 122) Darkseagreen = color.RGBA{0x8f, 0xbc, 0x8f, 0xff} // rgb(143, 188, 143) Darkslateblue = color.RGBA{0x48, 0x3d, 0x8b, 0xff} // rgb(72, 61, 139) Darkslategray = color.RGBA{0x2f, 0x4f, 0x4f, 0xff} // rgb(47, 79, 79) Darkslategrey = color.RGBA{0x2f, 0x4f, 0x4f, 0xff} // rgb(47, 79, 79) Darkturquoise = color.RGBA{0x00, 0xce, 0xd1, 0xff} // rgb(0, 206, 209) Darkviolet = color.RGBA{0x94, 0x00, 0xd3, 0xff} // rgb(148, 0, 211) Deeppink = color.RGBA{0xff, 0x14, 0x93, 0xff} // rgb(255, 20, 147) Deepskyblue = color.RGBA{0x00, 0xbf, 0xff, 0xff} // rgb(0, 191, 255) Dimgray = color.RGBA{0x69, 0x69, 0x69, 0xff} // rgb(105, 105, 105) Dimgrey = color.RGBA{0x69, 0x69, 0x69, 0xff} // rgb(105, 105, 105) Dodgerblue = color.RGBA{0x1e, 0x90, 0xff, 0xff} // rgb(30, 144, 255) Firebrick = color.RGBA{0xb2, 0x22, 0x22, 0xff} // rgb(178, 34, 34) Floralwhite = color.RGBA{0xff, 0xfa, 0xf0, 0xff} // rgb(255, 250, 240) Forestgreen = color.RGBA{0x22, 0x8b, 0x22, 0xff} // rgb(34, 139, 34) Fuchsia = color.RGBA{0xff, 0x00, 0xff, 0xff} // rgb(255, 0, 255) Gainsboro = color.RGBA{0xdc, 0xdc, 0xdc, 0xff} // rgb(220, 220, 220) Ghostwhite = color.RGBA{0xf8, 0xf8, 0xff, 0xff} // rgb(248, 248, 255) Gold = color.RGBA{0xff, 0xd7, 0x00, 0xff} // rgb(255, 215, 0) Goldenrod = color.RGBA{0xda, 0xa5, 0x20, 0xff} // rgb(218, 165, 32) Gray = color.RGBA{0x80, 0x80, 0x80, 0xff} // rgb(128, 128, 128) Green = color.RGBA{0x00, 0x80, 0x00, 0xff} // rgb(0, 128, 0) Greenyellow = color.RGBA{0xad, 0xff, 0x2f, 0xff} // rgb(173, 255, 47) Grey = color.RGBA{0x80, 0x80, 0x80, 0xff} // rgb(128, 128, 128) Honeydew = color.RGBA{0xf0, 0xff, 0xf0, 0xff} // rgb(240, 255, 240) Hotpink = color.RGBA{0xff, 0x69, 0xb4, 0xff} // rgb(255, 105, 180) Indianred = color.RGBA{0xcd, 0x5c, 0x5c, 0xff} // rgb(205, 92, 92) Indigo = color.RGBA{0x4b, 0x00, 0x82, 0xff} // rgb(75, 0, 130) Ivory = color.RGBA{0xff, 0xff, 0xf0, 0xff} // rgb(255, 255, 240) Khaki = color.RGBA{0xf0, 0xe6, 0x8c, 0xff} // rgb(240, 230, 140) Lavender = color.RGBA{0xe6, 0xe6, 0xfa, 0xff} // rgb(230, 230, 250) Lavenderblush = color.RGBA{0xff, 0xf0, 0xf5, 0xff} // rgb(255, 240, 245) Lawngreen = color.RGBA{0x7c, 0xfc, 0x00, 0xff} // rgb(124, 252, 0) Lemonchiffon = color.RGBA{0xff, 0xfa, 0xcd, 0xff} // rgb(255, 250, 205) Lightblue = color.RGBA{0xad, 0xd8, 0xe6, 0xff} // rgb(173, 216, 230) Lightcoral = color.RGBA{0xf0, 0x80, 0x80, 0xff} // rgb(240, 128, 128) Lightcyan = color.RGBA{0xe0, 0xff, 0xff, 0xff} // rgb(224, 255, 255) Lightgoldenrodyellow = color.RGBA{0xfa, 0xfa, 0xd2, 0xff} // rgb(250, 250, 210) Lightgray = color.RGBA{0xd3, 0xd3, 0xd3, 0xff} // rgb(211, 211, 211) Lightgreen = color.RGBA{0x90, 0xee, 0x90, 0xff} // rgb(144, 238, 144) Lightgrey = color.RGBA{0xd3, 0xd3, 0xd3, 0xff} // rgb(211, 211, 211) Lightpink = color.RGBA{0xff, 0xb6, 0xc1, 0xff} // rgb(255, 182, 193) Lightsalmon = color.RGBA{0xff, 0xa0, 0x7a, 0xff} // rgb(255, 160, 122) Lightseagreen = color.RGBA{0x20, 0xb2, 0xaa, 0xff} // rgb(32, 178, 170) Lightskyblue = color.RGBA{0x87, 0xce, 0xfa, 0xff} // rgb(135, 206, 250) Lightslategray = color.RGBA{0x77, 0x88, 0x99, 0xff} // rgb(119, 136, 153) Lightslategrey = color.RGBA{0x77, 0x88, 0x99, 0xff} // rgb(119, 136, 153) Lightsteelblue = color.RGBA{0xb0, 0xc4, 0xde, 0xff} // rgb(176, 196, 222) Lightyellow = color.RGBA{0xff, 0xff, 0xe0, 0xff} // rgb(255, 255, 224) Lime = color.RGBA{0x00, 0xff, 0x00, 0xff} // rgb(0, 255, 0) Limegreen = color.RGBA{0x32, 0xcd, 0x32, 0xff} // rgb(50, 205, 50) Linen = color.RGBA{0xfa, 0xf0, 0xe6, 0xff} // rgb(250, 240, 230) Magenta = color.RGBA{0xff, 0x00, 0xff, 0xff} // rgb(255, 0, 255) Maroon = color.RGBA{0x80, 0x00, 0x00, 0xff} // rgb(128, 0, 0) Mediumaquamarine = color.RGBA{0x66, 0xcd, 0xaa, 0xff} // rgb(102, 205, 170) Mediumblue = color.RGBA{0x00, 0x00, 0xcd, 0xff} // rgb(0, 0, 205) Mediumorchid = color.RGBA{0xba, 0x55, 0xd3, 0xff} // rgb(186, 85, 211) Mediumpurple = color.RGBA{0x93, 0x70, 0xdb, 0xff} // rgb(147, 112, 219) Mediumseagreen = color.RGBA{0x3c, 0xb3, 0x71, 0xff} // rgb(60, 179, 113) Mediumslateblue = color.RGBA{0x7b, 0x68, 0xee, 0xff} // rgb(123, 104, 238) Mediumspringgreen = color.RGBA{0x00, 0xfa, 0x9a, 0xff} // rgb(0, 250, 154) Mediumturquoise = color.RGBA{0x48, 0xd1, 0xcc, 0xff} // rgb(72, 209, 204) Mediumvioletred = color.RGBA{0xc7, 0x15, 0x85, 0xff} // rgb(199, 21, 133) Midnightblue = color.RGBA{0x19, 0x19, 0x70, 0xff} // rgb(25, 25, 112) Mintcream = color.RGBA{0xf5, 0xff, 0xfa, 0xff} // rgb(245, 255, 250) Mistyrose = color.RGBA{0xff, 0xe4, 0xe1, 0xff} // rgb(255, 228, 225) Moccasin = color.RGBA{0xff, 0xe4, 0xb5, 0xff} // rgb(255, 228, 181) Oldlace = color.RGBA{0xfd, 0xf5, 0xe6, 0xff} // rgb(253, 245, 230) Olive = color.RGBA{0x80, 0x80, 0x00, 0xff} // rgb(128, 128, 0) Olivedrab = color.RGBA{0x6b, 0x8e, 0x23, 0xff} // rgb(107, 142, 35) Orange = color.RGBA{0xff, 0xa5, 0x00, 0xff} // rgb(255, 165, 0) Orangered = color.RGBA{0xff, 0x45, 0x00, 0xff} // rgb(255, 69, 0) Orchid = color.RGBA{0xda, 0x70, 0xd6, 0xff} // rgb(218, 112, 214) Palegoldenrod = color.RGBA{0xee, 0xe8, 0xaa, 0xff} // rgb(238, 232, 170) Palegreen = color.RGBA{0x98, 0xfb, 0x98, 0xff} // rgb(152, 251, 152) Paleturquoise = color.RGBA{0xaf, 0xee, 0xee, 0xff} // rgb(175, 238, 238) Palevioletred = color.RGBA{0xdb, 0x70, 0x93, 0xff} // rgb(219, 112, 147) Papayawhip = color.RGBA{0xff, 0xef, 0xd5, 0xff} // rgb(255, 239, 213) Peachpuff = color.RGBA{0xff, 0xda, 0xb9, 0xff} // rgb(255, 218, 185) Peru = color.RGBA{0xcd, 0x85, 0x3f, 0xff} // rgb(205, 133, 63) Pink = color.RGBA{0xff, 0xc0, 0xcb, 0xff} // rgb(255, 192, 203) Plum = color.RGBA{0xdd, 0xa0, 0xdd, 0xff} // rgb(221, 160, 221) Powderblue = color.RGBA{0xb0, 0xe0, 0xe6, 0xff} // rgb(176, 224, 230) Purple = color.RGBA{0x80, 0x00, 0x80, 0xff} // rgb(128, 0, 128) Red = color.RGBA{0xff, 0x00, 0x00, 0xff} // rgb(255, 0, 0) Rosybrown = color.RGBA{0xbc, 0x8f, 0x8f, 0xff} // rgb(188, 143, 143) Royalblue = color.RGBA{0x41, 0x69, 0xe1, 0xff} // rgb(65, 105, 225) Saddlebrown = color.RGBA{0x8b, 0x45, 0x13, 0xff} // rgb(139, 69, 19) Salmon = color.RGBA{0xfa, 0x80, 0x72, 0xff} // rgb(250, 128, 114) Sandybrown = color.RGBA{0xf4, 0xa4, 0x60, 0xff} // rgb(244, 164, 96) Seagreen = color.RGBA{0x2e, 0x8b, 0x57, 0xff} // rgb(46, 139, 87) Seashell = color.RGBA{0xff, 0xf5, 0xee, 0xff} // rgb(255, 245, 238) Sienna = color.RGBA{0xa0, 0x52, 0x2d, 0xff} // rgb(160, 82, 45) Silver = color.RGBA{0xc0, 0xc0, 0xc0, 0xff} // rgb(192, 192, 192) Skyblue = color.RGBA{0x87, 0xce, 0xeb, 0xff} // rgb(135, 206, 235) Slateblue = color.RGBA{0x6a, 0x5a, 0xcd, 0xff} // rgb(106, 90, 205) Slategray = color.RGBA{0x70, 0x80, 0x90, 0xff} // rgb(112, 128, 144) Slategrey = color.RGBA{0x70, 0x80, 0x90, 0xff} // rgb(112, 128, 144) Snow = color.RGBA{0xff, 0xfa, 0xfa, 0xff} // rgb(255, 250, 250) Springgreen = color.RGBA{0x00, 0xff, 0x7f, 0xff} // rgb(0, 255, 127) Steelblue = color.RGBA{0x46, 0x82, 0xb4, 0xff} // rgb(70, 130, 180) Tan = color.RGBA{0xd2, 0xb4, 0x8c, 0xff} // rgb(210, 180, 140) Teal = color.RGBA{0x00, 0x80, 0x80, 0xff} // rgb(0, 128, 128) Thistle = color.RGBA{0xd8, 0xbf, 0xd8, 0xff} // rgb(216, 191, 216) Tomato = color.RGBA{0xff, 0x63, 0x47, 0xff} // rgb(255, 99, 71) Turquoise = color.RGBA{0x40, 0xe0, 0xd0, 0xff} // rgb(64, 224, 208) Violet = color.RGBA{0xee, 0x82, 0xee, 0xff} // rgb(238, 130, 238) Wheat = color.RGBA{0xf5, 0xde, 0xb3, 0xff} // rgb(245, 222, 179) White = color.RGBA{0xff, 0xff, 0xff, 0xff} // rgb(255, 255, 255) Whitesmoke = color.RGBA{0xf5, 0xf5, 0xf5, 0xff} // rgb(245, 245, 245) Yellow = color.RGBA{0xff, 0xff, 0x00, 0xff} // rgb(255, 255, 0) Yellowgreen = color.RGBA{0x9a, 0xcd, 0x32, 0xff} // rgb(154, 205, 50) )
from https://golang.org/x/image/colornames
var DefaultStyle = Style{ FillColor: Black, StrokeColor: Transparent, StrokeWidth: 1.0, StrokeCapper: ButtCap, StrokeJoiner: MiterJoin, DashOffset: 0.0, Dashes: []float64{}, FillRule: NonZero, }
DefaultStyle is the default style for paths. It fills the path with a black color and has no stroke.
var Epsilon = 1e-10
Epsilon is the smallest number below which we assume the value to be zero. This is to avoid numerical floating point issues.
var Identity = Matrix{
{1.0, 0.0, 0.0},
{0.0, 1.0, 0.0},
}
Identity is the identity affine transformation matrix, i.e. transforms any point to itself.
var Origin = Point{0.0, 0.0}
var Precision = 8
Precision is the number of significant digits at which floating point value will be printed to output formats.
var Tolerance = 0.01
Tolerance is the maximum deviation from the original path in millimeters when e.g. flatting.
var Transparent = color.RGBA{0x00, 0x00, 0x00, 0x00} // rgba(0, 0, 0, 0)
Transparent when used as a fill or stroke color will indicate that the fill or stroke will not be drawn.
Functions ¶
Types ¶
type ArcsJoiner ¶
ArcsJoiner is an arcs joiner.
func (ArcsJoiner) Join ¶
func (j ArcsJoiner) Join(rhs, lhs *Path, halfWidth float64, pivot, n0, n1 Point, r0, r1 float64)
Join adds a join to a right-hand-side and left-hand-side path, of width 2*halfWidth, around a pivot point with starting and ending normals of n0 and n1, and radius of curvatures of the previous and next segments.
func (ArcsJoiner) String ¶
func (j ArcsJoiner) String() string
type BevelJoiner ¶
type BevelJoiner struct{}
BevelJoiner is a bevel joiner.
func (BevelJoiner) Join ¶
func (BevelJoiner) Join(rhs, lhs *Path, halfWidth float64, pivot, n0, n1 Point, r0, r1 float64)
Join adds a join to a right-hand-side and left-hand-side path, of width 2*halfWidth, around a pivot point with starting and ending normals of n0 and n1, and radius of curvatures of the previous and next segments.
func (BevelJoiner) String ¶
func (BevelJoiner) String() string
type ButtCapper ¶
type ButtCapper struct{}
ButtCapper is a butt capper.
func (ButtCapper) Cap ¶
func (ButtCapper) Cap(p *Path, halfWidth float64, pivot, n0 Point)
Cap adds a cap to path p of width 2*halfWidth, at a pivot point and initial normal direction of n0.
func (ButtCapper) String ¶
func (ButtCapper) String() string
type CSSColor ¶
CSSColor is a string formatter to convert a color.RGBA to a CSS color (hexadecimal or using rgba()).
type Canvas ¶
type Canvas struct {
W, H float64
// contains filtered or unexported fields
}
Canvas stores all drawing operations as layers that can be re-rendered to other renderers.
func New ¶
New returns a new canvas with width and height in millimeters, that records all drawing operations into layers. The canvas can then be rendered to any other renderer.
func NewFromSize ¶
NewFromSize returns a new canvas of given size in millimeters, that records all drawing operations into layers. The canvas can then be rendered to any other renderer.
func (*Canvas) Fit ¶
Fit shrinks the canvas' size so all elements fit with a given margin in millimeters.
func (*Canvas) Render ¶
Render renders the accumulated canvas drawing operations to another renderer.
func (*Canvas) RenderImage ¶
RenderImage renders an image to the canvas using a transformation matrix.
func (*Canvas) RenderPath ¶
RenderPath renders a path to the canvas using a style and a transformation matrix.
func (*Canvas) RenderText ¶
RenderText renders a text object to the canvas using a transformation matrix.
type Capper ¶
Capper implements Cap, with rhs the path to append to, halfWidth the half width of the stroke, pivot the pivot point around which to construct a cap, and n0 the normal at the start of the path. The length of n0 is equal to the halfWidth.
var ButtCap Capper = ButtCapper{}
ButtCap caps the start or end of a path by a butt cap.
var RoundCap Capper = RoundCapper{}
RoundCap caps the start or end of a path by a round cap.
var SquareCap Capper = SquareCapper{}
SquareCap caps the start or end of a path by a square cap.
type ColorSpace ¶
ColorSpace defines the color space within the RGB color model. All colors passed to this library are assumed to be in the sRGB color space, which is a ubiquitous assumption in most software. This works great for most applications, but fails when blending semi-transparent layers. See an elaborate explaination at https://blog.johnnovak.net/2016/09/21/what-every-coder-should-know-about-gamma/, which goes into depth of the problems of using sRGB for blending and the need for gamma correction. In short, we need to transform the colors, which are in the sRGB color space, to the linear color space, perform blending, and then transform them back to the sRGB color space. Unfortunately, almost all software does blending the wrong way (all PDF renderers and browsers I've tested), so by default this library will do the same by using LinearColorSpace which does no conversion from sRGB to linear and back but blends directly in sRGB. Or in other words, it assumes that colors are given in the linear color space and that the output image is expected to be in the linear color space as well. For technical correctness we should really be using the SRGBColorSpace, which will convert from sRGB to linear space, do blending in linear space, and then go back to sRGB space.
var DefaultColorSpace ColorSpace = LinearColorSpace{}
DefaultColorSpace is set to LinearColorSpace to match other renderers.
type Context ¶
type Context struct { Renderer ContextState // contains filtered or unexported fields }
Context maintains the state for the current path, path style, and view transformation matrix.
func NewContext ¶
NewContext returns a new context which is a wrapper around a renderer. Contexts maintain the state of the current path, path style, and view transformation matrix.
func (*Context) Arc ¶
Arc adds an elliptical arc with radii rx and ry, with rot the counter clockwise rotation in degrees, and theta0 and theta1 the angles in degrees of the ellipse (before rot is applied) between which the arc will run. If theta0 < theta1, the arc will run in a CCW direction. If the difference between theta0 and theta1 is bigger than 360 degrees, one full circle will be drawn and the remaining part of diff % 360, e.g. a difference of 810 degrees will draw one full circle and an arc over 90 degrees.
func (*Context) ArcTo ¶
ArcTo adds an arc with radii rx and ry, with rot the counter clockwise rotation with respect to the coordinate system in degrees, large and sweep booleans (see https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths#Arcs), and (x,y) the end position of the pen. The start position of the pen was given by a previous command's end point.
func (*Context) ComposeView ¶
ComposeView post-multiplies the current affine transformation matrix by the given matrix. This means that any draw action will first be transformed by the new view matrix (parameter) and then by the current view matrix (ie. `Context.View()`). `Context.ComposeView(Identity.ReflectX())` is the same as `Context.ReflectX()`.
func (*Context) CoordView ¶
CoordView returns the current affine transformation matrix through which all operation coordinates will be transformed.
func (*Context) CubeTo ¶
CubeTo adds a cubic Bézier path with control points (cpx1,cpy1) and (cpx2,cpy2) and end point (x,y).
func (*Context) DrawImage ¶
func (c *Context) DrawImage(x, y float64, img image.Image, resolution Resolution)
DrawImage draws an image at position (x,y) using the current draw state and the given resolution in pixels-per-millimeter. A higher resolution will draw a smaller image (ie. more image pixels per millimeter of document).
func (*Context) FillStroke ¶
func (c *Context) FillStroke()
FillStroke fills and then strokes the current path and resets the path.
func (*Context) MoveTo ¶
MoveTo moves the path to (x,y) without connecting with the previous path. It starts a new independent subpath. Multiple subpaths can be useful when negating parts of a previous path by overlapping it with a path in the opposite direction. The behaviour of overlapping paths depends on the FillRule.
func (*Context) Pop ¶
func (c *Context) Pop()
Pop restores the last pushed draw state and uses that as the current draw state. If there are no states on the stack, this will do nothing.
func (*Context) Pos ¶
Pos returns the current position of the path, which is the end point of the last command.
func (*Context) Push ¶
func (c *Context) Push()
Push saves the current draw state so that it can be popped later on.
func (*Context) QuadTo ¶
QuadTo adds a quadratic Bézier path with control point (cpx,cpy) and end point (x,y).
func (*Context) ReflectXAbout ¶
ReflectXAbout inverts the X axis of the view about the given X coordinate.
func (*Context) ReflectYAbout ¶
ReflectYAbout inverts the Y axis of the view about the given Y coordinate.
func (*Context) ResetStyle ¶
func (c *Context) ResetStyle()
ResetStyle resets the draw state to its default (colors, stroke widths, dashes, ...).
func (*Context) ResetView ¶
func (c *Context) ResetView()
ResetView resets the current affine transformation matrix to the Identity matrix, ie. no transformations.
func (*Context) RotateAbout ¶
RotateAbout rotates the view counter clockwise around (x,y) with rot in degrees.
func (*Context) ScaleAbout ¶
ScaleAbout scales the view around (x,y).
func (*Context) SetCoordRect ¶
SetCoordRect sets the current affine transformation matrix through which all operation coordinates will be transformed. It will transform coordinates from (0,0)--(width,height) to the target `rect`.
func (*Context) SetCoordSystem ¶
func (c *Context) SetCoordSystem(coordSystem CoordSystem)
SetCoordSystem sets the current affine transformation matrix through which all operation coordinates will be transformed as a Cartesian coordinate system.
func (*Context) SetCoordView ¶
SetCoordView sets the current affine transformation matrix through which all operation coordinates will be transformed. See `Matrix` for how transformations work.
func (*Context) SetDashes ¶
SetDashes sets the dash pattern to be used for stroking operations. The dash offset denotes the offset into the dash array in millimeters from where to start. Negative values are allowed.
func (*Context) SetFillColor ¶
SetFillColor sets the color to be used for filling operations.
func (*Context) SetFillRule ¶
SetFillRule sets the fill rule to be used for filling paths.
func (*Context) SetStrokeCapper ¶
SetStrokeCapper sets the line cap function to be used for stroke end points.
func (*Context) SetStrokeColor ¶
SetStrokeColor sets the color to be used for stroking operations.
func (*Context) SetStrokeJoiner ¶
SetStrokeJoiner sets the line join function to be used for stroke mid points.
func (*Context) SetStrokeWidth ¶
SetStrokeWidth sets the width in millimeters for stroking operations.
func (*Context) SetView ¶
SetView sets the current affine transformation matrix through which all operations will be transformed. See `Matrix` for how transformations work.
func (*Context) SetZIndex ¶
SetZIndex sets the z-index. This will call the renderer's `SetZIndex` function only if it exists (in this case only for `Canvas`).
func (*Context) ShearAbout ¶
ShearAbout shear stretches the view around (x,y).
func (*Context) Stroke ¶
func (c *Context) Stroke()
Stroke strokes the current path and resets the path.
type ContextState ¶
type ContextState struct { Style // contains filtered or unexported fields }
type CoordSystem ¶
type CoordSystem int
CoordSystem is the coordinate system, which can be either of the four cartesian quadrants. Most useful are the I'th and IV'th quadrants. CartesianI is the default quadrant with the zero-point in the bottom-left (the default for mathematics). The CartesianII has its zero-point in the bottom-right, CartesianIII in the top-right, and CartesianIV in the top-left (often used as default for printing devices). See https://en.wikipedia.org/wiki/Cartesian_coordinate_system#Quadrants_and_octants for an explanation.
const ( CartesianI CoordSystem = iota CartesianIV )
see CoordSystem
type FillRule ¶
type FillRule int
FillRule is the algorithm to specify which area is to be filled and which not, in particular when multiple subpaths overlap. The NonZero rule is the default and will fill any point that is being enclosed by an unequal number of paths winding clockwise and counter clockwise, otherwise it will not be filled. The EvenOdd rule will fill any point that is being enclosed by an uneven number of paths, whichever their direction.
type Font ¶
Font defines an SFNT font such as TTF or OTF.
func (*Font) Destroy ¶
func (f *Font) Destroy()
Destroy should be called when using HarfBuzz to free the C resources.
func (*Font) SetFeatures ¶
SetFeatures sets the font features (not yet supported).
func (*Font) SetVariations ¶
SetVariations sets the font variations (not yet supported).
type FontDecorator ¶
FontDecorator is an interface that returns a path given a font face and a width in millimeters.
var FontDashedUnderline FontDecorator = dashedUnderline{}
FontDashedUnderline is a font decoration that draws a dashed line under the text.
var FontDottedUnderline FontDecorator = dottedUnderline{}
FontDottedUnderline is a font decoration that draws a dotted line under the text.
var FontDoubleUnderline FontDecorator = doubleUnderline{}
FontDoubleUnderline is a font decoration that draws two lines under the text.
var FontOverline FontDecorator = overline{}
FontOverline is a font decoration that draws a line over the text.
var FontSawtoothUnderline FontDecorator = sawtoothUnderline{}
FontSawtoothUnderline is a font decoration that draws a wavy sawtooth path under the text.
var FontSineUnderline FontDecorator = sineUnderline{}
FontSineUnderline is a font decoration that draws a wavy sine path under the text.
var FontStrikethrough FontDecorator = strikethrough{}
FontStrikethrough is a font decoration that draws a line through the text.
var FontUnderline FontDecorator = underline{}
FontUnderline is a font decoration that draws a line under the text.
var FontWavyUnderline FontDecorator = wavyUnderline{}
FontWavyUnderline is a font decoration that draws a wavy path under the text.
type FontFace ¶
type FontFace struct { Font *Font Size float64 // in pt Style FontStyle Variant FontVariant Color color.RGBA Deco []FontDecorator // faux styles for bold, italic, and sub- and superscript FauxBold, FauxItalic float64 XOffset, YOffset int32 Language string Script text.Script Direction text.Direction // TODO: really needed here? // contains filtered or unexported fields }
FontFace defines a font face from a given font. It specifies the font size, color, faux styles and font decorations.
func (*FontFace) Decorate ¶
Decorate will return the decoration path over a given width in millimeters.
func (*FontFace) HasDecoration ¶
HasDecoration returns true if the font face has decorations enabled.
func (*FontFace) Metrics ¶
func (face *FontFace) Metrics() FontMetrics
Metrics returns the font metrics. See https://developer.apple.com/library/archive/documentation/TextFonts/Conceptual/CocoaTextArchitecture/Art/glyph_metrics_2x.png for an explanation of the different metrics.
func (*FontFace) PPEM ¶
func (face *FontFace) PPEM(resolution Resolution) uint16
PPEM returns the pixels-per-EM for a given resolution of the font face.
type FontFamily ¶
type FontFamily struct {
// contains filtered or unexported fields
}
FontFamily contains a family of fonts (bold, italic, ...). Allowing to select an italic style as the native italic font or to use faux italic if not present.
func NewFontFamily ¶
func NewFontFamily(name string) *FontFamily
NewFontFamily returns a new font family.
func (*FontFamily) Destroy ¶
func (family *FontFamily) Destroy()
Destroy should be called when using HarfBuzz to free the C resources.
func (*FontFamily) Face ¶
func (family *FontFamily) Face(size float64, col color.Color, style FontStyle, variant FontVariant, deco ...FontDecorator) *FontFace
Face gets the font face given by the font size in points and its style.
func (*FontFamily) FindLocalFont ¶
func (family *FontFamily) FindLocalFont(name string, style FontStyle) string
FindLocalFont finds the path to a font from the system's fonts.
func (*FontFamily) LoadFont ¶
func (family *FontFamily) LoadFont(b []byte, index int, style FontStyle) error
LoadFont loads a font from memory.
func (*FontFamily) LoadFontCollection ¶
func (family *FontFamily) LoadFontCollection(filename string, index int, style FontStyle) error
LoadFontCollection loads a font from a collection file and uses the font at the specified index.
func (*FontFamily) LoadFontFile ¶
func (family *FontFamily) LoadFontFile(filename string, style FontStyle) error
LoadFontFile loads a font from a file.
func (*FontFamily) LoadLocalFont ¶
func (family *FontFamily) LoadLocalFont(name string, style FontStyle) error
LoadLocalFont loads a font from the system's fonts.
func (*FontFamily) Name ¶
func (family *FontFamily) Name() string
Name returns the name of the font family.
func (*FontFamily) SetFeatures ¶
func (family *FontFamily) SetFeatures(features string)
SetFeatures sets the font features (not yet supported).
func (*FontFamily) SetVariations ¶
func (family *FontFamily) SetVariations(variations string)
SetVariations sets the font variations (not yet supported).
type FontMetrics ¶
type FontMetrics struct { LineHeight float64 Ascent float64 Descent float64 LineGap float64 XHeight float64 CapHeight float64 XMin, YMin float64 XMax, YMax float64 }
FontMetrics contains a number of metrics that define a font face. See https://developer.apple.com/library/archive/documentation/TextFonts/Conceptual/CocoaTextArchitecture/Art/glyph_metrics_2x.png for an explanation of the different metrics.
func (FontMetrics) String ¶
func (m FontMetrics) String() string
type FontStyle ¶
type FontStyle int
FontStyle defines the font style to be used for the font. It specifies a boldness with optionally italic, e.g. FontBlack | FontItalic will specify a black boldness (a font-weight of 800 in CSS) and italic.
const ( FontRegular FontStyle = iota // 400 FontExtraLight // 100 FontLight // 200 FontBook // 300 FontMedium // 500 FontSemibold // 600 FontBold // 700 FontBlack // 800 FontExtraBlack // 900 FontItalic FontStyle = 1 << 8 )
see FontStyle
type FontSubsetter ¶
type FontSubsetter struct { IDs []uint16 // old glyphIDs for increasing new glyphIDs IDMap map[uint16]uint16 // old to new glyphID }
FontSubsetter holds a map between original glyph IDs and new glyph IDs in a subsetted font.
func NewFontSubsetter ¶
func NewFontSubsetter() *FontSubsetter
NewFontSubsetter returns a new font subsetter.
func (*FontSubsetter) Get ¶
func (subsetter *FontSubsetter) Get(glyphID uint16) uint16
Get maps a glyphID of the original font to the subsetted font. If the glyphID is not subsetted, it will be added to the map.
func (*FontSubsetter) List ¶
func (subsetter *FontSubsetter) List() []uint16
IDs returns all subsetted IDs in the order of appearance.
type FontVariant ¶
type FontVariant int
FontVariant defines the font variant to be used for the font, such as subscript or smallcaps.
const ( FontNormal FontVariant = iota FontSubscript FontSuperscript FontSmallcaps )
see FontVariant
type GammaColorSpace ¶
type GammaColorSpace struct {
Gamma float64
}
GammaColorSpace assumes that input colors and output images are gamma-corrected with the given gamma value. The sRGB space uses a gamma=2.4 for most of the curve, but will on average have a gamma=2.2 best approximating the sRGB curve. See https://en.wikipedia.org/wiki/SRGB#The_sRGB_transfer_function_(%22gamma%22). According to https://www.puredevsoftware.com/blog/2019/01/22/sub-pixel-gamma-correct-font-rendering/, a gamma=1.43 is recommended for fonts.
func (GammaColorSpace) FromLinear ¶
func (cs GammaColorSpace) FromLinear(col color.Color) color.RGBA
type Image ¶
Image is a raster image. Keeping the original bytes allows the renderer to optimize rendering in some cases.
type ImageEncoding ¶
type ImageEncoding int
ImageEncoding defines whether the embedded image shall be embedded as lossless (typically PNG) or lossy (typically JPG).
const ( Lossless ImageEncoding = iota Lossy )
see ImageEncoding
type Joiner ¶
Joiner implements Join, with rhs the right path and lhs the left path to append to, pivot the intersection of both path elements, n0 and n1 the normals at the start and end of the path respectively. The length of n0 and n1 are equal to the halfWidth.
var ArcsJoin Joiner = ArcsJoiner{BevelJoin, 10.0}
ArcsJoin connects two path elements by extending the ends of the paths as circle arcs until they meet. If this point is further than 10 mm * (strokeWidth / 2.0) away, this will result in a bevel join.
var BevelJoin Joiner = BevelJoiner{}
BevelJoin connects two path elements by a linear join.
var MiterJoin Joiner = MiterJoiner{BevelJoin, 2.0}
MiterJoin connects two path elements by extending the ends of the paths as lines until they meet. If this point is further than 2 mm * (strokeWidth / 2.0) away, this will result in a bevel join.
var RoundJoin Joiner = RoundJoiner{}
RoundJoin connects two path elements by a round join.
func ArcsClipJoin ¶
ArcsClipJoin returns an ArcsJoiner with given limit in mm*strokeWidth/2.0 upon which the gapJoiner function will be used. Limit can be NaN so that the gapJoiner is never used.
func MiterClipJoin ¶
MiterClipJoin returns a MiterJoiner with given limit*strokeWidth/2.0 in mm upon which the gapJoiner function will be used. Limit can be NaN so that the gapJoiner is never used.
type LinearColorSpace ¶
type LinearColorSpace struct{}
LinearColorSpace is the default color space that does not do color space conversion for blending purposes. This is only correct if the input colors and output images are assumed to be in the linear color space so that blending is in linear space as well. In general though, we assume that input colors and output images are using the sRGB color space almost ubiquitously, resulting in blending in sRGB space which is wrong! Even though it is technically incorrect, many PDF viewers and browsers do this anyway.
func (LinearColorSpace) FromLinear ¶
func (LinearColorSpace) FromLinear(col color.Color) color.RGBA
type Matrix ¶
type Matrix [2][3]float64
Matrix is used for affine transformations, which are transformations such as translation, scaling, reflection, rotation, shear stretching. See https://en.wikipedia.org/wiki/Affine_transformation#Image_transformation for an overview of the transformations. The affine transformation matrix contains all transformations in a matrix, where we can concatenate transformations to apply them sequentially. Be aware that concatenated transformations will be evaluated right-to-left! So that Identity.Rotate(30).Translate(20,0) will first translate 20 points horizontally and then rotate 30 degrees counter clockwise.
func (Matrix) Decompose ¶
Decompose extracts the translation, rotation, scaling and rotation components (applied in the reverse order) as (tx, ty, theta, sx, sy, phi) with rotation counter clockwise. This corresponds to Identity.Translate(tx, ty).Rotate(theta).Scale(sx, sy).Rotate(phi).
func (Matrix) Dot ¶
Dot returns the dot product between the matrix and the given vector, i.e. applying the transformation.
func (Matrix) Eigen ¶
Eigen returns the matrix eigenvalues and eigenvectors. The first eigenvalue is related to the first eigenvector, and so for the second pair. Eigenvectors are normalized.
func (Matrix) IsRigid ¶
IsRigid is true if the matrix is orthogonal and consists of only translation, rotation, and reflection transformations.
func (Matrix) IsSimilarity ¶
IsSimilarity is true if the matrix consists of only translation, rotation, reflection, and scaling transformations.
func (Matrix) IsTranslation ¶
IsTranslation is true if the matrix consists of only translational components, i.e. no rotation, scaling, or skew transformations.
func (Matrix) Mul ¶
Mul multiplies the current matrix by the given matrix, i.e. combining transformations.
func (Matrix) ReflectXAbout ¶
ReflectXAbout adds a horizontal reflection transformation about x.
func (Matrix) ReflectYAbout ¶
ReflectYAbout adds a vertical reflection transformation about y.
func (Matrix) RotateAbout ¶
RotateAbout adds a rotation transformation about (x,y) with rot in degrees counter clockwise.
func (Matrix) Scale ¶
Scale adds a scaling transformation in sx and sy. When scale is negative it will flip those axes.
func (Matrix) ScaleAbout ¶
ScaleAbout adds a scaling transformation about (x,y) in sx and sy. When scale is negative it will flip those axes.
func (Matrix) Shear ¶
Shear adds a shear transformation with sx the horizontal shear and sy the vertical shear.
func (Matrix) ShearAbout ¶
ShearAbout adds a shear transformation about (x,y) with sx the horizontal shear and sy the vertical shear.
func (Matrix) String ¶
String returns a string representation of the affine transformation matrix as six values, where [a b c; d e f; g h i] will be written as "a b d e c f" as g, h and i have fixed values (0, 0 and 1 respectively).
type MiterJoiner ¶
MiterJoiner is a miter joiner.
func (MiterJoiner) Join ¶
func (j MiterJoiner) Join(rhs, lhs *Path, halfWidth float64, pivot, n0, n1 Point, r0, r1 float64)
Join adds a join to a right-hand-side and left-hand-side path, of width 2*halfWidth, around a pivot point with starting and ending normals of n0 and n1, and radius of curvatures of the previous and next segments.
func (MiterJoiner) String ¶
func (j MiterJoiner) String() string
type Path ¶
type Path struct {
// contains filtered or unexported fields
}
Path defines a vector path in 2D using a series of commands (MoveTo, LineTo, QuadTo, CubeTo, ArcTo and Close). Each command consists of a number of float64 values (depending on the command) that fully define the action. The first value is the command itself (as a float64). The last two values is the end point position of the pen after the action (x,y). QuadTo defined one control point (x,y) in between, CubeTo defines two control points, and ArcTo defines (rx,ry,phi,large+sweep) i.e. the radius in x and y, its rotation (in radians) and the large and sweep booleans in one float64. Only valid commands are appended, so that LineTo has a non-zero length, QuadTo's and CubeTo's control point(s) don't (both) overlap with the start and end point, and ArcTo has non-zero radii and has non-zero length. For ArcTo we also make sure the angle is in the range [0, 2*PI) and we scale the radii up if they appear too small to fit the arc.
func Arc ¶
Arc returns a circular arc with radius r and theta0 and theta1 the angles in degrees of the ellipse (before rot is applies) between which the arc will run. If theta0 < theta1, the arc will run in a CCW direction. If the difference between theta0 and theta1 is bigger than 360 degrees, one full circle will be drawn and the remaining part of diff % 360, e.g. a difference of 810 degrees will draw one full circle and an arc over 90 degrees.
func BeveledRectangle ¶
BeveledRectangle returns a rectangle of width w and height h with beveled corners at distance r from the corner.
func EllipticalArc ¶
EllipticalArc returns an elliptical arc with radii rx and ry, with rot the counter clockwise rotation in degrees, and theta0 and theta1 the angles in degrees of the ellipse (before rot is applies) between which the arc will run. If theta0 < theta1, the arc will run in a CCW direction. If the difference between theta0 and theta1 is bigger than 360 degrees, one full circle will be drawn and the remaining part of diff % 360, e.g. a difference of 810 degrees will draw one full circle and an arc over 90 degrees.
func Grid ¶
Grid returns a stroked grid of width w and height h, with grid line thickness r, and the number of cells horizontally and vertically as nx and ny respectively.
func MustParseSVG ¶
MustParseSVG parses an SVG path data string and panics if it fails.
func ParseLaTeX ¶
func RegularPolygon ¶
RegularPolygon returns a regular polygon with radius r and rotation rot in degrees. It uses n vertices/edges, so when n approaches infinity this will return a path that approximates a circle. n must be 3 or more. The up boolean defines whether the first point will point north or not.
func RegularStarPolygon ¶
RegularStarPolygon returns a regular star polygon with radius r and rotation rot in degrees. It uses n vertices of density d. This will result in a self-intersection star in counter clockwise direction. If n/2 < d the star will be clockwise and if n and d are not coprime a regular polygon will be obtained, possible with multiple windings. n must be 3 or more and d 2 or more. The up boolean defines whether the first point will point north or not.
func RoundedRectangle ¶
RoundedRectangle returns a rectangle of width w and height h with rounded corners of radius r. A negative radius will cast the corners inwards (i.e. concave).
func StarPolygon ¶
StarPolygon returns a star polygon of n points with alternating radius R and r. The up boolean defines whether the first point (true) or second point (false) will be pointing north.
func (*Path) Append ¶
Append appends path q to p and returns a new path if successful (otherwise either p or q are returned).
func (*Path) Arc ¶
Arc adds an elliptical arc with radii rx and ry, with rot the counter clockwise rotation in degrees, and theta0 and theta1 the angles in degrees of the ellipse (before rot is applies) between which the arc will run. If theta0 < theta1, the arc will run in a CCW direction. If the difference between theta0 and theta1 is bigger than 360 degrees, one full circle will be drawn and the remaining part of diff % 360, e.g. a difference of 810 degrees will draw one full circle and an arc over 90 degrees.
func (*Path) ArcTo ¶
ArcTo adds an arc with radii rx and ry, with rot the counter clockwise rotation with respect to the coordinate system in degrees, large and sweep booleans (see https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths#Arcs), and (x,y) the end position of the pen. The start position of the pen was given by a previous command's end point.
func (*Path) CCW ¶
CCW returns true when the path has (mostly) a counter clockwise direction. It does not need the path to be closed and will return true for a empty or straight line.
func (*Path) Close ¶
func (p *Path) Close()
Close closes a (sub)path with a LineTo to the start of the path (the most recent MoveTo command). It also signals the path closes as opposed to being just a LineTo command, which can be significant for stroking purposes for example.
func (*Path) CubeTo ¶
CubeTo adds a cubic Bézier path with control points (cpx1,cpy1) and (cpx2,cpy2) and end point (x,y).
func (*Path) Dash ¶
Dash returns a new path that consists of dashes. The elements in d specify the width of the dashes and gaps. It will alternate between dashes and gaps when picking widths. If d is an array of odd length, it is equivalent of passing d twice in sequence. The offset specifies the offset used into d (or negative offset into the path). Dash will be applied to each subpath independently.
func (*Path) Empty ¶
Empty returns true if p is an empty path or consists of only MoveTos and Closes.
func (*Path) Filling ¶
Filling returns whether each subpath gets filled or not. A path may not be filling when it negates another path and depends on the FillRule. If a subpath is not closed, it is implicitly assumed to be closed. If the path has no area it will return false.
func (*Path) Flatten ¶
Flatten flattens all Bézier and arc curves into linear segments and returns a new path. It uses Tolerance as the maximum deviation.
func (*Path) Interior ¶
Interior is true when the point (x,y) is in the interior of the path, i.e. gets filled. This depends on the FillRule.
func (*Path) Intersections ¶
Intersections for path p by path q, sorted for path p.
func (*Path) Iterate ¶
func (p *Path) Iterate( move func(Point, Point), line func(Point, Point), quad func(Point, Point, Point), cube func(Point, Point, Point, Point), arc func(Point, float64, float64, float64, bool, bool, Point), close func(Point, Point), )
Iterate iterates over the path commands and calls the respective functions move, line, quad, cube, arc, close when encountering MoveTo, LineTo, QuadTo, CubeTo, ArcTo, Close commands respectively. DEPRECATED
func (*Path) Join ¶
Join joins path q to p and returns a new path if successful (otherwise either p or q are returned). It's like executing the commands in q to p in sequence, where if the first MoveTo of q doesn't coincide with p it will fallback to appending the paths.
func (*Path) Length ¶
Length returns the length of the path in millimeters. The length is approximated for cubic Béziers.
func (*Path) Markers ¶
Markers returns an array of start, mid and end marker paths along the path at the coordinates between commands. Align will align the markers with the path direction so that the markers orient towards the path's left.
func (*Path) MoveTo ¶
MoveTo moves the path to (x,y) without connecting the path. It starts a new independent subpath. Multiple subpaths can be useful when negating parts of a previous path by overlapping it with a path in the opposite direction. The behaviour for overlapping paths depends on the FillRule.
func (*Path) Offset ¶
Offset offsets the path to expand by w and returns a new path. If w is negative it will contract. Path must be closed.
func (*Path) Pos ¶
Pos returns the current position of the path, which is the end point of the last command.
func (*Path) QuadTo ¶
QuadTo adds a quadratic Bézier path with control point (cpx,cpy) and end point (x,y).
func (*Path) ReplaceArcs ¶
ReplaceArcs replaces ArcTo commands by CubeTo commands.
func (*Path) Reverse ¶
Reverse returns a new path that is the same path as p but in the reverse direction.
func (*Path) Split ¶
Split splits the path into its independent subpaths. The path is split before each MoveTo command. None of the subpaths shall be empty.
func (*Path) SplitAt ¶
SplitAt splits the path into separate paths at the specified intervals (given in millimeters) along the path.
func (*Path) StartPos ¶
StartPos returns the start point of the current subpath, i.e. it returns the position of the last MoveTo command.
func (*Path) String ¶
String returns a string that represents the path similar to the SVG path data format (but not necessarily valid SVG).
func (*Path) Stroke ¶
Stroke converts a path into a stroke of width w and returns a new path. It uses cr to cap the start and end of the path, and jr to join all path elements. If the path closes itself, it will use a join between the start and end instead of capping them. The tolerance is the maximum deviation from the original path when flattening Béziers and optimizing the stroke.
func (*Path) ToRasterizer ¶
func (p *Path) ToRasterizer(ras *vector.Rasterizer, resolution Resolution)
ToRasterizer rasterizes the path using the given rasterizer and resolution.
func (*Path) ToSVG ¶
ToSVG returns a string that represents the path in the SVG path data format with minification.
func (*Path) Transform ¶
Transform transforms the path by the given transformation matrix and returns a new path.
func (*Path) Triangulate ¶
Triangulate tessellates the path and returns the triangles that fill the path. WIP
type Point ¶
type Point struct {
X, Y float64
}
Point is a coordinate in 2D space. OP refers to the line that goes through the origin (0,0) and this point (x,y).
func EllipsePos ¶
EllipsePos returns the position on the ellipse at angle theta.
func (Point) AngleBetween ¶
AngleBetween returns the angle between OP and OQ.
func (Point) Dot ¶
Dot returns the dot product between OP and OQ, i.e. zero if perpendicular and |OP|*|OQ| if aligned.
func (Point) Interpolate ¶
Interpolate returns a point on PQ that is linearly interpolated by t in [0,1], i.e. t=0 returns P and t=1 returns Q.
func (Point) PerpDot ¶
PerpDot returns the perp dot product between OP and OQ, i.e. zero if aligned and |OP|*|OQ| if perpendicular.
type Polyline ¶
type Polyline struct {
// contains filtered or unexported fields
}
Polyline defines a list of points in 2D space that form a polyline. If the last coordinate equals the first coordinate, we assume the polyline to close itself.
func PolylineFromPath ¶
PolylineFromPath returns a polyline from the given path by approximating it by linear line segments, i.e. by flattening.
func PolylineFromPathCoords ¶
PolylineFromPathCoords returns a polyline from the given path from each of the start/end coordinates of the segments, i.e. converting all non-linear segments to linear ones.
func (*Polyline) FillCount ¶
FillCount returns the number of times the test point is enclosed by the polyline. Counter clockwise enclosures are counted positively and clockwise enclosures negatively.
func (*Polyline) Interior ¶
Interior is true when the point (x,y) is in the interior of the path, i.e. gets filled. This depends on the FillRule.
type Rect ¶
type Rect struct {
X, Y, W, H float64
}
Rect is a rectangle in 2D defined by a position and its width and height.
type Renderer ¶
type Renderer interface { Size() (float64, float64) RenderPath(path *Path, style Style, m Matrix) RenderText(text *Text, m Matrix) RenderImage(img image.Image, m Matrix) }
Renderer is an interface that renderers implement. It defines the size of the target (in mm) and functions to render paths, text objects and images.
type Resolution ¶
type Resolution float64
Resolution is used for rasterizing. Higher resolutions will result in larger images.
func DPI ¶
func DPI(dpi float64) Resolution
DPI (dots-per-inch) for the resolution of rasterization.
func DPMM ¶
func DPMM(dpmm float64) Resolution
DPMM (dots-per-millimeter) for the resolution of rasterization.
func (Resolution) DPI ¶
func (res Resolution) DPI() float64
DPI returns the resolution in dots-per-inch.
func (Resolution) DPMM ¶
func (res Resolution) DPMM() float64
DPMM returns the resolution in dots-per-millimeter.
type RichText ¶
RichText allows to build up a rich text with text spans of different font faces and fitting that into a box using Donald Knuth's line breaking algorithm. TODO: RichText add support for decoration spans to properly underline the spaces betwee words too
func NewRichText ¶
NewRichText returns a new rich text with the given default font face.
func (*RichText) Reset ¶
func (rt *RichText) Reset()
Reset resets the rich text to its initial state.
func (*RichText) SetFaceSpan ¶
SetFaceSpan sets the font face between start and end measured in bytes.
func (*RichText) SetTextOrientation ¶
func (rt *RichText) SetTextOrientation(orient TextOrientation)
SetTextOrientation sets the text orientation of non-CJK between CJK.
func (*RichText) SetWritingMode ¶
func (rt *RichText) SetWritingMode(mode WritingMode)
SetWritingMode sets the writing mode.
type RoundCapper ¶
type RoundCapper struct{}
RoundCapper is a round capper.
func (RoundCapper) Cap ¶
func (RoundCapper) Cap(p *Path, halfWidth float64, pivot, n0 Point)
Cap adds a cap to path p of width 2*halfWidth, at a pivot point and initial normal direction of n0.
func (RoundCapper) String ¶
func (RoundCapper) String() string
type RoundJoiner ¶
type RoundJoiner struct{}
RoundJoiner is a round joiner.
func (RoundJoiner) Join ¶
func (RoundJoiner) Join(rhs, lhs *Path, halfWidth float64, pivot, n0, n1 Point, r0, r1 float64)
Join adds a join to a right-hand-side and left-hand-side path, of width 2*halfWidth, around a pivot point with starting and ending normals of n0 and n1, and radius of curvatures of the previous and next segments.
func (RoundJoiner) String ¶
func (RoundJoiner) String() string
type SRGBColorSpace ¶
type SRGBColorSpace struct{}
SRGBColorSpace assumes that input colors and output images are in the sRGB color space (ubiquitous in almost all applications), which implies that for blending we need to convert to the linear color space, do blending, and then convert back to the sRGB color space. This will give technically correct blending, but may differ from common PDF viewer and browsers (which are wrong).
func (SRGBColorSpace) FromLinear ¶
func (SRGBColorSpace) FromLinear(col color.Color) color.RGBA
type Segment ¶
Segment is a path command.
type SquareCapper ¶
type SquareCapper struct{}
SquareCapper is a square capper.
func (SquareCapper) Cap ¶
func (SquareCapper) Cap(p *Path, halfWidth float64, pivot, n0 Point)
Cap adds a cap to path p of width 2*halfWidth, at a pivot point and initial normal direction of n0.
func (SquareCapper) String ¶
func (SquareCapper) String() string
type Style ¶
type Style struct { FillColor color.RGBA StrokeColor color.RGBA StrokeWidth float64 StrokeCapper Capper StrokeJoiner Joiner DashOffset float64 Dashes []float64 FillRule // TODO: test for all renderers }
Style is the path style that defines how to draw the path. When FillColor is transparent it will not fill the path. If StrokeColor is transparent or StrokeWidth is zero, it will not stroke the path. If Dashes is an empty array, it will not draw dashes but instead a solid stroke line. FillRule determines how to fill the path when paths overlap and have certain directions (clockwise, counter clockwise).
type Text ¶
type Text struct { Face *FontFace Mode WritingMode // contains filtered or unexported fields }
Text holds the representation of a text object.
func NewTextBox ¶
func NewTextBox(face *FontFace, s string, width, height float64, halign, valign TextAlign, indent, lineStretch float64) *Text
NewTextBox is an advanced text formatter that will format text placement based on the settings. It takes a single font face, a string, the width or height of the box (can be zero to disable), horizontal and vertical alignment (Left, Center, Right, Top, Bottom or Justify), text indentation for the first line and line stretch (percentage to stretch the line based on the line height).
func NewTextLine ¶
NewTextLine is a simple text line using a single font face, a string (supporting new lines) and horizontal alignment (Left, Center, Right). The text's baseline will be drawn on the current coordinate.
func (*Text) Heights ¶
Heights returns the top and bottom position of the first and last line respectively.
func (*Text) OutlineBounds ¶
OutlineBounds returns the rectangle that contains the entire text box, i.e. the glyph outlines (slow).
func (*Text) RenderAsPath ¶
func (t *Text) RenderAsPath(r Renderer, m Matrix, resolution Resolution)
RenderAsPath renders the text and its decorations converted to paths, calling r.RenderPath.
func (*Text) WalkDecorations ¶
WalkDecorations calls the callback for each color of decoration used per line.
type TextAlign ¶
type TextAlign int
TextAlign specifies how the text should align or whether it should be justified.
type TextOrientation ¶
type TextOrientation int
TextOrientation specifies how non-CJK should be oriented between CJK.
const ( Mixed TextOrientation = iota Upright )
see TextOrientation
type TextSpan ¶
type TextSpan struct { Width float64 Face *FontFace Text string Glyphs []canvasText.Glyph Direction canvasText.Direction // contains filtered or unexported fields }
TextSpan is a span of text.
type WritingMode ¶
type WritingMode int
WritingMode specifies how the text lines should be laid out.
const ( HorizontalTB WritingMode = iota VerticalRL VerticalLR )
see WritingMode
func (WritingMode) String ¶
func (wm WritingMode) String() string
Source Files ¶
Directories ¶
Path | Synopsis |
---|---|
examples
|
|
html-canvas
Code generated for package main by go-bindata DO NOT EDIT.
|
Code generated for package main by go-bindata DO NOT EDIT. |
resources
|
|