Module: MiniGL::Mouse

Defined in:
lib/minigl/global.rb

Overview

Exposes methods for controlling mouse events.

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.xObject (readonly)

The current x-coordinate of the mouse cursor in the screen.



362
363
364
# File 'lib/minigl/global.rb', line 362

def x
  @x
end

.yObject (readonly)

The current y-coordinate of the mouse cursor in the screen.



365
366
367
# File 'lib/minigl/global.rb', line 365

def y
  @y
end

Class Method Details

.button_down?(btn) ⇒ Boolean

Returns whether the given button is down in the current frame.

Parameters:

btn

Button to be checked. Valid values are :left, :middle and :right

Returns:

  • (Boolean)


418
419
420
# File 'lib/minigl/global.rb', line 418

def button_down?(btn)
  @down[btn]
end

.button_pressed?(btn) ⇒ Boolean

Returns whether the given button is down in the current frame and was not down in the frame before.

Parameters:

btn

Button to be checked. Valid values are :left, :middle and :right

Returns:

  • (Boolean)


409
410
411
# File 'lib/minigl/global.rb', line 409

def button_pressed?(btn)
  @down[btn] and not @prev_down[btn]
end

.button_released?(btn) ⇒ Boolean

Returns whether the given button is not down in the current frame, but was down in the frame before.

Parameters:

btn

Button to be checked. Valid values are :left, :middle and :right

Returns:

  • (Boolean)


428
429
430
# File 'lib/minigl/global.rb', line 428

def button_released?(btn)
  @prev_down[btn] and not @down[btn]
end

.double_click?(btn) ⇒ Boolean

Returns whether the given button has just been double clicked.

Parameters:

btn

Button to be checked. Valid values are :left, :middle and :right

Returns:

  • (Boolean)


437
438
439
# File 'lib/minigl/global.rb', line 437

def double_click?(btn)
  @dbl_click[btn]
end

.initializeObject

This is called by GameWindow.initialize. Don’t call it explicitly.



369
370
371
372
373
374
# File 'lib/minigl/global.rb', line 369

def initialize
  @down = {}
  @prev_down = {}
  @dbl_click = {}
  @dbl_click_timer = {}
end

.over?(x, y = nil, w = nil, h = nil) ⇒ Boolean

Returns whether the mouse cursor is currently inside the given area.

Parameters:

x

The x-coordinate of the top left corner of the area.

y

The y-coordinate of the top left corner of the area.

w

The width of the area.

h

The height of the area.

Alternate syntax

over?(rectangle)

Parameters:

rectangle

A rectangle representing the area to be checked.

Returns:

  • (Boolean)


455
456
457
458
# File 'lib/minigl/global.rb', line 455

def over?(x, y = nil, w = nil, h = nil)
  return @x >= x.x && @x < x.x + x.w && @y >= x.y && @y < x.y + x.h if x.is_a? Rectangle
  @x >= x && @x < x + w && @y >= y && @y < y + h
end

.updateObject

Updates the mouse position and the state of all buttons.



377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
# File 'lib/minigl/global.rb', line 377

def update
  @prev_down = @down.clone
  @down.clear
  @dbl_click.clear

  @dbl_click_timer.each do |k, v|
    if v < G.double_click_delay; @dbl_click_timer[k] += 1
    else; @dbl_click_timer.delete k; end
  end

  k1 = [Gosu::MsLeft, Gosu::MsMiddle, Gosu::MsRight]
  k2 = [:left, :middle, :right]
  (0..2).each do |i|
    if G.window.button_down? k1[i]
      @down[k2[i]] = true
      @dbl_click[k2[i]] = true if @dbl_click_timer[k2[i]]
      @dbl_click_timer.delete k2[i]
    elsif @prev_down[k2[i]]
      @dbl_click_timer[k2[i]] = 0
    end
  end

  @x = G.window.mouse_x.round
  @y = G.window.mouse_y.round
end