Use line-{width,cap,join} attributes in svg context
This commit is contained in:
parent
ca83e24222
commit
6c0a15c624
3 changed files with 31 additions and 1 deletions
16
draw2d.go
16
draw2d.go
|
@ -128,6 +128,14 @@ const (
|
||||||
SquareCap
|
SquareCap
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func (cap LineCap) String() string {
|
||||||
|
return map[LineCap]string{
|
||||||
|
RoundCap: "round",
|
||||||
|
ButtCap: "cap",
|
||||||
|
SquareCap: "square",
|
||||||
|
}[cap]
|
||||||
|
}
|
||||||
|
|
||||||
// LineJoin is the style of segments joint
|
// LineJoin is the style of segments joint
|
||||||
type LineJoin int
|
type LineJoin int
|
||||||
|
|
||||||
|
@ -140,6 +148,14 @@ const (
|
||||||
MiterJoin
|
MiterJoin
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func (join LineJoin) String() string {
|
||||||
|
return map[LineJoin]string{
|
||||||
|
RoundJoin: "round",
|
||||||
|
BevelJoin: "bevel",
|
||||||
|
MiterJoin: "miter",
|
||||||
|
}[join]
|
||||||
|
}
|
||||||
|
|
||||||
// StrokeStyle keeps stroke style attributes
|
// StrokeStyle keeps stroke style attributes
|
||||||
// that is used by the Stroke method of a Drawer
|
// that is used by the Stroke method of a Drawer
|
||||||
type StrokeStyle struct {
|
type StrokeStyle struct {
|
||||||
|
|
|
@ -76,9 +76,16 @@ func (gc *GraphicContext) drawPaths (drawType drawType, paths ...*draw2d.Path) {
|
||||||
svgPaths[i].Desc = toSvgPathDesc(path)
|
svgPaths[i].Desc = toSvgPathDesc(path)
|
||||||
if drawType & stroked == stroked {
|
if drawType & stroked == stroked {
|
||||||
svgPaths[i].Stroke = toSvgRGBA(gc.Current.StrokeColor)
|
svgPaths[i].Stroke = toSvgRGBA(gc.Current.StrokeColor)
|
||||||
|
svgPaths[i].StrokeWidth = toSvgLength(gc.Current.LineWidth)
|
||||||
|
svgPaths[i].StrokeLinecap = gc.Current.Cap.String()
|
||||||
|
svgPaths[i].StrokeLinejoin = gc.Current.Join.String()
|
||||||
|
} else {
|
||||||
|
svgPaths[i].Stroke = "none"
|
||||||
}
|
}
|
||||||
if drawType & filled == filled {
|
if drawType & filled == filled {
|
||||||
svgPaths[i].Fill = toSvgRGBA(gc.Current.FillColor)
|
svgPaths[i].Fill = toSvgRGBA(gc.Current.FillColor)
|
||||||
|
} else {
|
||||||
|
svgPaths[i].Fill = "none"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -89,7 +96,11 @@ func (gc *GraphicContext) drawPaths (drawType drawType, paths ...*draw2d.Path) {
|
||||||
|
|
||||||
func toSvgRGBA (c color.Color) string { // TODO move elsewhere
|
func toSvgRGBA (c color.Color) string { // TODO move elsewhere
|
||||||
r, g, b, a := c.RGBA()
|
r, g, b, a := c.RGBA()
|
||||||
return fmt.Sprintf("rgba(%v, %v, %v, %v)", r>>8, g>>8, b>>8, float64(a>>8)/255)
|
return fmt.Sprintf("rgba(%v, %v, %v, %.3f)", r>>8, g>>8, b>>8, float64(a>>8)/255)
|
||||||
|
}
|
||||||
|
|
||||||
|
func toSvgLength (l float64) string {
|
||||||
|
return fmt.Sprintf("%.4f", l)
|
||||||
}
|
}
|
||||||
|
|
||||||
func toSvgPathDesc (p *draw2d.Path) string { // TODO move elsewhere
|
func toSvgPathDesc (p *draw2d.Path) string { // TODO move elsewhere
|
||||||
|
|
|
@ -39,4 +39,7 @@ type Text struct {
|
||||||
type FillStroke struct {
|
type FillStroke struct {
|
||||||
Fill string `xml:"fill,attr,omitempty"`
|
Fill string `xml:"fill,attr,omitempty"`
|
||||||
Stroke string `xml:"stroke,attr,omitempty"`
|
Stroke string `xml:"stroke,attr,omitempty"`
|
||||||
|
StrokeWidth string `xml:"stroke-width,attr,omitempty"`
|
||||||
|
StrokeLinecap string `xml:"stroke-linecap,attr,omitempty"`
|
||||||
|
StrokeLinejoin string `xml:"stroke-linejoin,attr,omitempty"`
|
||||||
}
|
}
|
Loading…
Reference in a new issue