68 lines
2.3 KiB
Go
68 lines
2.3 KiB
Go
// Package raygui - Simple and easy-to-use IMGUI (immediate mode GUI API) library
|
|
|
|
package raygui
|
|
|
|
import (
|
|
rl "github.com/gen2brain/raylib-go/raylib"
|
|
)
|
|
|
|
// GUI controls states
|
|
type ControlState int
|
|
|
|
const (
|
|
Disabled ControlState = iota
|
|
// Normal is the default state for rendering GUI elements.
|
|
Normal
|
|
// Focused indicates the mouse is hovering over the GUI element.
|
|
Focused
|
|
// Pressed indicates the mouse is hovering over the GUI element and LMB is pressed down.
|
|
Pressed
|
|
// Clicked indicates the mouse is hovering over the GUI element and LMB has just been released.
|
|
Clicked
|
|
)
|
|
|
|
// IsColliding will return true if 'point' is within any of the given rectangles.
|
|
func IsInAny(point rl.Vector2, rectangles ...rl.Rectangle) bool {
|
|
for _, rect := range rectangles {
|
|
if rl.CheckCollisionPointRec(point, rect) {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
|
|
// GetInteractionState determines the current state of a control based on mouse position and
|
|
// button states.
|
|
func GetInteractionState(rectangles ...rl.Rectangle) ControlState {
|
|
switch {
|
|
case !IsInAny(rl.GetMousePosition(), rectangles...):
|
|
return Normal
|
|
case rl.IsMouseButtonDown(rl.MouseLeftButton):
|
|
return Pressed
|
|
case rl.IsMouseButtonReleased(rl.MouseLeftButton) || rl.IsMouseButtonPressed(rl.MouseLeftButton):
|
|
return Clicked
|
|
default:
|
|
return Focused
|
|
}
|
|
}
|
|
|
|
// InsetRectangle returns the dimensions of a rectangle inset by a margin within an outer rectangle.
|
|
func InsetRectangle(outer rl.RectangleInt32, inset int32) rl.RectangleInt32 {
|
|
return rl.RectangleInt32{
|
|
X: outer.X + inset, Y: outer.Y + inset,
|
|
Width: outer.Width - 2*inset, Height: outer.Height - 2*inset,
|
|
}
|
|
}
|
|
|
|
// DrawInsetRectangle is a helper to draw a box inset by a margin of an outer container.
|
|
func DrawInsetRectangle(outer rl.RectangleInt32, inset int32, color rl.Color) {
|
|
inside := InsetRectangle(outer, inset)
|
|
rl.DrawRectangle(inside.X, inside.Y, inside.Width, inside.Height, color)
|
|
}
|
|
|
|
// DrawBorderedRectangle is a helper to draw a box with a border around it.
|
|
func DrawBorderedRectangle(bounds rl.RectangleInt32, borderWidth int32, borderColor, insideColor rl.Color) {
|
|
inside := InsetRectangle(bounds, borderWidth)
|
|
rl.DrawRectangle(bounds.X, bounds.Y, bounds.Width, bounds.Height, borderColor)
|
|
rl.DrawRectangle(inside.X, inside.Y, inside.Width, inside.Height, insideColor)
|
|
}
|