Class: RbSDL2::Cursor

Inherits:
Object
  • Object
show all
Defined in:
lib/rb_sdl2/cursor.rb

Defined Under Namespace

Classes: CursorPointer

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(ptr) ⇒ Cursor

Returns a new instance of Cursor.



89
90
91
# File 'lib/rb_sdl2/cursor.rb', line 89

def initialize(ptr)
  @ptr = ptr
end

Class Method Details

.current=(cursor) ⇒ Object

nil を与えた場合デフォルトカーソルが設定されます。



16
17
18
19
20
21
22
23
24
25
# File 'lib/rb_sdl2/cursor.rb', line 16

def current=(cursor)
  @current = if cursor.nil?
               ::SDL.SetCursor(::SDL.GetDefaultCursor) # => nil
             elsif Cursor === cursor
               ::SDL.SetCursor(cursor)
               cursor
             else
               raise TypeError
             end
end

.current?(cursor) ⇒ Boolean

Returns:

  • (Boolean)


27
# File 'lib/rb_sdl2/cursor.rb', line 27

def current?(cursor) = ::SDL.GetCursor == cursor.to_ptr

.hideObject



29
30
31
32
# File 'lib/rb_sdl2/cursor.rb', line 29

def hide
  ::SDL.ShowCursor(::SDL::DISABLE)
  nil
end

.new(obj = nil, hot: nil) ⇒ Object

obj が Surface オブジェクトの時はカラーカーソルを作成します。 その際に hot 引数にカーソルの判定位置を与えることができます。値は [x, y] です。 引数に与えた Surface オブジェクトは SDL 側にコピーされるため呼び出し後に安全に開放できます。 obj が Symbol の時はシステムカーソルを作成します。 Symbol は :arrow, :i_beam, :wait, :crosshair, :wait_arrow, :size_nw_se, :size_ne_sw, :size_we, :sie_ns, :size_all, :no, :hand が指定できます。 obj が nil の場合はデフォルトカーソルを作成します。

Raises:



51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
# File 'lib/rb_sdl2/cursor.rb', line 51

def new(obj = nil, hot: nil)
  ptr = CursorPointer.new(
    case obj
    when Surface
      hot_x, hot_y = hot
      # SDL_CreateColorCursor() は与えられた surface をコピーする。
      # 呼び出し後に引数に与えた surface オブジェクトは安全に開放できる。
      ::SDL.CreateColorCursor(obj, hot_x, hot_y)
    when Symbol
      id = case obj
           when :arrow      then ::SDL::SYSTEM_CURSOR_ARROW
           when :i_beam     then ::SDL::SYSTEM_CURSOR_IBEAM
           when :wait       then ::SDL::SYSTEM_CURSOR_WAIT
           when :crosshair  then ::SDL::SYSTEM_CURSOR_CROSSHAIR
           when :wait_arrow then ::SDL::SYSTEM_CURSOR_WAITARROW
           when :size_nw_se then ::SDL::SYSTEM_CURSOR_SIZENWSE
           when :size_ne_sw then ::SDL::SYSTEM_CURSOR_SIZENESW
           when :size_we    then ::SDL::SYSTEM_CURSOR_SIZEWE
           when :size_ns    then ::SDL::SYSTEM_CURSOR_SIZENS
           when :size_all   then ::SDL::SYSTEM_CURSOR_SIZEALL
           when :no         then ::SDL::SYSTEM_CURSOR_NO
           when :hand       then ::SDL::SYSTEM_CURSOR_HAND
           else raise ArgumentError
           end
      ::SDL.CreateSystemCursor(id)
    when nil
      # SDL 側にあるデフォルトカーソルのポインターを戻す。このポインターはシングルトンである。
      # ポインターを SDL_FreeCursor() へ与えても安全である。SDL 内部では開放されない。
      ::SDL.GetDefaultCursor
    else
      raise ArgumentError
    end
  )
  raise RbSDL2Error if ptr.null?
  super(ptr)
end

.showObject



34
35
36
37
# File 'lib/rb_sdl2/cursor.rb', line 34

def show
  ::SDL.ShowCursor(::SDL::ENABLE)
  nil
end

.shown?Boolean

Returns:

  • (Boolean)


39
# File 'lib/rb_sdl2/cursor.rb', line 39

def shown? = ::SDL.ShowCursor(::SDL::QUERY) == ::SDL::ENABLE

.updateObject

カーソルの再描画を行います。



42
# File 'lib/rb_sdl2/cursor.rb', line 42

def update = ::SDL.SetCursor(nil);

Instance Method Details

#==(other) ⇒ Object



93
94
95
# File 'lib/rb_sdl2/cursor.rb', line 93

def ==(other)
  other.respond_to?(:to_ptr) && other.to_ptr == @ptr
end

#current!Object

自身をカレントカーソルに設定します。カーソルの表示状態は変更されません。



98
# File 'lib/rb_sdl2/cursor.rb', line 98

def current! = Cursor.current = self

#current?Boolean

自身がカレントカーソルの場合に true を戻します。

Returns:

  • (Boolean)


101
# File 'lib/rb_sdl2/cursor.rb', line 101

def current? = Cursor.current?(self)

#hideObject

自身がカレントカーソルの場合のみカーソルを非表示にします。



104
105
106
107
# File 'lib/rb_sdl2/cursor.rb', line 104

def hide
  current? && Cursor.hide
  self
end

#showObject

自身を表示カーソルにします。この時カレントカーソルは自身に設定されています。



110
111
112
113
# File 'lib/rb_sdl2/cursor.rb', line 110

def show
  current! && Cursor.show
  self
end

#shown?Boolean

自身がカレントカーソルの場合かつカーソル表示中の時に true を戻します。

Returns:

  • (Boolean)


116
# File 'lib/rb_sdl2/cursor.rb', line 116

def shown? = current? && Cursor.shown?

#to_ptrObject



118
# File 'lib/rb_sdl2/cursor.rb', line 118

def to_ptr = @ptr