Sha256: 904c03f45592aa68d9c59758c04e5c7bcbee4746f3dcb718541169d9f7bd0cbd

Contents?: true

Size: 1.54 KB

Versions: 2

Compression:

Stored size: 1.54 KB

Contents

module CyberarmEngine
  class Element
    class ToggleButton < Button
      attr_reader :toggled, :value

      def initialize(options, block = nil)
        if options.dig(:theme, :ToggleButton, :checkmark_image)
          options[:theme][:ToggleButton][:image_width] ||= options[:theme][:TextBlock][:text_size]
          super(get_image(options.dig(:theme, :ToggleButton, :checkmark_image)), options, block)
        else
          super(options[:checkmark], options, block)
        end

        @value = options[:checked] || false

        if @value
          @raw_text = @options[:checkmark]
        else
          @raw_text = ""
        end
      end

      def clicked_left_mouse_button(_sender, _x, _y)
        self.value = !@value

        @block.call(self) if @block

        :handled
      end

      def render
        if @image
          draw_image if @value
        else
          draw_text
        end
      end

      def recalculate
        super
        return if @image

        _width  = dimensional_size(@style.width,  :width)
        _height = dimensional_size(@style.height, :height)

        @width  = _width  || @text.textobject.text_width(@options[:checkmark])
        @height = _height || @text.height

        update_background
      end

      def value=(boolean)
        @value = boolean

        if boolean
          @raw_text = @options[:checkmark]
        else
          @raw_text = ""
        end

        recalculate

        publish(:changed, @value)
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
cyberarm_engine-0.24.4 lib/cyberarm_engine/ui/elements/toggle_button.rb
cyberarm_engine-0.24.3 lib/cyberarm_engine/ui/elements/toggle_button.rb