feat: primitive styling
This commit is contained in:
@@ -0,0 +1,119 @@
|
||||
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
|
||||
|
||||
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
|
||||
}
|
||||
}
|
||||
|
||||
type CircleOpt func(*CircleOptions)
|
||||
|
||||
type CircleOptions struct {
|
||||
Priority int
|
||||
StyleID StyleID
|
||||
Override StyleOverride
|
||||
|
||||
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
|
||||
}
|
||||
}
|
||||
|
||||
type LineOpt func(*LineOptions)
|
||||
|
||||
type LineOptions struct {
|
||||
Priority int
|
||||
StyleID StyleID
|
||||
Override StyleOverride
|
||||
|
||||
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
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user