package ui import rl "github.com/gen2brain/raylib-go/raylib" var defaultLabelPadding float32 = 5 var defaultLabelRoundness float32 = 0.2 // If the text formation formula is applied without it the text is // overlowing on the right due to rounding errors const overflowMultiplyer float32 = 1.1 var defaultLabelStyle = &Style{ BacgroundColor: &rl.LightGray, FontColor: &rl.DarkGray, Padding: &defaultLabelPadding, Roundness: &defaultLabelRoundness , } type Label struct { WidthWeight float32 Text string Style Style } func (base *Label) Init(*Menu) { base.Style.FillMissing(defaultLabelStyle) if base.WidthWeight == 0 { base.WidthWeight = 1 } } func (base *Label) Destroy() { } func (base *Label) Draw(position *rl.Rectangle) { // rl.TraceLog(rl.LogInfo, "Drawn at %v/%v/%v/%v", position.X, position.Y, position.Width, position.Height) rl.DrawRectangleRounded(*position, *base.Style.Roundness, 0, // Assume the segments param is always 0 - it doesn't really matter without a border *base.Style.BacgroundColor) rl.DrawText(base.Text, int32(position.X+*base.Style.Padding), int32(position.Y+*base.Style.Padding), base.getTextHeight(position), *base.Style.FontColor) } func (base *Label) GetOccupationWeight() float32 { return base.WidthWeight } // Returns the size of the text that will not overflow in the side func (base *Label) getTextHeight(position *rl.Rectangle) int32 { var width = position.Width - 2 * *base.Style.Padding var outp = position.Height - 2 * *base.Style.Padding var maxWidthSize = rl.MeasureText(base.Text, int32(outp)) if maxWidthSize > int32(width) { outp /= (float32(maxWidthSize) / width) * overflowMultiplyer } return int32(outp) }