Skip to content

Commit

Permalink
Add option to offset marker labels
Browse files Browse the repository at this point in the history
  • Loading branch information
Anonymous5726221 committed Oct 8, 2021
1 parent 2e6e19a commit dab23f1
Showing 1 changed file with 37 additions and 6 deletions.
43 changes: 37 additions & 6 deletions marker.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,13 @@ import (
// Marker represents a marker on the map
type Marker struct {
MapObject
Position s2.LatLng
Color color.Color
Size float64
Label string
LabelColor color.Color
Position s2.LatLng
Color color.Color
Size float64
Label string
LabelColor color.Color
LabelXOffset float64
LabelYOffset float64
}

// NewMarker creates a new Marker
Expand All @@ -40,6 +42,8 @@ func NewMarker(pos s2.LatLng, col color.Color, size float64) *Marker {
} else {
m.LabelColor = color.RGBA{0xff, 0xff, 0xff, 0xff}
}
m.LabelXOffset = 0.5
m.LabelYOffset = 0.5

return m
}
Expand All @@ -61,13 +65,26 @@ func parseSizeString(s string) (float64, error) {
return 0.0, fmt.Errorf("cannot parse size string: '%s'", s)
}

func ParseLabelOffset(s string) (float64, error) {

// todo: add a way to specify offset with up, down, right, left

if floatValue, err := strconv.ParseFloat(s, 64); err == nil && floatValue > 0 {
return floatValue, nil
}

return 0.5, fmt.Errorf("cannot parse label offset: '%s'", s)
}

// ParseMarkerString parses a string and returns an array of markers
func ParseMarkerString(s string) ([]*Marker, error) {
markers := make([]*Marker, 0)

var markerColor color.Color = color.RGBA{0xff, 0, 0, 0xff}
size := 16.0
label := ""
labelXOffset := 0.5
labelYOffset := 0.5
var labelColor color.Color

for _, ss := range strings.Split(s, "|") {
Expand All @@ -91,6 +108,18 @@ func ParseMarkerString(s string) ([]*Marker, error) {
if err != nil {
return nil, err
}
} else if ok, suffix := hasPrefix(ss, "labelxoffset:"); ok {
var err error
labelXOffset, err = ParseLabelOffset(suffix)
if err != nil {
return nil, err
}
} else if ok, suffix := hasPrefix(ss, "labelyoffset:"); ok {
var err error
labelYOffset, err = ParseLabelOffset(suffix)
if err != nil {
return nil, err
}
} else {
lat, lng, err := coordsparser.Parse(ss)
if err != nil {
Expand All @@ -101,6 +130,8 @@ func ParseMarkerString(s string) ([]*Marker, error) {
if labelColor != nil {
m.SetLabelColor(labelColor)
}
m.LabelXOffset = labelXOffset
m.LabelYOffset = labelYOffset
markers = append(markers, m)
}
}
Expand Down Expand Up @@ -147,6 +178,6 @@ func (m *Marker) Draw(gc *gg.Context, trans *Transformer) {

if m.Label != "" {
gc.SetColor(m.LabelColor)
gc.DrawStringAnchored(m.Label, x, y-m.Size, 0.5, 0.5)
gc.DrawStringAnchored(m.Label, x, y-m.Size, m.LabelXOffset, m.LabelYOffset)
}
}

0 comments on commit dab23f1

Please sign in to comment.