mirror of
https://github.com/OpenDiablo2/OpenDiablo2
synced 2024-07-18 11:14:14 -04:00
* First improvements Signed-off-by: William Claude <w.claude@thebeat.co> * Make the menu more generic Signed-off-by: William Claude <w.claude@thebeat.co> * Handle mouse events Signed-off-by: William Claude <w.claude@thebeat.co> * Remove debug statement Signed-off-by: William Claude <w.claude@thebeat.co> * Handle left clicks better Signed-off-by: William Claude <w.claude@thebeat.co> * Remove unused file Signed-off-by: William Claude <w.claude@thebeat.co> * Handle titles in screens Signed-off-by: William Claude <w.claude@thebeat.co> * Improve the menu using layouts Signed-off-by: William Claude <w.claude@thebeat.co> * Add support for onOff labels Signed-off-by: William Claude <w.claude@thebeat.co> * Mutualise title creation Signed-off-by: William Claude <w.claude@thebeat.co> * Add gutter and mutualise things Signed-off-by: William Claude <w.claude@thebeat.co> * Improve menu, mutualise a lot of things and support animated sprites Signed-off-by: William Claude <w.claude@thebeat.co> * Use a cfg struct instead of independent handlers Signed-off-by: William Claude <w.claude@thebeat.co> * Fix hardcoded value Signed-off-by: William Claude <w.claude@thebeat.co> * Clean things a bit Signed-off-by: William Claude <w.claude@thebeat.co> * Remove unused property Signed-off-by: William Claude <w.claude@thebeat.co> * First support for hoverable elements Signed-off-by: William Claude <w.claude@thebeat.co> * Add support for label selection feedback Signed-off-by: William Claude <w.claude@thebeat.co> * Add support options Signed-off-by: William Claude <w.claude@thebeat.co> * Update print statement Signed-off-by: William Claude <w.claude@thebeat.co> * Update rendering and clean code Signed-off-by: William Claude <w.claude@thebeat.co> * Remove debug things Signed-off-by: William Claude <w.claude@thebeat.co> * Handle hovering Signed-off-by: William Claude <w.claude@thebeat.co> * Support enter key for labels Signed-off-by: William Claude <w.claude@thebeat.co> * Attach methods to layout Signed-off-by: William Claude <w.claude@thebeat.co> * Move things under EscapeMenu Signed-off-by: William Claude <w.claude@thebeat.co> * Some renaming Signed-off-by: William Claude <w.claude@thebeat.co> * Clean Signed-off-by: William Claude <w.claude@thebeat.co> * Set hovered element ID when using the mouse Signed-off-by: William Claude <w.claude@thebeat.co> * Clean Signed-off-by: William Claude <w.claude@thebeat.co> * Delete unused file Signed-off-by: William Claude <w.claude@thebeat.co> * Wire save & exit with a nasty hack Signed-off-by: William Claude <w.claude@thebeat.co> * Remove unused file Signed-off-by: William Claude <w.claude@thebeat.co> * Remove dead code Signed-off-by: William Claude <w.claude@thebeat.co> * Reorder the code a bit Signed-off-by: William Claude <w.claude@thebeat.co> * Rename hoverableElement into actionableElement Signed-off-by: William Claude <w.claude@thebeat.co> * Prevent regenerating the label if the text didn't change Signed-off-by: William Claude <w.claude@thebeat.co>
160 lines
3.1 KiB
Go
160 lines
3.1 KiB
Go
package d2gui
|
|
|
|
import (
|
|
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2input"
|
|
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2render"
|
|
)
|
|
|
|
type MouseHandler func(d2input.MouseEvent)
|
|
type MouseMoveHandler func(d2input.MouseMoveEvent)
|
|
|
|
type widget interface {
|
|
render(target d2render.Surface) error
|
|
advance(elapsed float64) error
|
|
|
|
onMouseMove(event d2input.MouseMoveEvent) bool
|
|
onMouseEnter(event d2input.MouseMoveEvent) bool
|
|
onMouseLeave(event d2input.MouseMoveEvent) bool
|
|
onMouseOver(event d2input.MouseMoveEvent) bool
|
|
onMouseButtonDown(event d2input.MouseEvent) bool
|
|
onMouseButtonUp(event d2input.MouseEvent) bool
|
|
onMouseButtonClick(event d2input.MouseEvent) bool
|
|
|
|
getPosition() (int, int)
|
|
getOffset() (int, int)
|
|
setOffset(x, y int)
|
|
getSize() (int, int)
|
|
getLayer() int
|
|
isVisible() bool
|
|
isExpanding() bool
|
|
}
|
|
|
|
type widgetBase struct {
|
|
x int
|
|
y int
|
|
layer int
|
|
visible bool
|
|
expanding bool
|
|
|
|
offsetX int
|
|
offsetY int
|
|
|
|
mouseEnterHandler MouseMoveHandler
|
|
mouseLeaveHandler MouseMoveHandler
|
|
mouseClickHandler MouseHandler
|
|
}
|
|
|
|
func (w *widgetBase) SetPosition(x, y int) {
|
|
w.x = x
|
|
w.y = y
|
|
}
|
|
|
|
func (w *widgetBase) GetPosition() (int, int) {
|
|
return w.x, w.y
|
|
}
|
|
|
|
func (w *widgetBase) GetOffset() (int, int) {
|
|
return w.offsetX, w.offsetY
|
|
}
|
|
|
|
func (w *widgetBase) getOffset() (int, int) {
|
|
return w.offsetX, w.offsetY
|
|
}
|
|
|
|
func (w *widgetBase) setOffset(x, y int) {
|
|
w.offsetX = x
|
|
w.offsetY = y
|
|
}
|
|
|
|
func (w *widgetBase) SetLayer(layer int) {
|
|
w.layer = layer
|
|
}
|
|
|
|
func (w *widgetBase) SetVisible(visible bool) {
|
|
w.visible = visible
|
|
}
|
|
|
|
func (w *widgetBase) SetExpanding(expanding bool) {
|
|
w.expanding = expanding
|
|
}
|
|
|
|
func (w *widgetBase) SetMouseEnterHandler(handler MouseMoveHandler) {
|
|
w.mouseEnterHandler = handler
|
|
}
|
|
|
|
func (w *widgetBase) SetMouseLeaveHandler(handler MouseMoveHandler) {
|
|
w.mouseLeaveHandler = handler
|
|
}
|
|
|
|
func (w *widgetBase) SetMouseClickHandler(handler MouseHandler) {
|
|
w.mouseClickHandler = handler
|
|
}
|
|
|
|
func (w *widgetBase) getPosition() (int, int) {
|
|
return w.x, w.y
|
|
}
|
|
|
|
func (w *widgetBase) getSize() (int, int) {
|
|
return 0, 0
|
|
}
|
|
|
|
func (w *widgetBase) getLayer() int {
|
|
return w.layer
|
|
}
|
|
|
|
func (w *widgetBase) isVisible() bool {
|
|
return w.visible
|
|
}
|
|
|
|
func (w *widgetBase) isExpanding() bool {
|
|
return w.expanding
|
|
}
|
|
|
|
func (w *widgetBase) render(target d2render.Surface) error {
|
|
return nil
|
|
}
|
|
|
|
func (w *widgetBase) advance(elapsed float64) error {
|
|
return nil
|
|
}
|
|
|
|
func (w *widgetBase) onMouseEnter(event d2input.MouseMoveEvent) bool {
|
|
if w.mouseEnterHandler != nil {
|
|
w.mouseEnterHandler(event)
|
|
}
|
|
|
|
return false
|
|
}
|
|
|
|
func (w *widgetBase) onMouseLeave(event d2input.MouseMoveEvent) bool {
|
|
if w.mouseLeaveHandler != nil {
|
|
w.mouseLeaveHandler(event)
|
|
}
|
|
|
|
return false
|
|
}
|
|
|
|
func (w *widgetBase) onMouseButtonClick(event d2input.MouseEvent) bool {
|
|
if w.mouseClickHandler != nil {
|
|
w.mouseClickHandler(event)
|
|
}
|
|
|
|
return false
|
|
}
|
|
|
|
func (w *widgetBase) onMouseMove(event d2input.MouseMoveEvent) bool {
|
|
return false
|
|
}
|
|
|
|
func (w *widgetBase) onMouseOver(event d2input.MouseMoveEvent) bool {
|
|
return false
|
|
}
|
|
|
|
func (w *widgetBase) onMouseButtonDown(event d2input.MouseEvent) bool {
|
|
return false
|
|
}
|
|
|
|
func (w *widgetBase) onMouseButtonUp(event d2input.MouseEvent) bool {
|
|
return false
|
|
}
|