149 lines
4.3 KiB
Go
149 lines
4.3 KiB
Go
|
package drawing
|
||
|
|
||
|
import (
|
||
|
"image/color"
|
||
|
|
||
|
"github.com/golang/freetype/truetype"
|
||
|
)
|
||
|
|
||
|
// FillRule defines the type for fill rules
|
||
|
type FillRule int
|
||
|
|
||
|
const (
|
||
|
// FillRuleEvenOdd determines the "insideness" of a point in the shape
|
||
|
// by drawing a ray from that point to infinity in any direction
|
||
|
// and counting the number of path segments from the given shape that the ray crosses.
|
||
|
// If this number is odd, the point is inside; if even, the point is outside.
|
||
|
FillRuleEvenOdd FillRule = iota
|
||
|
// FillRuleWinding determines the "insideness" of a point in the shape
|
||
|
// by drawing a ray from that point to infinity in any direction
|
||
|
// and then examining the places where a segment of the shape crosses the ray.
|
||
|
// Starting with a count of zero, add one each time a path segment crosses
|
||
|
// the ray from left to right and subtract one each time
|
||
|
// a path segment crosses the ray from right to left. After counting the crossings,
|
||
|
// if the result is zero then the point is outside the path. Otherwise, it is inside.
|
||
|
FillRuleWinding
|
||
|
)
|
||
|
|
||
|
// LineCap is the style of line extremities
|
||
|
type LineCap int
|
||
|
|
||
|
const (
|
||
|
// RoundCap defines a rounded shape at the end of the line
|
||
|
RoundCap LineCap = iota
|
||
|
// ButtCap defines a squared shape exactly at the end of the line
|
||
|
ButtCap
|
||
|
// SquareCap defines a squared shape at the end of the line
|
||
|
SquareCap
|
||
|
)
|
||
|
|
||
|
// LineJoin is the style of segments joint
|
||
|
type LineJoin int
|
||
|
|
||
|
const (
|
||
|
// BevelJoin represents cut segments joint
|
||
|
BevelJoin LineJoin = iota
|
||
|
// RoundJoin represents rounded segments joint
|
||
|
RoundJoin
|
||
|
// MiterJoin represents peaker segments joint
|
||
|
MiterJoin
|
||
|
)
|
||
|
|
||
|
// StrokeStyle keeps stroke style attributes
|
||
|
// that is used by the Stroke method of a Drawer
|
||
|
type StrokeStyle struct {
|
||
|
// Color defines the color of stroke
|
||
|
Color color.Color
|
||
|
// Line width
|
||
|
Width float64
|
||
|
// Line cap style rounded, butt or square
|
||
|
LineCap LineCap
|
||
|
// Line join style bevel, round or miter
|
||
|
LineJoin LineJoin
|
||
|
// offset of the first dash
|
||
|
DashOffset float64
|
||
|
// array represented dash length pair values are plain dash and impair are space between dash
|
||
|
// if empty display plain line
|
||
|
Dash []float64
|
||
|
}
|
||
|
|
||
|
// SolidFillStyle define style attributes for a solid fill style
|
||
|
type SolidFillStyle struct {
|
||
|
// Color defines the line color
|
||
|
Color color.Color
|
||
|
// FillRule defines the file rule to used
|
||
|
FillRule FillRule
|
||
|
}
|
||
|
|
||
|
// Valign Vertical Alignment of the text
|
||
|
type Valign int
|
||
|
|
||
|
const (
|
||
|
// ValignTop top align text
|
||
|
ValignTop Valign = iota
|
||
|
// ValignCenter centered text
|
||
|
ValignCenter
|
||
|
// ValignBottom bottom aligned text
|
||
|
ValignBottom
|
||
|
// ValignBaseline align text with the baseline of the font
|
||
|
ValignBaseline
|
||
|
)
|
||
|
|
||
|
// Halign Horizontal Alignment of the text
|
||
|
type Halign int
|
||
|
|
||
|
const (
|
||
|
// HalignLeft Horizontally align to left
|
||
|
HalignLeft = iota
|
||
|
// HalignCenter Horizontally align to center
|
||
|
HalignCenter
|
||
|
// HalignRight Horizontally align to right
|
||
|
HalignRight
|
||
|
)
|
||
|
|
||
|
// TextStyle describe text property
|
||
|
type TextStyle struct {
|
||
|
// Color defines the color of text
|
||
|
Color color.Color
|
||
|
// Size font size
|
||
|
Size float64
|
||
|
// The font to use
|
||
|
Font *truetype.Font
|
||
|
// Horizontal Alignment of the text
|
||
|
Halign Halign
|
||
|
// Vertical Alignment of the text
|
||
|
Valign Valign
|
||
|
}
|
||
|
|
||
|
// ScalingPolicy is a constant to define how to scale an image
|
||
|
type ScalingPolicy int
|
||
|
|
||
|
const (
|
||
|
// ScalingNone no scaling applied
|
||
|
ScalingNone ScalingPolicy = iota
|
||
|
// ScalingStretch the image is stretched so that its width and height are exactly the given width and height
|
||
|
ScalingStretch
|
||
|
// ScalingWidth the image is scaled so that its width is exactly the given width
|
||
|
ScalingWidth
|
||
|
// ScalingHeight the image is scaled so that its height is exactly the given height
|
||
|
ScalingHeight
|
||
|
// ScalingFit the image is scaled to the largest scale that allow the image to fit within a rectangle width x height
|
||
|
ScalingFit
|
||
|
// ScalingSameArea the image is scaled so that its area is exactly the area of the given rectangle width x height
|
||
|
ScalingSameArea
|
||
|
// ScalingFill the image is scaled to the smallest scale that allow the image to fully cover a rectangle width x height
|
||
|
ScalingFill
|
||
|
)
|
||
|
|
||
|
// ImageScaling style attributes used to display the image
|
||
|
type ImageScaling struct {
|
||
|
// Horizontal Alignment of the image
|
||
|
Halign Halign
|
||
|
// Vertical Alignment of the image
|
||
|
Valign Valign
|
||
|
// Width Height used by scaling policy
|
||
|
Width, Height float64
|
||
|
// ScalingPolicy defines the scaling policy to applied to the image
|
||
|
ScalingPolicy ScalingPolicy
|
||
|
}
|