glfw 1.0.3 → 3.3.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +161 -0
  3. data/.yardopts +6 -0
  4. data/Gemfile +2 -4
  5. data/README.md +29 -33
  6. data/Rakefile +6 -4
  7. data/ext/glfw/common.c +159 -0
  8. data/ext/glfw/cursor.c +34 -30
  9. data/ext/glfw/extconf.rb +7 -17
  10. data/ext/glfw/glfw.c +122 -377
  11. data/ext/glfw/glfw.h +46 -41
  12. data/ext/glfw/image.c +96 -64
  13. data/ext/glfw/joystick.c +169 -0
  14. data/ext/glfw/monitor.c +231 -155
  15. data/ext/glfw/stb_image.h +7656 -0
  16. data/ext/glfw/window.c +708 -576
  17. data/glfw.gemspec +10 -9
  18. data/lib/glfw.rb +4 -14
  19. data/lib/glfw/constants.rb +365 -0
  20. data/lib/glfw/stubs.rb +234 -0
  21. data/lib/glfw/stubs/cursor.rb +21 -0
  22. data/lib/glfw/stubs/gamepad_state.rb +30 -0
  23. data/lib/glfw/stubs/image.rb +39 -0
  24. data/lib/glfw/stubs/joystick.rb +125 -0
  25. data/lib/glfw/stubs/monitor.rb +115 -0
  26. data/lib/glfw/stubs/video_mode.rb +32 -0
  27. data/lib/glfw/stubs/window.rb +626 -0
  28. data/lib/glfw/version.rb +8 -1
  29. metadata +31 -35
  30. data/.travis.yml +0 -5
  31. data/Makefile +0 -267
  32. data/ext/glfw/common.h +0 -46
  33. data/ext/glfw/cursor.h +0 -14
  34. data/ext/glfw/glfw3.h +0 -4248
  35. data/ext/glfw/glfw3native.h +0 -456
  36. data/ext/glfw/image.h +0 -14
  37. data/ext/glfw/ming32/WINDOWS USERS PLACE libglf3.a HERE.txt b/data/ext/glfw/ming32/WINDOWS USERS PLACE libglf3.a → HERE.txt +0 -0
  38. data/ext/glfw/ming64/WINDOWS USERS PLACE libglf3.a HERE.txt b/data/ext/glfw/ming64/WINDOWS USERS PLACE libglf3.a → HERE.txt +0 -0
  39. data/ext/glfw/monitor.h +0 -29
  40. data/ext/glfw/video_mode.c +0 -60
  41. data/ext/glfw/video_mode.h +0 -21
  42. data/ext/glfw/vulkan.c +0 -48
  43. data/ext/glfw/vulkan.h +0 -16
  44. data/ext/glfw/window.h +0 -87
