138 lines
2.6 KiB
Go
138 lines
2.6 KiB
Go
package world
|
|
|
|
// Functional options for primitive creation.
|
|
// Defaults are applied first, then user options override.
|
|
|
|
type PointOpt func(*PointOptions)
|
|
|
|
type PointOptions struct {
|
|
Priority int
|
|
StyleID StyleID
|
|
Override StyleOverride
|
|
|
|
HitSlopPx int
|
|
|
|
hasStyleID bool
|
|
}
|
|
|
|
func defaultPointOptions() PointOptions {
|
|
return PointOptions{
|
|
Priority: DefaultPriorityPoint,
|
|
StyleID: StyleIDDefaultPoint,
|
|
}
|
|
}
|
|
|
|
func PointWithPriority(p int) PointOpt {
|
|
return func(o *PointOptions) {
|
|
o.Priority = p
|
|
}
|
|
}
|
|
|
|
// PointWithStyleID forces the point to use a pre-registered style.
|
|
func PointWithStyleID(id StyleID) PointOpt {
|
|
return func(o *PointOptions) {
|
|
o.StyleID = id
|
|
o.hasStyleID = true
|
|
// Explicit style ID wins over overrides.
|
|
o.Override = StyleOverride{}
|
|
}
|
|
}
|
|
|
|
// PointWithStyleOverride derives a style from default point style and applies overrides.
|
|
// If you also set StyleID, StyleID wins.
|
|
func PointWithStyleOverride(ov StyleOverride) PointOpt {
|
|
return func(o *PointOptions) {
|
|
o.Override = ov
|
|
}
|
|
}
|
|
|
|
func PointWithHitSlopPx(px int) PointOpt {
|
|
return func(o *PointOptions) { o.HitSlopPx = px }
|
|
}
|
|
|
|
type CircleOpt func(*CircleOptions)
|
|
|
|
type CircleOptions struct {
|
|
Priority int
|
|
StyleID StyleID
|
|
Override StyleOverride
|
|
|
|
HitSlopPx int
|
|
|
|
hasStyleID bool
|
|
}
|
|
|
|
func defaultCircleOptions() CircleOptions {
|
|
return CircleOptions{
|
|
Priority: DefaultPriorityCircle,
|
|
StyleID: StyleIDDefaultCircle,
|
|
}
|
|
}
|
|
|
|
func CircleWithPriority(p int) CircleOpt {
|
|
return func(o *CircleOptions) {
|
|
o.Priority = p
|
|
}
|
|
}
|
|
|
|
func CircleWithStyleID(id StyleID) CircleOpt {
|
|
return func(o *CircleOptions) {
|
|
o.StyleID = id
|
|
o.hasStyleID = true
|
|
o.Override = StyleOverride{}
|
|
}
|
|
}
|
|
|
|
func CircleWithStyleOverride(ov StyleOverride) CircleOpt {
|
|
return func(o *CircleOptions) {
|
|
o.Override = ov
|
|
}
|
|
}
|
|
|
|
func CircleWithHitSlopPx(px int) CircleOpt {
|
|
return func(o *CircleOptions) { o.HitSlopPx = px }
|
|
}
|
|
|
|
type LineOpt func(*LineOptions)
|
|
|
|
type LineOptions struct {
|
|
Priority int
|
|
StyleID StyleID
|
|
Override StyleOverride
|
|
|
|
HitSlopPx int
|
|
|
|
hasStyleID bool
|
|
}
|
|
|
|
func defaultLineOptions() LineOptions {
|
|
return LineOptions{
|
|
Priority: DefaultPriorityLine,
|
|
StyleID: StyleIDDefaultLine,
|
|
}
|
|
}
|
|
|
|
func LineWithPriority(p int) LineOpt {
|
|
return func(o *LineOptions) {
|
|
o.Priority = p
|
|
}
|
|
}
|
|
|
|
func LineWithStyleID(id StyleID) LineOpt {
|
|
return func(o *LineOptions) {
|
|
o.StyleID = id
|
|
o.hasStyleID = true
|
|
o.Override = StyleOverride{}
|
|
}
|
|
}
|
|
|
|
func LineWithStyleOverride(ov StyleOverride) LineOpt {
|
|
return func(o *LineOptions) {
|
|
o.Override = ov
|
|
}
|
|
}
|
|
|
|
func LineWithHitSlopPx(px int) LineOpt {
|
|
return func(o *LineOptions) { o.HitSlopPx = px }
|
|
}
|