This repository has been archived on 2023-08-08. You can view files and clone it, but cannot push or open issues or pull requests.
tomo-old/elements/basic/label.go

77 lines
1.7 KiB
Go
Raw Normal View History

2023-01-09 06:03:19 +00:00
package basic
import "image"
import "git.tebibyte.media/sashakoshka/tomo"
import "git.tebibyte.media/sashakoshka/tomo/theme"
import "git.tebibyte.media/sashakoshka/tomo/artist"
2023-01-10 02:25:11 +00:00
import "git.tebibyte.media/sashakoshka/tomo/elements/core"
2023-01-09 06:03:19 +00:00
type Label struct {
2023-01-10 02:25:11 +00:00
*core.Core
core core.CoreControl
2023-01-09 20:14:36 +00:00
2023-01-09 06:03:19 +00:00
text string
drawer artist.TextDrawer
}
func NewLabel (text string) (element *Label) {
element = &Label { }
2023-01-10 02:25:11 +00:00
element.Core, element.core = core.NewCore(element)
2023-01-09 06:03:19 +00:00
face := theme.FontFaceRegular()
element.drawer.SetFace(face)
element.SetText(text)
metrics := face.Metrics()
emspace, _ := face.GlyphAdvance('M')
intEmspace := emspace.Round()
if intEmspace < 1 { intEmspace = theme.Padding()}
element.core.SetMinimumSize(intEmspace, metrics.Height.Round())
return
}
func (element *Label) Handle (event tomo.Event) {
switch event.(type) {
case tomo.EventResize:
resizeEvent := event.(tomo.EventResize)
element.core.AllocateCanvas (
resizeEvent.Width,
resizeEvent.Height)
element.drawer.SetMaxWidth (resizeEvent.Width)
element.drawer.SetMaxHeight(resizeEvent.Height)
element.draw()
}
return
}
func (element *Label) SetText (text string) {
if element.text == text { return }
element.text = text
element.drawer.SetText(text)
if element.core.HasImage () {
element.draw()
element.core.PushAll()
}
}
2023-01-09 20:14:36 +00:00
func (element *Label) AdvanceSelection (direction int) (ok bool) {
2023-01-09 06:03:19 +00:00
return
}
func (element *Label) draw () {
bounds := element.core.Bounds()
artist.Rectangle (
element.core,
theme.BackgroundImage(),
nil, 0,
bounds)
textBounds := element.drawer.LayoutBounds()
foreground := theme.ForegroundImage()
element.drawer.Draw (element.core, foreground, image.Point {
X: 0 - textBounds.Min.X,
Y: 0 - textBounds.Min.Y,
})
}