Sha256: 89240b55a1017709a5532791d6660c1a77e17ef6946e7a3da54015231539bfb2

Contents?: true

Size: 1.96 KB

Versions: 4

Compression:

Stored size: 1.96 KB

Contents

# frozen_string_literal: true

module Vedeu

  module Input

    # Rudimentary support for mouse interactions.
    #
    class Mouse

      # Trigger an event depending on which button was pressed.
      #
      # @param (see #initialize)
      # @return [void]
      def self.click(input)
        new(input).click
      end

      # Returns a new instance of Vedeu::Input::Mouse.
      #
      # @param input [String]
      # @return [Vedeu::Input::Mouse]
      def initialize(input)
        @input = input
      end

      # Trigger an event depending on which button was pressed.
      #
      # @return [void]
      def click
        Vedeu.log(type:    :input,
                  message: "Mouse pressed: '#{button}' " \
                           "(x: #{x}, y: #{y})")

        Vedeu.trigger(:_mouse_event_, input)

        if left_click?
          Vedeu.trigger(:_cursor_reposition_, Vedeu.focus, y, x)

        elsif wheel_up?
          Vedeu.trigger(:_cursor_up_, Vedeu.focus)

        elsif wheel_down?
          Vedeu.trigger(:_cursor_down_, Vedeu.focus)

        else
          Vedeu.log(type:    :input,
                    message: 'Vedeu does not support mouse button ' \
                             "'#{button}' yet.")

          false
        end
      end

      protected

      # @!attribute [r] input
      # @return [String]
      attr_reader :input

      private

      # @return [Fixnum]
      def button
        mouse[0]
      end

      # @return [Array<Fixnum>]
      def mouse
        @_input ||= input.chars[3..-1].map { |character| character.ord - 32 }
      end

      # @return [Boolean]
      def left_click?
        button == 0
      end

      # @return [Boolean]
      def wheel_up?
        button == 64
      end

      # @return [Boolean]
      def wheel_down?
        button == 65
      end

      # @return [Fixnum]
      def x
        mouse[1]
      end

      # @return [Fixnum]
      def y
        mouse[2]
      end

    end # Mouse

  end # Input

end # Vedeu

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
vedeu-0.8.8 lib/vedeu/input/mouse.rb
vedeu-0.8.7 lib/vedeu/input/mouse.rb
vedeu-0.8.6 lib/vedeu/input/mouse.rb
vedeu-0.8.5 lib/vedeu/input/mouse.rb