Class Rubygame::Screen
In: ext/rubygame/rubygame_event.c
Parent: Rubygame::Surface

Screen represents the display window for the game. The Screen is a special Surface that is displayed to the user. By changing and then updating the Screen many times per second, we can create the illusion of continous motion.

Screen inherits most of the Surface methods, and can be passed to methods which expect a Surface, including Surface#blit and the Draw functions. However, the Screen cannot have a colorkey or an alpha channel, so Surface#set_colorkey and Surface#set_alpha are not inherited.

Please note that only one Screen can exist, per application, at a time; this is a limitation of SDL. You must use Screen.set_mode to create the Screen or modify its properties.

Also note that no changes to the Screen will be seen until it is refreshed. See update, update_rects, and flip for ways to refresh all or part of the Screen.

Methods

Public Class methods

Returns the current display window, or raises SDLError if it fails to get it (for example, if it doesn‘t exist yet).

Create a new Rubygame window if there is none, or modify the existing one. You cannot create more than one Screen; the existing one will be replaced. (This is a limitation of SDL.) Returns the resulting Screen.

This method takes these arguments:

size:requested window size (in pixels), in the form [width,height]
depth:requested color depth (in bits per pixel). If 0 (default), the current system color depth.
flags:an Array of zero or more of the following flags (located under the Rubygame module).
SWSURFACE:Create the video surface in system memory.
HWSURFACE:Create the video surface in video memory.
ASYNCBLIT:Enables the use of asynchronous updates of the display surface. This will usually slow down blitting on single CPU machines, but may provide a speed increase on SMP systems.
ANYFORMAT:Normally, if a video surface of the requested bits-per-pixel (bpp) is not available, Rubygame will emulate one with a shadow surface. Passing ANYFORMAT prevents this and causes Rubygame to use the video surface regardless of its depth.
DOUBLEBUF:Enable hardware double buffering; only valid with HWSURFACE. Calling flip will flip the buffers and update the screen. All drawing will take place on the surface that is not displayed at the moment. If double buffering could not be enabled then flip will just update the entire screen.
FULLSCREEN:Rubygame will attempt to use a fullscreen mode. If a hardware resolution change is not possible (for whatever reason), the next higher resolution will be used and the display window centered on a black background.
OPENGL:Create an OpenGL rendering context. You must set proper OpenGL video attributes with GL#set_attrib before calling this method with this flag. You can then use separate opengl libraries (for example rbogl) to do all OpenGL-related functions. Please note that you can‘t blit or draw regular SDL Surfaces onto an OpenGL-mode screen; you must use OpenGL functions.
RESIZABLE:Create a resizable window. When the window is resized by the user, a ResizeEvent is generated and set_mode can be called again with the new size.
NOFRAME:If possible, create a window with no title bar or frame decoration. Fullscreen modes automatically have this flag set.

Public Instance methods

If the Rubygame display is double-buffered (see set_mode), flips the buffers and updates the whole screen. Otherwise, just updates the whole screen.

Set whether the mouse cursor is displayed or not. If value is true, the cursor will be shown; if false, it will be hidden. See also show_cursor?

Returns true if the mouse cursor is shown, or false if hidden. See also show_cursor=

Returns the current window title for the Screen. The default is an empty string.

Sets the window title for the Screen.

title:a String, (usually) displayed at the top of the Rubygame window (when not in fullscreen mode). If omitted or nil, title will be an empty string. How this string is displayed (if at all) is system-dependent.

Updates (refreshes) all or part of the Rubygame window, revealing to the user any changes that have been made since the last update. If you‘re using a double-buffered display (see Display.set_mode), you should use Screen#flip instead.

This method takes these arguments:

rect:a Rubygame::Rect representing the area of the screen to update. Can also be an length-4 Array, or given as 4 separate arguments. If omitted or nil, the entire screen is updated.

Updates (as Screen#update does) several areas of the screen.

This method takes these arguments:

rects:an Array containing any number of Rect objects, each rect representing a portion of the screen to update.

[Validate]