lib/cyberarm_engine/ui/elements/slider.rb in cyberarm_engine-0.19.0 vs lib/cyberarm_engine/ui/elements/slider.rb in cyberarm_engine-0.19.1

- old
+ new

@@ -1,104 +1,104 @@ -module CyberarmEngine - class Element - class Slider < Container - class Handle < Button - def initialize(*args) - super(*args) - - event(:begin_drag) - event(:drag_update) - event(:end_drag) - - subscribe :begin_drag do |_sender, x, y, _button| - @drag_start_pos = Vector.new(x, y) - - :handled - end - - subscribe :drag_update do |_sender, x, y, _button| - @parent.handle_dragged_to(x, y) - - :handled - end - - subscribe :end_drag do - @drag_start_pos = nil - - :handled - end - end - - def draggable?(button) - button == :left - end - end - - attr_reader :range, :step_size, :value - - def initialize(options = {}, block = nil) - super(options, block) - - @range = @options[:range] || (0.0..1.0) - @step_size = @options[:step] || 0.1 - @value = @options[:value] || (@range.first + @range.last) / 2 - - @handle = Handle.new("", parent: self, width: 8, height: 1.0) { close } - add(@handle) - end - - def recalculate - _width = dimensional_size(@style.width, :width) - _height = dimensional_size(@style.height, :height) - - @width = _width - @height = _height - - position_handle - @handle.recalculate - @handle.update_background - - update_background - end - - def position_handle - @handle.x = @x + @style.padding_left + @style.border_thickness_left + - ((content_width - @handle.outer_width) * (@value - @range.min) / (@range.max - @range.min).to_f) - - @handle.y = @y + @style.border_thickness_top + @style.padding_top - end - - def draw - super - - @handle.draw - end - - def update - super - - @tip = value.to_s - @handle.tip = @tip - end - - def holding_left_mouse_button(_sender, x, y) - handle_dragged_to(x, y) - - :handled - end - - def handle_dragged_to(x, _y) - @ratio = ((x - @handle.width / 2) - @x) / (content_width - @handle.outer_width) - - self.value = @ratio.clamp(0.0, 1.0) * (@range.max - @range.min) + @range.min - end - - def value=(n) - @value = n - position_handle - @handle.recalculate - - publish(:changed, @value) - end - end - end -end +module CyberarmEngine + class Element + class Slider < Container + class Handle < Button + def initialize(*args) + super(*args) + + event(:begin_drag) + event(:drag_update) + event(:end_drag) + + subscribe :begin_drag do |_sender, x, y, _button| + @drag_start_pos = Vector.new(x, y) + + :handled + end + + subscribe :drag_update do |_sender, x, y, _button| + @parent.handle_dragged_to(x, y) + + :handled + end + + subscribe :end_drag do + @drag_start_pos = nil + + :handled + end + end + + def draggable?(button) + button == :left + end + end + + attr_reader :range, :step_size, :value + + def initialize(options = {}, block = nil) + super(options, block) + + @range = @options[:range] || (0.0..1.0) + @step_size = @options[:step] || 0.1 + @value = @options[:value] || (@range.first + @range.last) / 2 + + @handle = Handle.new("", parent: self, width: 8, height: 1.0) { close } + add(@handle) + end + + def recalculate + _width = dimensional_size(@style.width, :width) + _height = dimensional_size(@style.height, :height) + + @width = _width + @height = _height + + position_handle + @handle.recalculate + @handle.update_background + + update_background + end + + def position_handle + @handle.x = @x + @style.padding_left + @style.border_thickness_left + + ((content_width - @handle.outer_width) * (@value - @range.min) / (@range.max - @range.min).to_f) + + @handle.y = @y + @style.border_thickness_top + @style.padding_top + end + + def draw + super + + @handle.draw + end + + def update + super + + @tip = value.to_s + @handle.tip = @tip + end + + def holding_left_mouse_button(_sender, x, y) + handle_dragged_to(x, y) + + :handled + end + + def handle_dragged_to(x, _y) + @ratio = ((x - @handle.width / 2) - @x) / (content_width - @handle.outer_width) + + self.value = @ratio.clamp(0.0, 1.0) * (@range.max - @range.min) + @range.min + end + + def value=(n) + @value = n + position_handle + @handle.recalculate + + publish(:changed, @value) + end + end + end +end