@@ -0,0 +1,21 @@
1
+
2
+ module GLFW
3
+
4
+ ##
5
+ # Describes the application's mouse cursor object and how it appears for the window.
6
+ class Cursor
7
+
8
+ ##
9
+ # @overload initialize(shape)
10
+ # Creates a new cursor using a standard shape defined by the operating system.
11
+ # @param shape [Integer] An integer representing the shape of the cursor to create.
12
+ #
13
+ # @overload initialize(image, xhot = 0, yhot = 0)
14
+ # Creates a new cursor using the specified image.
15
+ # @param image [Image] A source image to use for the cursor's appearance.
16
+ # @param xhot [Integer] The "hot-point" of the cursor on the x-axis, where 0 is the left edge of the image.
17
+ # @param yhot [Integer] The "hot-point" of the cursor on the y-axis, where 0 is the top edge of the image.
18
+ def initialize(*argv)
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,30 @@
1
+
2
+ module GLFW
3
+
4
+ ##
5
+ # Describes the captured state of a gamepad.
6
+ class GamepadState
7
+
8
+ ##
9
+ # Queries the value of the axis at the specified index.
10
+ #
11
+ # @param index [Integer] The desired index of the axis to query.
12
+ #
13
+ # @return [Float] The current axis value, or `0.0` if out of range.
14
+ # @note It is recommended to use the return value rounded to a specific precision, or "dead zone", as many devices
15
+ # will report miniscule values even when stationary.
16
+ # @note Use the class constants prefixed with `AXIS` for strongly typed index values if desired.
17
+ def axis(index)
18
+ end
19
+
20
+ ##
21
+ # Queries the button state at the specified index.
22
+ #
23
+ # @param index [Integer] The desired index of the button to query.
24
+ #
25
+ # @return [Float] `true` if button is depressed, otherwise `false` if no input is detected or if index is out of range.
26
+ # @note Use the class constants prefixed with `BUTTON` for strongly typed index values if desired.
27
+ def button(index)
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,39 @@
1
+
2
+ module GLFW
3
+
4
+ ##
5
+ # Object describing a raw image with uncompressed pixel data, with 32-bytes per pixel in RGBA byte order.
6
+ #
7
+ # This class may also be used for creating textures with OpenGL, simply use `GL_RGBA` as the pixel format
8
+ # and pass the value of the {pixels} method.
9
+ class Image
10
+
11
+ ##
12
+ # @return [Integer] the width of the image, in pixel units.
13
+ attr_reader :width
14
+
15
+ ##
16
+ # @return [Integer] the height of the image, in pixel units.
17
+ attr_reader :height
18
+
19
+ ##
20
+ # @overload initialize(width, height, pixels = nil)
21
+ #
22
+ # @overload initialize(filename)
23
+ #
24
+ def initialize(width, height, pixels)
25
+ end
26
+
27
+ ##
28
+ # Gets the pixel data as a binary blob.
29
+ #
30
+ # @return [String] the pixel data.
31
+ def pixels
32
+ end
33
+
34
+ alias_method :columns, :width
35
+ alias_method :rows, :height
36
+ alias_method :to_blob, :pixels
37
+ end
38
+
39
+ end
@@ -0,0 +1,125 @@
1
+
2
+ module GLFW
3
+
4
+ ##
5
+ # Provides methods for interacting and querying joystick and gamepad peripherals.
6
+ module Joystick
7
+
8
+ ##
9
+ # Retrieves the state of the specified joystick remapped to an Xbox-like gamepad.
10
+ #
11
+ # @param jid [Integer] The joystick index to query.
12
+ #
13
+ # @return [GamepadState?] the gamepad input state of the joystick or `nil` if an error occurred.
14
+ def self.gamepad_state(jid)
15
+ end
16
+
17
+ ##
18
+ # Returns the name, encoded as UTF-8, of the specified joystick.
19
+ #
20
+ # @param jid [Integer] The joystick index to query.
21
+ #
22
+ # @return [String?] the UTF-8 encoded name of the gamepad, or `nil` if the joystick is not present, does not
23
+ # have a mapping or an error occurred.
24
+ def self.name(jid)
25
+ end
26
+
27
+ ##
28
+ # Returns the human-readable name of the gamepad from the gamepad mapping assigned to the specified joystick.
29
+ #
30
+ # @param jid [Integer] The joystick index to query.
31
+ #
32
+ # @return [String?] the UTF-8 encoded name of the gamepad, or `nil` if the joystick is not present, does not
33
+ # have a mapping or an error occurred.
34
+ def self.gamepad_name(jid)
35
+ end
36
+
37
+ ##
38
+ # Returns whether the specified joystick is present.
39
+ #
40
+ # @param jid [Integer] The joystick index to query.
41
+ # @return [Boolean] `true` if joystick is detected, otherwise `false`.
42
+ # @note There is no need to call this function before other functions that accept a joystick ID, as they all check
43
+ # for presence before performing any other work.
44
+ def self.present?(jid)
45
+ end
46
+
47
+ ##
48
+ # Returns whether the specified joystick is both present and has a gamepad mapping.
49
+ #
50
+ # @param jid [Integer] The joystick index to query.
51
+ #
52
+ # @return [Boolean] `true` if joystick is detected and it has gamepad mappings, otherwise `false`
53
+ def self.gamepad?(jid)
54
+ end
55
+
56
+ ##
57
+ # Returns the SDL compatible GUID, as a UTF-8 encoded hexadecimal string, of the specified joystick
58
+ # The GUID is what connects a joystick to a gamepad mapping. A connected joystick will always have a
59
+ # GUID even if there is no gamepad mapping assigned to it.
60
+ #
61
+ # @param jid [Integer] The joystick index to query.
62
+ #
63
+ # @return [String?] The UTF-8 encoded GUID of the joystick, or `nil` if the joystick is not present or an error occurred.
64
+ def self.guid(jid)
65
+ end
66
+
67
+ ##
68
+ # Returns the state of all buttons of the specified joystick.
69
+ #
70
+ # @param jid [Integer] The joystick index to query.
71
+ #
72
+ # @return [Array<Boolean>] an array where each element represents the joystick button at the same index, whose value
73
+ # if either `true` (pressed) or `false` (released).
74
+ def self.buttons(jid)
75
+ end
76
+
77
+ ##
78
+ # Returns the values of all axes of the specified joystick. Each element in the array is a value between
79
+ # `-1.0` and `1.0`.
80
+ #
81
+ # @param jid [Integer] The joystick index to query.
82
+ #
83
+ # @return [Array<Float>] an array where each element represents the joystick axis at the same index
84
+ def self.axes(jid)
85
+ end
86
+
87
+ ##
88
+ # Returns the state of all hats of the specified joystick.
89
+ #
90
+ # @param jid [Integer] The joystick index to query.
91
+ #
92
+ # @return [Array<Boolean>] an array where each element represents the joystick hats at the same index, whose value
93
+ # if either `true` (pressed) or `false` (released).
94
+ def self.hats(jid)
95
+ end
96
+
97
+ ##
98
+ # Parses the specified ASCII encoded string(s) and updates the internal list with any gamepad mappings it finds.
99
+ # This string may contain either a single gamepad mapping or many mappings separated by newlines.
100
+ #
101
+ # If there is already a gamepad mapping for a given GUID in the internal list, it will be replaced by the one
102
+ # passed to this function. If the library is terminated and re-initialized the internal list will revert to the
103
+ # built-in default.
104
+ #
105
+ # @note The parser supports standard SDL gamepad mappings.
106
+ #
107
+ # @param mapping [String,Array<String>] One or more mappings to update.
108
+ #
109
+ # @return [Integer] the number of mappings that were updated.
110
+ def self.update_mappings(*mapping)
111
+ end
112
+
113
+ ##
114
+ # @overload self.on_connection(&block)
115
+ # When called with a block, sets a callback to be invoked when the connection state of a joystick is changed.
116
+ # @yieldparam connected [Boolean] `true` if device was connected, otherwise `false` if disconectted.
117
+ #
118
+ # @overload self.on_connection
119
+ # When called without a block, clears any callback that is set.
120
+ #
121
+ # @return [Proc?] the previous callback that was set, or `nil` if none existed.
122
+ def self.on_connection
123
+ end
124
+ end
125
+ end
@@ -0,0 +1,115 @@
1
+
2
+ module GLFW
3
+
4
+ ##
5
+ # Represents a handle to a physical monitor.
6
+ class Monitor
7
+
8
+ ##
9
+ # Retrieves an array of all connected monitors.
10
+ # @return [Array<Monitor>] an array of monitors.
11
+ # @see primary
12
+ def self.available
13
+ end
14
+
15
+ ##
16
+ # @return [Monitor] the primary or "default" monitor.
17
+ # @see available
18
+ def self.primary
19
+ end
20
+
21
+ ##
22
+ # @overload self.on_connection(&block)
23
+ # When called with a block, sets a callback to be invoked when the connection
24
+ # state of a monitor is changed.
25
+ # @yieldparam connected [Boolean] `true` if device was connected, otherwise `false` if disconectted.
26
+ #
27
+ # @overload self.on_connection
28
+ # When called without a block, clears any callback that is set.
29
+ #
30
+ # @return [Proc?] the previous callback that was set, or `nil` if none existed.
31
+ def self.on_connection
32
+ end
33
+
34
+ ##
35
+ # Generates an appropriately sized gamma ramp from the specified exponent and
36
+ # then sets the {gamma_ramp} with it. The value must be a finite number greater
37
+ # than zero.
38
+ #
39
+ # The software controlled gamma ramp is applied in addition to the hardware gamma
40
+ # correction, which today is usually an approximation of sRGB gamma. This means
41
+ # that setting a perfectly linear ramp, or gamma 1.0, will produce the default
42
+ # (usually sRGB-like) behavior.
43
+ #
44
+ # @param [Float] the desired exponent value, must be greater than `0.0` and finite.
45
+ #
46
+ # @return [void]
47
+ def gamma(exponent)
48
+ end
49
+
50
+ ##
51
+ # Sets teh gamma ramp of the monitor. The ramp is an array of 3 equally sized
52
+ # arrays of integers that range from `0` to `65535`. Each child array represents
53
+ # the ramp for a single color component, in RGB order.
54
+ #
55
+ # @note It is strongly recommended to use {gamma} instead of this method.
56
+ # @note On Windows, the maximum size of a gamma ramp is 256.
57
+ #
58
+ # @return [Array<Array<Integer>, Array<Integer> Array<Integer>>] the gamma ramp.
59
+ attr_accessor :gamma_ramp
60
+
61
+ ##
62
+ # The human-readable name of the specified monitor. The name typically reflects
63
+ # the make and model of the monitor and is not guaranteed to be unique among the
64
+ # connected monitors.
65
+ # @return [String] the monitor name.
66
+ attr_reader :name
67
+
68
+ ##
69
+ # @return [Size] the physical dimensions of the monitor, in millimeter units.
70
+ attr_reader :physical_size
71
+
72
+ ##
73
+ # @return [Size] the dimensions of the monitor, in screen coordinates.
74
+ attr_reader :size
75
+
76
+ ##
77
+ # The position, in screen coordinates, of the upper-left corner of the work area.
78
+ # The work area is defined as the area of the monitor not occluded by the operating
79
+ # system task bar where present. If no task bar exists then the work area is the
80
+ # monitor resolution in screen coordinates.
81
+ # @return [Point] the location of the monitor's work area.
82
+ attr_reader :client_position
83
+
84
+ ##
85
+ # The size of the "non-system" area of the monitor, in screen coordinates.
86
+ # The work area is defined as the area of the monitor not occluded by the operating
87
+ # system task bar where present. If no task bar exists then the work area is the
88
+ # monitor resolution in screen coordinates.
89
+ # @return [Size] the size of the monitor's work area.
90
+ attr_reader :client_size
91
+
92
+ ##
93
+ # @return [VideoMode] the current video mode for the monitor.
94
+ attr_reader :video_mode
95
+
96
+ ##
97
+ # @return [Array<VideoMode>] an array of all video modes available to the monitor.
98
+ attr_reader :video_modes
99
+
100
+ ##
101
+ # etrieves the content scale for the specified monitor. The content scale is the ratio
102
+ # between the current DPI and the platform's default DPI. This is especially important
103
+ # for text and any UI elements. If the pixel dimensions of your UI scaled by this look
104
+ # appropriate on your machine then it should appear at a reasonable size on other machines
105
+ # regardless of their DPI and scaling settings. This relies on the system DPI and scaling
106
+ # settings being somewhat correct.
107
+ #
108
+ # The content scale may depend on both the monitor resolution and pixel density and on user
109
+ # settings. It may be very different from the raw DPI calculated from the physical size and
110
+ # current resolution.
111
+ #
112
+ # @return [Vec2] the current content scale of the monitor.
113
+ attr_reader :content_scale
114
+ end
115
+ end
@@ -0,0 +1,32 @@
1
+
2
+ module GLFW
3
+
4
+ ##
5
+ # Describes the video settings for a {Monitor}.
6
+ class VideoMode
7
+
8
+ ##
9
+ # @return [Integer] the width, in screen coordinates, of the video mode.
10
+ attr_reader :width
11
+
12
+ ##
13
+ # @return [Integer] the height, in screen coordinates, of the video mode.
14
+ attr_reader :height
15
+
16
+ ##
17
+ # @return [Integer] the bit depth of the red channel of the video mode.
18
+ attr_reader :red_bits
19
+
20
+ ##
21
+ # @return [Integer] the bit depth of the green channel of the video mode.
22
+ attr_reader :green_bits
23
+
24
+ ##
25
+ # @return [Integer] the bit depth of the blue channel of the video mode.
26
+ attr_reader :blue_bits
27
+
28
+ ##
29
+ # @return [Integer] the refresh rate, in Hz, of the video mode.
30
+ attr_reader :refresh_rate
31
+ end
32
+ end
@@ -0,0 +1,626 @@
1
+
2
+ module GLFW
3
+
4
+ ##
5
+ # Represents an application window and OpenGL context.
6
+ class Window
7
+
8
+ ##
9
+ # Resets all window hints that have been applied back to the "default" configuration.
10
+ # @return [void]
11
+ def self.default_hints
12
+ end
13
+
14
+ ##
15
+ # Sets a hint for the next window creation. Once set, the value will persist until changed with this function
16
+ # or the library is terminated.
17
+ #
18
+ # @param hint [Integer] A value indicating the hint to change. See the GLFW constants prefixed with `HINT`
19
+ # for valid values for this parameter.
20
+ # @param value [Integer,Boolean,String] The desired value to set for this hint.
21
+ #
22
+ # @return [void]
23
+ def self.hint(hint, value)
24
+ end
25
+
26
+ ##
27
+ # @return [Window?] the {Window} whose context is current on the calling thread, or `nil` if none is found.
28
+ def self.current
29
+ end
30
+
31
+ ##
32
+ # Creates a new instance of the {Window} class.
33
+ #
34
+ # @param width [Integer] The desired width of the window, in screen coordinates.
35
+ # @param height [Integer] The desired height of the window, in screen coordinates.
36
+ # @param title [String?] The caption to display in the system menubar, window titlebar, etc.
37
+ # @param opts [Hash] The options hash.
38
+ #
39
+ # @option opts [Boolean] :center (true) `true` to have window initially centered on screen.
40
+ # @option opts [Boolean] :vsync (true) `true` to enable vertical syncronization with the monitor refresh.
41
+ # @option opts [Monitor] :monitor (nil) Specifies a monitor to create the window on.
42
+ # @option opts [Window] :shared (nil) Specified another window instance to share context resources with.
43
+ # @option opts [Boolean] :full_window (false) Initializes window as "borderless fullscreen", which allows faster context switching.
44
+ # @option opts [Boolean] :fullscreen (false) Initializes window as fullscreen.
45
+ #
46
+ # @note The OpenGL coontext will automatically be made current on the thread for the new window.
47
+ def initialize(width, height, title = nil, **opts)
48
+ end
49
+
50
+ ##
51
+ # Destroys the window, reclaiming any resources it is using and invalidating it for further use.
52
+ # @return [void]
53
+ def destroy
54
+ end
55
+
56
+ alias_method :dispose, :destroy
57
+
58
+ ##
59
+ # Sets the OpenGL context of the window as current on the calling thread.
60
+ # @return [self]
61
+ # @see current?
62
+ def make_current
63
+ end
64
+
65
+ ##
66
+ # Returns value indicating if the OpenGL context of this window is current on the calling thread.
67
+ # @return [Boolean] `true` if context is current, otherwise `false`.
68
+ # @see make_current
69
+ def current?
70
+ end
71
+
72
+ ##
73
+ # Returns value indicating if the window currently contains the operating system input focus.
74
+ # @return [Boolean] `true` if window has input focus, otherwise `false`.
75
+ def focused?
76
+ end
77
+
78
+ ##
79
+ # Returns value indicating if window is currently minimized to the system toolbar.
80
+ # @return [Boolean] `true` if window is minimized, otherwsie `false`.
81
+ def minimized?
82
+ end
83
+
84
+ ##
85
+ # Returns value indicated if window is currently maximized to fill the work area of the monitor.
86
+ # @return [Boolean] `true` if window is maximized, otherwise `false`.
87
+ def maximized?
88
+ end
89
+
90
+ ##
91
+ # Returns value indicating if the mouse cursor is currently over thw window's client area.
92
+ # @return [Boolean] `true` if cursor is over the window, otherwise `false`.
93
+ def hovered?
94
+ end
95
+
96
+ ##
97
+ # Returns value indicating if window is currently in fullscreen mode on the monitor.
98
+ # @return [Boolean] `true` if window is fullscreen, otherwise `false`.
99
+ def fullscreen?
100
+ end
101
+
102
+ ##
103
+ # Modifies the behavior when a user resizes the window to stay locked to the specified aspect ratio.
104
+ #
105
+ # @param numerator [Integer] The numerator component of the aspect ratio.
106
+ # @param denominator [Integer] The denominator component of the aspect ratio.
107
+ #
108
+ # @return [void]
109
+ def aspect_ratio(numerator, denominator)
110
+ end
111
+
112
+ ##
113
+ # Sets the minimum and maximum sizes that a user can resize the window to.
114
+ #
115
+ # @param min [Size] The minimum size of the window's client area the user can resize to, in screen coordinates.
116
+ # @param max [Size] The maximum size of the window's client area the user can resize to, in screen coordinates.
117
+ #
118
+ # @return [void]
119
+ def size_limits(min, max)
120
+ end
121
+
122
+ ##
123
+ # Retrieves the size, in screen coordinates, of each edge of the frame of the specified window. This size includes the title bar,
124
+ # if the window has one.
125
+ #
126
+ # @return [Array<Integer>] a 4-element array in the order of left, top, right, bottom, where each value is the size, in
127
+ # screen coordinates, of the window's frame.
128
+ #
129
+ # @note Values will always be greater than or equal to `0`.
130
+ def frame_size
131
+ end
132
+
133
+ ##
134
+ # Moves the mouse cursor to the specified coordinates.
135
+ #
136
+ # @param x [Float] The location to move the cursor to on the x-axis in screen coordinates, relative to the window's client area.
137
+ # @param y [Float] The location to move the cursor to on the y-axis in screen coordinates, relative to the window's client area.
138
+ #
139
+ # @return [void]
140
+ def move_cursor(x, y)
141
+ end
142
+
143
+ ##
144
+ # Centers a window on the screen. Has no effect on fullscreen windows.
145
+ # @return [self]
146
+ def center
147
+ end
148
+
149
+ ##
150
+ # Sets the closing state of the window.
151
+ #
152
+ # @param flag [Boolean] `true` to set window state to close, otherwise `false` to cancel a close action that is in progress.
153
+ #
154
+ # @return [self]
155
+ #
156
+ # @see closing?
157
+ # @see on_close
158
+ def close(flag = true)
159
+ end
160
+
161
+ ##
162
+ # Retrieves value indicating if window is currently set to close.
163
+ #
164
+ # return [Boolean] `true` if window is set to close, otherwise `false`.
165
+ #
166
+ # @see close
167
+ # @see on_close
168
+ def closing?
169
+ end
170
+
171
+ ##
172
+ # Typically called each frame, swaps the front and back buffers used for rendering, presenting the current back buffer to the
173
+ # user, while staging the current front buffer to be overwritten.
174
+ #
175
+ # @return [void]
176
+ def swap_buffers
177
+ end
178
+
179
+ ##
180
+ # Makes the window visible if it was previously hidden.
181
+ # If the window is already visible or is in full screen mode, this method does nothing.
182
+ #
183
+ # @return [self]
184
+ # @see hide
185
+ def show
186
+ end
187
+
188
+ ##
189
+ # Hides the window if it was previously visible.
190
+ # If the window is already hidden or is in full screen mode, this method does nothing.
191
+ #
192
+ # @return [self]
193
+ # @see show
194
+ def hide
195
+ end
196
+
197
+ ##
198
+ # Brings the specified window to front and sets input focus. The window should already be visible and not minimized.
199
+ # @return [self]
200
+ def focus
201
+ end
202
+
203
+ ##
204
+ # Mminimizes the window if it was previously restored. If the window is already iconified, this function does nothing.
205
+ # If the window is fullscreen, the original monitor resolution is restored until the window is restored.
206
+ #
207
+ # @return [self]
208
+ # @see maximize
209
+ # @see restore
210
+ def minimize
211
+ end
212
+
213
+ ##
214
+ # Maximizes the window if it was previously not maximized. If the window is already maximized, this function does nothing.
215
+ # If the window is fullscreen, this function does nothing.
216
+ #
217
+ # @return [self]
218
+ # @see minimize
219
+ # @see restore
220
+ def maximize
221
+ end
222
+
223
+ ##
224
+ # Restores the window if it was previously minimized or maximized. If the window is already restored, this function does nothing.
225
+ # If the window is fullscreen, the resolution chosen for the window is restored on the selected monitor.
226
+ #
227
+ # @return [self]
228
+ # @see minimize
229
+ # @see maximize
230
+ def restore
231
+ end
232
+
233
+ ##
234
+ # Requests user attention to the window. On platforms where this is not supported, attention is requested to the application as a whole.
235
+ # Once the user has given attention, usually by focusing the window or application, the system will end the request automatically.
236
+ #
237
+ # @return [self]
238
+ def request_attention
239
+ end
240
+
241
+ ##
242
+ # Returns the last state reported for the specified key to the window.
243
+ #
244
+ # @param key [Integer] The key to query.
245
+ #
246
+ # @return [Boolean] `true` if key is depressed, otherwise `false`.
247
+ # @see button?
248
+ # @see on_key
249
+ def key?(key)
250
+ end
251
+
252
+ ##
253
+ # Returns the last state reported for the specified mouse button to the window.
254
+ #
255
+ # @param key [Integer] The mouse button to query.
256
+ #
257
+ # @return [Boolean] `true` if mouse button is depressed, otherwise `false`.
258
+ # @see key?
259
+ # @see on_mouse_button
260
+ def button?(button)
261
+ end
262
+
263
+ ##
264
+ # Ssets the monitor that the window uses for full screen mode or, if the monitor is `nil`,
265
+ # makes it windowed mode.
266
+ #
267
+ # When setting a monitor, this function updates the width, height and refresh rate of the
268
+ # desired video mode and switches to the video mode closest to it. The window position is
269
+ # ignored when setting a monitor.
270
+ #
271
+ # When the monitor is `nil`, the position, width and height are used to place the window
272
+ # content area. The refresh rate is ignored when no monitor is specified.
273
+ #
274
+ # When a window transitions from full screen to windowed mode, this function restores any previous
275
+ # window settings such as whether it is decorated, floating, resizable, has size or aspect
276
+ # ratio limits, etc.
277
+ #
278
+ # @param monitor [Monitor?] The desired monitor, or `nil` to set windowed mode.
279
+ # @param position [Point] The desired location of the upper-left corner of the content area.
280
+ # @param size [Size] The desired size in screen coordinates of the content area or video mode.
281
+ # @param hz [Integer] The desired refresh rate, in Hz, of the video mode, or `-1` to ignore.
282
+ #
283
+ # @return [void]
284
+ def change_monitor(monitor, position, size, hz = -1)
285
+ end
286
+
287
+ ##
288
+ # @return [String?] the window caption displayed in the system menubar, window titlebar, etc.
289
+ attr_accessor :title
290
+
291
+ ##
292
+ # @return [Boolean] the visibility state of the window.
293
+ attr_accessor :visible
294
+
295
+ ##
296
+ # @return [Boolean] `true` if window is floating (always-on-top) of other application windows, otherwise `false`.
297
+ attr_accessor :topmost
298
+
299
+ ##
300
+ # The icon(s) to be displayed as a window decoration, on systems that support this functionality.
301
+ # @return [Image, Array<Image>] an image or array of possible images.
302
+ attr_accessor :icon
303
+
304
+ ##
305
+ # @return [Point] the position of the top-left corner of the window's client area, in screen coordinates.
306
+ attr_accessor :position
307
+
308
+ ##
309
+ # @return [Size] the size of the window's client area, in screen coordinates.
310
+ attr_accessor :size
311
+
312
+ ##
313
+ # @return [Cursor?] the mouse cursor the window uses, or `nil` if not specified.
314
+ attr_accessor :cursor
315
+
316
+ ##
317
+ # @return [Vec2] the location of the mouse cursor.
318
+ attr_accessor :cursor_pos
319
+
320
+ ##
321
+ # @return [Float] a value determining the visibility of the window (including frame), where `0.0` is invisible and `1.0` is fully opaque.
322
+ attr_accessor :opacity
323
+
324
+ ##
325
+ # @return [Boolean] a value indicating if the window will be decoarted with a frame, close widget, etc.
326
+ attr_accessor :decorated
327
+
328
+ ##
329
+ # @return [Boolean] a value indicating if window is resizable by the user.
330
+ attr_accessor :resizable
331
+
332
+ ##
333
+ # @return [String?] a string for the clipboard associated with the window.
334
+ attr_accessor :clipboard
335
+
336
+ ##
337
+ # @return [Boolean] a value indicating if window will automatically focus when being restored from minimized state, etc.
338
+ attr_accessor :auto_focus
339
+
340
+ ##
341
+ # @return [Integer] a value indicating the behavior of the mouse cursor.
342
+ # @see CURSOR_NORMAL
343
+ # @see CURSOR_HIDDEN
344
+ # @see CURSOR_DISABLED
345
+ attr_accessor :cursor_mode
346
+
347
+ ##
348
+ # @return [Boolean] a value indicating if input states for keys will persist until queried with {key?}.
349
+ attr_accessor :sticky_keys
350
+
351
+ ##
352
+ # @return [Boolean] a value indicating if input states for mouse buttons will persist until queried with {button?}.
353
+ attr_accessor :sticky_buttons
354
+
355
+ ##
356
+ # @return [Boolean] a value indicating if modifier bits for input callback functions will include {MOD_CAPS_LOCK}, {MOD_NUM_LOCK}, etc.
357
+ attr_accessor :lock_modifiers
358
+
359
+ ##
360
+ # When the cursor is disabled, raw (unscaled and unaccelerated) mouse motion can be enabled if available.
361
+ #
362
+ # Raw mouse motion is closer to the actual motion of the mouse across a surface. It is not affected by the
363
+ # scaling and acceleration applied to the motion of the desktop cursor. That processing is suitable for a
364
+ # cursor while raw motion is better for controlling for example a 3D camera. Because of this, raw mouse
365
+ # motion is only provided when the cursor is disabled.
366
+ #
367
+ # @return [Boolean] `true` if raw mouse motion is enabled, otherwise `false`.
368
+ attr_accessor :raw_mouse_motion
369
+
370
+ ##
371
+ # @return [Monitor?] the monitor the window is displayed on, or `nil` if not a fullscreen window.
372
+ attr_reader :monitor
373
+
374
+ ##
375
+ # @return [Vec2] the current content scale of the window.
376
+ attr_reader :content_scale
377
+
378
+ ##
379
+ # @return [Size] the dimensions of the window's primary framebuffer, in pixel coordinates.
380
+ attr_reader :framebuffer_size
381
+
382
+ # @!group Callback Functions
383
+
384
+ ##
385
+ # @overload on_framebuffer_resize(&block)
386
+ # When called with a block, sets a callback to be invoked when the window's framebuffer size changes.
387
+ # @yieldparam width [Integer] The new width of the framebuffer, in pixel units.
388
+ # @yieldparam height [Integer] The new height of the framebuffer, in pixel units.
389
+ #
390
+ # @overload on_framebuffer_resize
391
+ # When called without a block, clears any callback that is set.
392
+ #
393
+ # @return [Proc?] the previous callback that was set, or `nil` if none existed.
394
+ # @see framebuffer_size
395
+ def on_framebuffer_resize
396
+ end
397
+
398
+ ##
399
+ # @overload on_resize(&block)
400
+ # When called with a block, sets a callback to be invoked when the window size changes.
401
+ # @yieldparam width [Integer] The new width of the window's client area, in screen coordinates.
402
+ # @yieldparam height [Integer] The new height of the window's client area, in screen coordinates.
403
+ #
404
+ # @overload on_resize
405
+ # When called without a block, clears any callback that is set.
406
+ #
407
+ # @return [Proc?] the previous callback that was set, or `nil` if none existed.
408
+ # @see size
409
+ def on_resize
410
+ end
411
+
412
+ ##
413
+ # @overload on_move(&block)
414
+ # When called with a block, sets a callback to be invoked when the window's position is changed.
415
+ # @yieldparam x [Integer] The new position of the window on the x-axis, in screen coordinates.
416
+ # @yieldparam y [Integer] The new position of the window on the y-axis, in screen coordinates.
417
+ #
418
+ # @overload on_move
419
+ # When called without a block, clears any callback that is set.
420
+ #
421
+ # @return [Proc?] the previous callback that was set, or `nil` if none existed.
422
+ # @see position
423
+ def on_move
424
+ end
425
+
426
+ ##
427
+ # @overload on_focus(&block)
428
+ # When called with a block, sets a callback to be invoked when the window gains or loses input focus.
429
+ # @yieldparam focused [Boolean] `true` if window has gained focus, otherwise `false` if it was lost.
430
+ #
431
+ # @overload on_focus
432
+ # When called without a block, clears any callback that is set.
433
+ #
434
+ # @return [Proc?] the previous callback that was set, or `nil` if none existed.
435
+ # @see focus
436
+ # @see focused?
437
+ def on_focus
438
+ end
439
+
440
+ ##
441
+ # @overload on_refresh(&block)
442
+ # When called with a block, sets a callback to be invoked when the content area of the window needs
443
+ # to be redrawn, for example if the window has been exposed after having been covered by another window.
444
+ # @yield No arguments are yielded to the block.
445
+ #
446
+ # @overload on_refresh
447
+ # When called without a block, clears any callback that is set.
448
+ #
449
+ # @note On compositing window systems such as Aero, Compiz, Aqua or Wayland, where the window contents
450
+ # are saved off-screen, this callback may be called only very infrequently or never at all.
451
+ #
452
+ # @return [Proc?] the previous callback that was set, or `nil` if none existed.
453
+ def on_refresh
454
+ end
455
+
456
+ ##
457
+ # @overload on_close(&block)
458
+ # When called with a block, sets a callback to be invoked when the window is flagged to close.
459
+ # @yield No arguments are yielded to the block.
460
+ #
461
+ # @overload on_close
462
+ # When called without a block, clears any callback that is set.
463
+ #
464
+ # @return [Proc?] the previous callback that was set, or `nil` if none existed.
465
+ # @see close
466
+ # @see closing?
467
+ def on_close
468
+ end
469
+
470
+ ##
471
+ # @overload on_minimize(&block)
472
+ # When called with a block, sets a callback to be invoked when the window minimized or restored.
473
+ # @yieldparam minimized [Boolean] `true` if window has been minimized, otherwise `false` if being restored.
474
+ #
475
+ # @overload on_minimize
476
+ # When called without a block, clears any callback that is set.
477
+ #
478
+ # @return [Proc?] the previous callback that was set, or `nil` if none existed.
479
+ # @see minimize
480
+ # @see minimized?
481
+ def on_minimize
482
+ end
483
+
484
+ ##
485
+ # @overload on_maximize(&block)
486
+ # When called with a block, sets a callback to be invoked when the window maximized or restored.
487
+ # @yieldparam maximized [Boolean] `true` if window has been maximized, otherwise `false` if being restored.
488
+ #
489
+ # @overload on_maximize
490
+ # When called without a block, clears any callback that is set.
491
+ #
492
+ # @return [Proc?] the previous callback that was set, or `nil` if none existed.
493
+ # @see maximize
494
+ # @see maximized?
495
+ def on_maximize
496
+ end
497
+
498
+ ##
499
+ # @overload on_file_drop(&block)
500
+ # When called with a block, sets a callback to be invoked when a files/folders are drag-dropped onto
501
+ # the windows client area.
502
+ # @yieldparam paths [Array<String>] An array of the absolite paths of the filepaths that were dropped.
503
+ #
504
+ # @overload on_file_drop
505
+ # When called without a block, clears any callback that is set.
506
+ #
507
+ # @return [Proc?] the previous callback that was set, or `nil` if none existed.
508
+ def on_file_drop
509
+ end
510
+
511
+ ##
512
+ # @overload on_cursor_move(&block)
513
+ # When called with a block, sets a callback to be invoked when the mouse cursor moves.
514
+ # @yieldparam x [Float] The new cursor position on the x-axis, in screen coordinates and
515
+ # relative to the top-left corner of the window's client area.
516
+ # @yieldparam y [Float] The new cursor position on the y-axis, in screen coordinates and
517
+ # relative to the top-left corner of the window's client area.
518
+ #
519
+ # @overload on_cursor_move
520
+ # When called without a block, clears any callback that is set.
521
+ #
522
+ # @return [Proc?] the previous callback that was set, or `nil` if none existed.
523
+ # @see cursor_pos
524
+ # @see move_cursor
525
+ def on_cursor_move
526
+ end
527
+
528
+ ##
529
+ # @overload on_scroll(&block)
530
+ # When called with a block, sets a callback to be invoked when the mouse wheel is scrolled.
531
+ # @yieldparam x [Float] The scroll amount on the x-axis, or `0.0` when not supported.
532
+ # @yieldparam y [Float] The scroll amount on the y-axis.
533
+ #
534
+ # @overload on_scroll
535
+ # When called without a block, clears any callback that is set.
536
+ #
537
+ # @return [Proc?] the previous callback that was set, or `nil` if none existed.
538
+ def on_scroll
539
+ end
540
+
541
+ ##
542
+ # @overload on_key(&block)
543
+ # When called with a block, sets a callback to be invoked when a key state changes.
544
+ # @yieldparam key [Integer] The keyboard key that was pressed or released.
545
+ # @yieldparam scancode [Integer] The system-specific scancode of the key.
546
+ # @yieldparam action [Integer] A value indicating the state of the key
547
+ # @yieldparam modifiers [Integer] A bitfield value of modifier keys that were present during the action.
548
+ #
549
+ # @overload on_key
550
+ # When called without a block, clears any callback that is set.
551
+ #
552
+ # @return [Proc?] the previous callback that was set, or `nil` if none existed.
553
+ # @see key?
554
+ # @see RELEASE
555
+ # @see PRESS
556
+ # @see REPEAT
557
+ def on_key
558
+ end
559
+
560
+ ##
561
+ # @overload on_mouse_button(&block)
562
+ # When called with a block, sets a callback to be invoked when a mouse button state changes.
563
+ # @yieldparam button [Integer] The mouse button that was pressed or released.
564
+ # @yieldparam action [Integer] A value indicating the state of the button.
565
+ # @yieldparam modifiers [Integer] A bitfield value of modifier keys that were present during the action.
566
+ #
567
+ # @overload on_mouse_button
568
+ # When called without a block, clears any callback that is set.
569
+ #
570
+ # @return [Proc?] the previous callback that was set, or `nil` if none existed.
571
+ # @see button?
572
+ # @see RELEASE
573
+ # @see PRESS
574
+ # @see REPEAT
575
+ def on_mouse_button
576
+ end
577
+
578
+ ##
579
+ # @overload on_cursor_enter(&block)
580
+ # When called with a block, sets a callback to be invoked when the mouse cursor enters or leaves
581
+ # the content area of the window.
582
+ # @yieldparam entered [Booleab] `true` if cursor is entering the window, otherwise `false` when leaving.
583
+ #
584
+ # @overload on_cursor_enter
585
+ # When called without a block, clears any callback that is set.
586
+ #
587
+ # @return [Proc?] the previous callback that was set, or `nil` if none existed.
588
+ def on_cursor_enter
589
+ end
590
+
591
+ ##
592
+ # The character callback is intended for Unicode text input. As it deals with characters, it is keyboard
593
+ # layout dependent, whereas the key callback is not. Characters do not map 1:1 to physical keys, as a key
594
+ # may produce zero, one or more characters. If you want to know whether a specific physical key was pressed
595
+ # or released, see the key callback instead.
596
+ #
597
+ # The character callback behaves as system text input normally does and will not be called if modifier keys
598
+ # are held down that would prevent normal text input on that platform, for example a Super (Command) key on
599
+ # macOS or Alt key on Windows.
600
+ #
601
+ # @overload on_char(&block)
602
+ # When called with a block, sets a callback to be invoked when a Unicode character is input.
603
+ # @yieldparam codepoint [Integer] A Unicode codepoint.
604
+ #
605
+ # @overload on_char
606
+ # When called without a block, clears any callback that is set.
607
+ #
608
+ # @return [Proc?] the previous callback that was set, or `nil` if none existed.
609
+ def on_char
610
+ end
611
+
612
+ ##
613
+ # @overload on_scale(&block)
614
+ # When called with a block, sets a callback to be invoked when the window's content scale is changed.
615
+ # @yieldparam x [Float] The new content scaling factor on the x-axis.
616
+ # @yieldparam y [Float] The new content scaling factor on the y-axis.
617
+ #
618
+ # @overload on_scale
619
+ # When called without a block, clears any callback that is set.
620
+ #
621
+ # @return [Proc?] the previous callback that was set, or `nil` if none existed.
622
+ # @see content_scale
623
+ def on_scale
624
+ end
625
+ end
626
+ end