Class: SFML::RenderWindow
- Inherits:
-
Object
- Object
- SFML::RenderWindow
- Includes:
- Graphics::RenderTarget
- Defined in:
- lib/sfml/graphics/render_window.rb
Overview
The main drawing surface. Wraps sfRenderWindow.
window = SFML::RenderWindow.new(800, 600, "Hello")
while window.open?
window.each_event do |event|
case event
in {type: :closed} then window.close
in {type: :key_pressed, code: :escape} then window.close
end
end
window.clear(SFML::Color.cornflower_blue)
window.display
end
Constant Summary collapse
Instance Attribute Summary collapse
-
#handle ⇒ Object
readonly
:nodoc:.
Instance Method Summary collapse
- #close ⇒ Object
-
#cursor=(cursor) ⇒ Object
Apply a SFML::Cursor as the visible mouse pointer over this window.
-
#cursor_grabbed=(grabbed) ⇒ Object
Lock the mouse pointer inside the window’s client area while focused — useful for FPS-style games or when dragging widgets that need pixel-precise input.
-
#cursor_visible=(visible) ⇒ Object
Toggle the OS mouse pointer’s visibility while it’s over the window.
-
#each_event ⇒ Object
Yields every pending event for this frame, then returns.
- #framerate_limit=(value) ⇒ Object
-
#initialize(*args, **opts) ⇒ RenderWindow
constructor
The first form takes (width, height, title, **opts).
- #open? ⇒ Boolean
-
#poll_event ⇒ Object
Returns the next pending Event or nil if the queue is empty.
-
#run ⇒ Object
Convenience driver loop.
- #size ⇒ Object
- #title=(value) ⇒ Object
- #vsync=(enabled) ⇒ Object
Methods included from Graphics::RenderTarget
#clear, #default_view, #display, #draw, #draw_primitives, #map_coords_to_pixel, #map_pixel_to_coords, #view, #view=
Constructor Details
#initialize(*args, **opts) ⇒ RenderWindow
The first form takes (width, height, title, **opts). The second form takes (video_mode, title, **opts) for full control.
Options:
style: bitmask of SFML::C::Window::Style constants
fullscreen: true to use sfFullscreen state instead of sfWindowed
framerate: cap to N FPS via sfRenderWindow_setFramerateLimit
vsync: enable vertical sync
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/sfml/graphics/render_window.rb', line 31 def initialize(*args, **opts) mode, title = parse_args(args) style = opts.fetch(:style, DEFAULT_STYLE) state = opts[:fullscreen] ? :fullscreen : :windowed ptr = C::Graphics.sfRenderWindow_create( mode.to_native, title.to_s, style, C::Window::State[state], nil, ) raise Error, "sfRenderWindow_create returned NULL" if ptr.null? @handle = FFI::AutoPointer.new(ptr, C::Graphics.method(:sfRenderWindow_destroy)) @event_buffer = C::Window::Event.new self.framerate_limit = opts[:framerate] if opts[:framerate] self.vsync = opts[:vsync] unless opts[:vsync].nil? end |
Instance Attribute Details
#handle ⇒ Object (readonly)
:nodoc:
135 136 137 |
# File 'lib/sfml/graphics/render_window.rb', line 135 def handle @handle end |
Instance Method Details
#close ⇒ Object
56 57 58 59 |
# File 'lib/sfml/graphics/render_window.rb', line 56 def close C::Graphics.sfRenderWindow_close(@handle) self end |
#cursor=(cursor) ⇒ Object
Apply a SFML::Cursor as the visible mouse pointer over this window. Keeps a Ruby reference so the Cursor object’s lifetime spans at least until the next assignment.
84 85 86 87 88 |
# File 'lib/sfml/graphics/render_window.rb', line 84 def cursor=(cursor) raise ArgumentError, "RenderWindow#cursor= requires a SFML::Cursor" unless cursor.is_a?(Cursor) C::Graphics.sfRenderWindow_setMouseCursor(@handle, cursor.handle) @cursor = cursor end |
#cursor_grabbed=(grabbed) ⇒ Object
Lock the mouse pointer inside the window’s client area while focused — useful for FPS-style games or when dragging widgets that need pixel-precise input.
98 99 100 |
# File 'lib/sfml/graphics/render_window.rb', line 98 def cursor_grabbed=(grabbed) C::Graphics.sfRenderWindow_setMouseCursorGrabbed(@handle, grabbed ? true : false) end |
#cursor_visible=(visible) ⇒ Object
Toggle the OS mouse pointer’s visibility while it’s over the window.
91 92 93 |
# File 'lib/sfml/graphics/render_window.rb', line 91 def cursor_visible=(visible) C::Graphics.sfRenderWindow_setMouseCursorVisible(@handle, visible ? true : false) end |
#each_event ⇒ Object
Yields every pending event for this frame, then returns. Without a block returns an Enumerator.
69 70 71 72 73 74 75 |
# File 'lib/sfml/graphics/render_window.rb', line 69 def each_event return enum_for(:each_event) unless block_given? while (event = poll_event) yield event end self end |
#framerate_limit=(value) ⇒ Object
102 103 104 |
# File 'lib/sfml/graphics/render_window.rb', line 102 def framerate_limit=(value) C::Graphics.sfRenderWindow_setFramerateLimit(@handle, Integer(value)) end |
#open? ⇒ Boolean
52 53 54 |
# File 'lib/sfml/graphics/render_window.rb', line 52 def open? C::Graphics.sfRenderWindow_isOpen(@handle) end |
#poll_event ⇒ Object
Returns the next pending Event or nil if the queue is empty.
62 63 64 65 |
# File 'lib/sfml/graphics/render_window.rb', line 62 def poll_event return nil unless C::Graphics.sfRenderWindow_pollEvent(@handle, @event_buffer) Event.from_native(@event_buffer) end |
#run ⇒ Object
Convenience driver loop. Yields the per-frame delta (SFML::Time) and auto-pumps events + display. The block is responsible for #clear and any drawing.
window.run do |dt, events|
events.each { |e| ... }
window.clear(...)
window.draw(...)
end
124 125 126 127 128 129 130 131 132 133 |
# File 'lib/sfml/graphics/render_window.rb', line 124 def run clock = Clock.new while open? dt = clock.restart events = each_event.to_a yield dt, events display end self end |
#size ⇒ Object
110 111 112 113 |
# File 'lib/sfml/graphics/render_window.rb', line 110 def size v = C::Graphics.sfRenderWindow_getSize(@handle) Vector2.new(v[:x], v[:y]) end |