Added (optional) dropshadow for label.
This commit is contained in:
parent
b1cdbea90f
commit
5babda0ca9
31
ui/label.go
31
ui/label.go
@ -1,13 +1,16 @@
|
||||
package ui
|
||||
|
||||
import (
|
||||
"image/color"
|
||||
|
||||
"opslag.de/schobers/geom"
|
||||
)
|
||||
|
||||
type Label struct {
|
||||
ControlBase
|
||||
|
||||
Text string
|
||||
Text string
|
||||
DropShadow color.Color
|
||||
|
||||
desired CachedValue
|
||||
}
|
||||
@ -37,18 +40,26 @@ func (l *Label) DesiredSize(ctx Context, _ geom.PointF32) geom.PointF32 {
|
||||
return l.desired.GetContext(ctx, l.desiredSize, l.hashDesiredSize).(geom.PointF32)
|
||||
}
|
||||
|
||||
func (l *Label) getLabelTopLeft(ctx Context) geom.PointF32 {
|
||||
pad := ctx.Style().Dimensions.TextPadding
|
||||
bounds := l.bounds.Inset(pad)
|
||||
switch l.TextAlignment {
|
||||
case AlignRight:
|
||||
return geom.PtF32(bounds.Max.X, bounds.Min.Y)
|
||||
case AlignCenter:
|
||||
return geom.PtF32(.5*(bounds.Min.X+bounds.Max.X), bounds.Min.Y)
|
||||
default:
|
||||
return bounds.Min
|
||||
}
|
||||
}
|
||||
|
||||
func (l *Label) Render(ctx Context) {
|
||||
l.RenderBackground(ctx)
|
||||
fontColor := l.TextColor(ctx)
|
||||
fontName := l.FontName(ctx)
|
||||
pad := ctx.Style().Dimensions.TextPadding
|
||||
bounds := l.bounds.Inset(pad)
|
||||
switch l.TextAlignment {
|
||||
case AlignLeft:
|
||||
ctx.Fonts().TextAlign(fontName, bounds.Min, fontColor, l.Text, l.TextAlignment)
|
||||
case AlignRight:
|
||||
ctx.Fonts().TextAlign(fontName, geom.PtF32(bounds.Max.X, bounds.Min.Y), fontColor, l.Text, l.TextAlignment)
|
||||
case AlignCenter:
|
||||
ctx.Fonts().TextAlign(fontName, geom.PtF32(.5*(bounds.Min.X+bounds.Max.X), bounds.Min.Y), fontColor, l.Text, l.TextAlignment)
|
||||
topLeft := l.getLabelTopLeft(ctx)
|
||||
if l.DropShadow != nil {
|
||||
ctx.Fonts().TextAlign(fontName, topLeft.Add2D(1, 1), l.DropShadow, l.Text, l.TextAlignment)
|
||||
}
|
||||
ctx.Fonts().TextAlign(fontName, topLeft, fontColor, l.Text, l.TextAlignment)
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user