Added (optional) dropshadow for label.
This commit is contained in:
parent
c2e688cc68
commit
46b3357635
31
ui/label.go
31
ui/label.go
@ -1,13 +1,16 @@
|
|||||||
package ui
|
package ui
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"image/color"
|
||||||
|
|
||||||
"opslag.de/schobers/geom"
|
"opslag.de/schobers/geom"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Label struct {
|
type Label struct {
|
||||||
ControlBase
|
ControlBase
|
||||||
|
|
||||||
Text string
|
Text string
|
||||||
|
DropShadow color.Color
|
||||||
|
|
||||||
desired CachedValue
|
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)
|
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) {
|
func (l *Label) Render(ctx Context) {
|
||||||
l.RenderBackground(ctx)
|
l.RenderBackground(ctx)
|
||||||
fontColor := l.TextColor(ctx)
|
fontColor := l.TextColor(ctx)
|
||||||
fontName := l.FontName(ctx)
|
fontName := l.FontName(ctx)
|
||||||
pad := ctx.Style().Dimensions.TextPadding
|
topLeft := l.getLabelTopLeft(ctx)
|
||||||
bounds := l.bounds.Inset(pad)
|
if l.DropShadow != nil {
|
||||||
switch l.TextAlignment {
|
ctx.Fonts().TextAlign(fontName, topLeft.Add2D(1, 1), l.DropShadow, l.Text, 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)
|
|
||||||
}
|
}
|
||||||
|
ctx.Fonts().TextAlign(fontName, topLeft, fontColor, l.Text, l.TextAlignment)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user