mirror of
https://github.com/cyberarm/cyberarm_engine.git
synced 2025-12-16 13:12:34 +00:00
Implemented Slider (still have some positioning issues to resolve but it works), added files for ListBox, Radio, and EditBox, implemented dragging support in GuiState.
This commit is contained in:
@@ -22,6 +22,11 @@ module CyberarmEngine
|
||||
@mouse_down_on = {}
|
||||
@mouse_down_position = {}
|
||||
@pending_recalculate_request = false
|
||||
|
||||
@tip = CyberarmEngine::Text.new("", size: 22, z: Float::INFINITY)
|
||||
@menu = nil
|
||||
@min_drag_distance = 0
|
||||
@mouse_pos = Vector.new
|
||||
end
|
||||
|
||||
# throws :blur event to focused element and sets GuiState focused element
|
||||
@@ -35,6 +40,15 @@ module CyberarmEngine
|
||||
@focus
|
||||
end
|
||||
|
||||
def draw
|
||||
super
|
||||
|
||||
if @tip.text.length > 0
|
||||
Gosu.draw_rect(@tip.x - 2, @tip.y - 2, @tip.width + 4, @tip.height + 4, 0xff020202, Float::INFINITY)
|
||||
@tip.draw
|
||||
end
|
||||
end
|
||||
|
||||
def update
|
||||
if @pending_recalculate_request
|
||||
@root_container.recalculate
|
||||
@@ -56,12 +70,30 @@ module CyberarmEngine
|
||||
redirect_holding_mouse_button(:middle) if @mouse_over && Gosu.button_down?(Gosu::MsMiddle)
|
||||
redirect_holding_mouse_button(:right) if @mouse_over && Gosu.button_down?(Gosu::MsRight)
|
||||
|
||||
if Vector.new(window.mouse_x, window.mouse_y) == @last_mouse_pos
|
||||
if @mouse_over && (Gosu.milliseconds - @mouse_moved_at) > tool_tip_delay
|
||||
@tip.text = @mouse_over.tip if @mouse_over
|
||||
@tip.x, @tip.y = window.mouse_x - @tip.width / 2, window.mouse_y - @tip.height - 4
|
||||
else
|
||||
@tip.text = ""
|
||||
end
|
||||
else
|
||||
@mouse_moved_at = Gosu.milliseconds
|
||||
end
|
||||
|
||||
@last_mouse_pos = Vector.new(window.mouse_x, window.mouse_y)
|
||||
@mouse_pos = @last_mouse_pos.clone
|
||||
|
||||
request_recalculate if @active_width != window.width || @active_height != window.height
|
||||
|
||||
@active_width = window.width
|
||||
@active_height = window.height
|
||||
end
|
||||
|
||||
def tool_tip_delay
|
||||
500 # ms
|
||||
end
|
||||
|
||||
def button_down(id)
|
||||
super
|
||||
|
||||
@@ -115,12 +147,26 @@ module CyberarmEngine
|
||||
@mouse_over.publish(:"clicked_#{button}_mouse_button", window.mouse_x, window.mouse_y) if @mouse_over == @mouse_down_on[button]
|
||||
end
|
||||
|
||||
if @dragging_element
|
||||
@dragging_element.publish(:end_drag, window.mouse_x, window.mouse_y, button)
|
||||
@dragging_element = nil
|
||||
end
|
||||
|
||||
@mouse_down_position[button] = nil
|
||||
@mouse_down_on[button] = nil
|
||||
end
|
||||
|
||||
def redirect_holding_mouse_button(button)
|
||||
@mouse_over.publish(:"holding_#{button}_mouse_button", window.mouse_x, window.mouse_y) if @mouse_over
|
||||
if !@dragging_element && @mouse_down_on[button] && @mouse_down_on[button].draggable?(button) && @mouse_pos.distance(@mouse_down_position[button]) > @min_drag_distance
|
||||
@dragging_element = @mouse_down_on[button]
|
||||
@dragging_element.publish(:"begin_drag", window.mouse_x, window.mouse_y, button)
|
||||
end
|
||||
|
||||
if @dragging_element
|
||||
@dragging_element.publish(:"drag_update", window.mouse_x, window.mouse_y, button) if @dragging_element
|
||||
else
|
||||
@mouse_over.publish(:"holding_#{button}_mouse_button", window.mouse_x, window.mouse_y) if @mouse_over
|
||||
end
|
||||
end
|
||||
|
||||
def redirect_mouse_wheel(button)
|
||||
|
||||
Reference in New Issue
Block a user