class RbSDL2::Window::HitTest

Constants

HIT_TEST_RESULT

Public Class Methods

callback_set(window, obj, userdata = nil) click to toggle source
# File lib/rb_sdl2/window/hit_test.rb, line 8
def callback_set(window, obj, userdata = nil)
  func = if Proc === obj
           new(&obj)
         else
           obj
         end
  @mutex.synchronize do
    err = ::SDL2.SDL_SetWindowHitTest(window, func, userdata)
    raise RbSDL2Error if err < 0
    id = window.id
    if obj
      @callbacks[id] = [func, userdata]
    else
      @callbacks.delete(id)
    end
  end
  [obj, userdata]
end
new(&block) click to toggle source
Calls superclass method
# File lib/rb_sdl2/window/hit_test.rb, line 41
def initialize(&block)
  # typedef SDL_HitTestResult (*SDL_HitTest)(SDL_Window *win,
  #                                          const SDL_Point *area, void *data);
  super(:int, [:pointer, :pointer, :pointer]) do |win, area, _data|
    # コールバック実行終了を OS が待つようなので、与えらえた window ポインターは有効なものとしてよいだろう。
    # area には SDL_Point のアドレスが入る。SDL_Point は x, y の2つの int 型メンバーである。
    HIT_TEST_RESULT[yield(Window.to_ptr(win), ::SDL2::SDL_Point.new(area).values)]
  end
end