Class: Mittsu::GLFW::Window
- Inherits:
-
Object
- Object
- Mittsu::GLFW::Window
- Defined in:
- lib/mittsu/renderers/glfw_window.rb
Instance Attribute Summary collapse
-
#char_input_handler ⇒ Object
Returns the value of attribute char_input_handler.
-
#cursor_pos_handler ⇒ Object
Returns the value of attribute cursor_pos_handler.
-
#framebuffer_size_handler ⇒ Object
Returns the value of attribute framebuffer_size_handler.
-
#key_press_handler ⇒ Object
Returns the value of attribute key_press_handler.
-
#key_release_handler ⇒ Object
Returns the value of attribute key_release_handler.
-
#key_repeat_handler ⇒ Object
Returns the value of attribute key_repeat_handler.
-
#mouse_button_press_handler ⇒ Object
Returns the value of attribute mouse_button_press_handler.
-
#mouse_button_release_handler ⇒ Object
Returns the value of attribute mouse_button_release_handler.
-
#scroll_handler ⇒ Object
Returns the value of attribute scroll_handler.
Instance Method Summary collapse
- #framebuffer_size ⇒ Object
-
#initialize(width, height, title, antialias: 0) ⇒ Window
constructor
A new instance of Window.
- #joystick_axes(joystick = GLFW_JOYSTICK_1) ⇒ Object
- #joystick_button_down?(button, joystick = GLFW_JOYSTICK_1) ⇒ Boolean
- #joystick_buttons(joystick = GLFW_JOYSTICK_1) ⇒ Object
- #joystick_name(joystick = GLFW_JOYSTICK_1) ⇒ Object
- #joystick_present?(joystick = GLFW_JOYSTICK_1) ⇒ Boolean
- #key_down?(key) ⇒ Boolean
- #mouse_button_down?(button) ⇒ Boolean
- #mouse_position ⇒ Object
- #on_character_input(&block) ⇒ Object
- #on_joystick_button_pressed(&block) ⇒ Object
- #on_joystick_button_released(&block) ⇒ Object
- #on_key_pressed(&block) ⇒ Object
- #on_key_released(&block) ⇒ Object
- #on_key_typed(&block) ⇒ Object
- #on_mouse_button_pressed(&block) ⇒ Object
- #on_mouse_button_released(&block) ⇒ Object
- #on_mouse_move(&block) ⇒ Object
- #on_resize(&block) ⇒ Object
- #on_scroll(&block) ⇒ Object
- #run ⇒ Object
- #set_mouselock(value) ⇒ Object
Constructor Details
#initialize(width, height, title, antialias: 0) ⇒ Window
Returns a new instance of Window.
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 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 |
# File 'lib/mittsu/renderers/glfw_window.rb', line 16 def initialize(width, height, title, antialias: 0) glfwInit glfwWindowHint GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE glfwWindowHint GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE glfwWindowHint GLFW_CONTEXT_VERSION_MAJOR, 3 glfwWindowHint GLFW_CONTEXT_VERSION_MINOR, 3 glfwWindowHint GLFW_CONTEXT_REVISION, 0 if antialias > 0 glfwWindowHint GLFW_SAMPLES, antialias end @width, @height, @title = width, height, title @handle = glfwCreateWindow(@width, @height, @title, nil, nil) if @handle.null? raise "Unable to create window." end glfwMakeContextCurrent @handle glfwSwapInterval 1 this = self @key_callback = ::GLFW::create_callback(:GLFWkeyfun) do |window_handle, key, scancode, action, mods| if action == GLFW_PRESS this.key_press_handler.call(key) unless this.key_press_handler.nil? this.key_repeat_handler.call(key) unless this.key_repeat_handler.nil? elsif action == GLFW_RELEASE this.key_release_handler.call(key) unless this.key_release_handler.nil? elsif action == GLFW_REPEAT this.key_repeat_handler.call(key) unless this.key_repeat_handler.nil? end end glfwSetKeyCallback(@handle, @key_callback) @char_callback = ::GLFW::create_callback(:GLFWcharfun) do |window_handle, codepoint| char = [codepoint].pack('U') this.char_input_handler.call(char) unless this.char_input_handler.nil? end glfwSetCharCallback(@handle, @char_callback) @cursor_pos_callback = ::GLFW::create_callback(:GLFWcursorposfun) do |window_handle, xpos, ypos| this.cursor_pos_handler.call(Vector2.new(xpos, ypos)) unless this.cursor_pos_handler.nil? end glfwSetCursorPosCallback(@handle, @cursor_pos_callback) @mouse_button_callback = ::GLFW::create_callback(:GLFWmousebuttonfun) do |window_handle, , action, mods| mpos = this.mouse_position if action == GLFW_PRESS this..call(, mpos) unless this..nil? elsif action == GLFW_RELEASE this..call(, mpos) unless this..nil? end end glfwSetMouseButtonCallback(@handle, @mouse_button_callback) @scroll_callback = ::GLFW::create_callback(:GLFWscrollfun) do |window_handle, xoffset, yoffset| this.scroll_handler.call(Vector2.new(xoffset, yoffset)) unless this.scroll_handler.nil? end glfwSetScrollCallback(@handle, @scroll_callback) @frabuffer_size_callback = ::GLFW::create_callback(:GLFWframebuffersizefun) do |window_handle, new_width, new_height| this.framebuffer_size_handler.call(new_width, new_height) unless this.framebuffer_size_handler.nil? end glfwSetFramebufferSizeCallback(@handle, @frabuffer_size_callback) @joystick_buttons = end |
Instance Attribute Details
#char_input_handler ⇒ Object
Returns the value of attribute char_input_handler.
14 15 16 |
# File 'lib/mittsu/renderers/glfw_window.rb', line 14 def char_input_handler @char_input_handler end |
#cursor_pos_handler ⇒ Object
Returns the value of attribute cursor_pos_handler.
14 15 16 |
# File 'lib/mittsu/renderers/glfw_window.rb', line 14 def cursor_pos_handler @cursor_pos_handler end |
#framebuffer_size_handler ⇒ Object
Returns the value of attribute framebuffer_size_handler.
14 15 16 |
# File 'lib/mittsu/renderers/glfw_window.rb', line 14 def framebuffer_size_handler @framebuffer_size_handler end |
#key_press_handler ⇒ Object
Returns the value of attribute key_press_handler.
14 15 16 |
# File 'lib/mittsu/renderers/glfw_window.rb', line 14 def key_press_handler @key_press_handler end |
#key_release_handler ⇒ Object
Returns the value of attribute key_release_handler.
14 15 16 |
# File 'lib/mittsu/renderers/glfw_window.rb', line 14 def key_release_handler @key_release_handler end |
#key_repeat_handler ⇒ Object
Returns the value of attribute key_repeat_handler.
14 15 16 |
# File 'lib/mittsu/renderers/glfw_window.rb', line 14 def key_repeat_handler @key_repeat_handler end |
#mouse_button_press_handler ⇒ Object
Returns the value of attribute mouse_button_press_handler.
14 15 16 |
# File 'lib/mittsu/renderers/glfw_window.rb', line 14 def @mouse_button_press_handler end |
#mouse_button_release_handler ⇒ Object
Returns the value of attribute mouse_button_release_handler.
14 15 16 |
# File 'lib/mittsu/renderers/glfw_window.rb', line 14 def @mouse_button_release_handler end |
#scroll_handler ⇒ Object
Returns the value of attribute scroll_handler.
14 15 16 |
# File 'lib/mittsu/renderers/glfw_window.rb', line 14 def scroll_handler @scroll_handler end |
Instance Method Details
#framebuffer_size ⇒ Object
96 97 98 99 100 |
# File 'lib/mittsu/renderers/glfw_window.rb', line 96 def framebuffer_size width, height = ' '*8, ' '*8 glfwGetFramebufferSize(@handle, width, height) [width.unpack('L')[0], height.unpack('L')[0]] end |
#joystick_axes(joystick = GLFW_JOYSTICK_1) ⇒ Object
157 158 159 160 161 162 163 |
# File 'lib/mittsu/renderers/glfw_window.rb', line 157 def joystick_axes(joystick = GLFW_JOYSTICK_1) return [] unless joystick_present?(joystick) count = ' ' * 4 array = glfwGetJoystickAxes(joystick, count) count = count.unpack('l')[0] array[0, count * 4].unpack('f' * count) end |
#joystick_button_down?(button, joystick = GLFW_JOYSTICK_1) ⇒ Boolean
177 178 179 |
# File 'lib/mittsu/renderers/glfw_window.rb', line 177 def (, joystick = GLFW_JOYSTICK_1) @joystick_buttons[joystick][] end |
#joystick_buttons(joystick = GLFW_JOYSTICK_1) ⇒ Object
152 153 154 155 |
# File 'lib/mittsu/renderers/glfw_window.rb', line 152 def (joystick = GLFW_JOYSTICK_1) @joystick_buttons = @joystick_buttons[joystick] end |
#joystick_name(joystick = GLFW_JOYSTICK_1) ⇒ Object
181 182 183 |
# File 'lib/mittsu/renderers/glfw_window.rb', line 181 def joystick_name(joystick = GLFW_JOYSTICK_1) glfwGetJoystickName(joystick) end |
#joystick_present?(joystick = GLFW_JOYSTICK_1) ⇒ Boolean
173 174 175 |
# File 'lib/mittsu/renderers/glfw_window.rb', line 173 def joystick_present?(joystick = GLFW_JOYSTICK_1) glfwJoystickPresent(joystick).nonzero? end |
#key_down?(key) ⇒ Boolean
114 115 116 |
# File 'lib/mittsu/renderers/glfw_window.rb', line 114 def key_down?(key) glfwGetKey(@handle, key) == GLFW_PRESS end |
#mouse_button_down?(button) ⇒ Boolean
140 141 142 |
# File 'lib/mittsu/renderers/glfw_window.rb', line 140 def () glfwGetMouseButton(@handle, ) == GLFW_PRESS end |
#mouse_position ⇒ Object
134 135 136 137 138 |
# File 'lib/mittsu/renderers/glfw_window.rb', line 134 def mouse_position xpos, ypos = ' '*8, ' '*8 glfwGetCursorPos(@handle, xpos, ypos); Vector2.new(xpos.unpack('D')[0], ypos.unpack('D')[0]) end |
#on_character_input(&block) ⇒ Object
118 119 120 |
# File 'lib/mittsu/renderers/glfw_window.rb', line 118 def on_character_input &block @char_input_handler = block end |
#on_joystick_button_pressed(&block) ⇒ Object
165 166 167 |
# File 'lib/mittsu/renderers/glfw_window.rb', line 165 def &block @joystick_button_press_handler = block end |
#on_joystick_button_released(&block) ⇒ Object
169 170 171 |
# File 'lib/mittsu/renderers/glfw_window.rb', line 169 def &block @joystick_button_release_handler = block end |
#on_key_pressed(&block) ⇒ Object
102 103 104 |
# File 'lib/mittsu/renderers/glfw_window.rb', line 102 def on_key_pressed &block @key_press_handler = block end |
#on_key_released(&block) ⇒ Object
106 107 108 |
# File 'lib/mittsu/renderers/glfw_window.rb', line 106 def on_key_released &block @key_release_handler = block end |
#on_key_typed(&block) ⇒ Object
110 111 112 |
# File 'lib/mittsu/renderers/glfw_window.rb', line 110 def on_key_typed &block @key_repeat_handler = block end |
#on_mouse_button_pressed(&block) ⇒ Object
126 127 128 |
# File 'lib/mittsu/renderers/glfw_window.rb', line 126 def &block @mouse_button_press_handler = block end |
#on_mouse_button_released(&block) ⇒ Object
130 131 132 |
# File 'lib/mittsu/renderers/glfw_window.rb', line 130 def &block @mouse_button_release_handler = block end |
#on_mouse_move(&block) ⇒ Object
122 123 124 |
# File 'lib/mittsu/renderers/glfw_window.rb', line 122 def on_mouse_move &block @cursor_pos_handler = block end |
#on_resize(&block) ⇒ Object
148 149 150 |
# File 'lib/mittsu/renderers/glfw_window.rb', line 148 def on_resize &block @framebuffer_size_handler = block end |
#on_scroll(&block) ⇒ Object
144 145 146 |
# File 'lib/mittsu/renderers/glfw_window.rb', line 144 def on_scroll &block @scroll_handler = block end |
#run ⇒ Object
84 85 86 87 88 89 90 91 92 93 94 |
# File 'lib/mittsu/renderers/glfw_window.rb', line 84 def run while glfwWindowShouldClose(@handle) == 0 yield glfwSwapBuffers @handle glfwPollEvents poll_joystick_events end glfwDestroyWindow @handle glfwTerminate end |
#set_mouselock(value) ⇒ Object
185 186 187 188 189 190 191 |
# File 'lib/mittsu/renderers/glfw_window.rb', line 185 def set_mouselock(value) if value glfwSetInputMode(@handle, GLFW_CURSOR, GLFW_CURSOR_DISABLED) else glfwSetInputMode(@handle, GLFW_CURSOR, GLFW_CURSOR_NORMAL) end end |