38 lines
1.2 KiB
Go
38 lines
1.2 KiB
Go
// Copyright 2017 The oksvg Authors. All rights reserved.
|
|
// created: 2/12/2017 by S.R.Wiley
|
|
//
|
|
// utils.go implements translation of an SVG2.0 path into a rasterx Path.
|
|
|
|
package oksvg
|
|
|
|
import (
|
|
"github.com/srwiley/rasterx"
|
|
)
|
|
|
|
// SvgIcon holds data from parsed SVGs.
|
|
type SvgIcon struct {
|
|
ViewBox struct{ X, Y, W, H float64 }
|
|
Titles []string // Title elements collect here
|
|
Descriptions []string // Description elements collect here
|
|
Grads map[string]*rasterx.Gradient
|
|
Defs map[string][]definition
|
|
SVGPaths []SvgPath
|
|
Transform rasterx.Matrix2D
|
|
classes map[string]styleAttribute
|
|
}
|
|
|
|
// Draw the compiled SVG icon into the GraphicContext.
|
|
// All elements should be contained by the Bounds rectangle of the SvgIcon.
|
|
func (s *SvgIcon) Draw(r *rasterx.Dasher, opacity float64) {
|
|
for _, svgp := range s.SVGPaths {
|
|
svgp.DrawTransformed(r, opacity, s.Transform)
|
|
}
|
|
}
|
|
|
|
// SetTarget sets the Transform matrix to draw within the bounds of the rectangle arguments
|
|
func (s *SvgIcon) SetTarget(x, y, w, h float64) {
|
|
scaleW := w / s.ViewBox.W
|
|
scaleH := h / s.ViewBox.H
|
|
s.Transform = rasterx.Identity.Translate(x-s.ViewBox.X, y-s.ViewBox.Y).Scale(scaleW, scaleH)
|
|
}
|