#include <surfacesdl-graphics.h>
Classes | |
class | AspectRatio |
struct | MousePos |
struct | TransactionDetails |
struct | VideoState |
Public Member Functions | |
SurfaceSdlGraphicsManager (SdlEventSource *sdlEventSource, SdlWindow *window) | |
bool | hasFeature (OSystem::Feature f) const override |
void | setFeatureState (OSystem::Feature f, bool enable) override |
bool | getFeatureState (OSystem::Feature f) const override |
const OSystem::GraphicsMode * | getSupportedGraphicsModes () const override |
int | getDefaultGraphicsMode () const override |
bool | setGraphicsMode (int mode, uint flags=OSystem::kGfxModeNoFlags) override |
int | getGraphicsMode () const override |
uint | getDefaultScaler () const override |
uint | getDefaultScaleFactor () const override |
bool | setScaler (uint mode, int factor) override |
uint | getScaler () const override |
uint | getScaleFactor () const override |
void | initSize (uint w, uint h, const Graphics::PixelFormat *format=NULL) override |
int | getScreenChangeID () const override |
void | beginGFXTransaction () override |
OSystem::TransactionError | endGFXTransaction () override |
int16 | getHeight () const override |
int16 | getWidth () const override |
void | copyRectToScreen (const void *buf, int pitch, int x, int y, int w, int h) override |
Graphics::Surface * | lockScreen () override |
void | unlockScreen () override |
void | fillScreen (uint32 col) override |
void | fillScreen (const Common::Rect &r, uint32 col) override |
void | updateScreen () override |
void | setFocusRectangle (const Common::Rect &rect) override |
void | clearFocusRectangle () override |
Graphics::PixelFormat | getOverlayFormat () const override |
void | clearOverlay () override |
void | grabOverlay (Graphics::Surface &surface) const override |
void | copyRectToOverlay (const void *buf, int pitch, int x, int y, int w, int h) override |
int16 | getOverlayHeight () const override |
int16 | getOverlayWidth () const override |
void | setMouseCursor (const void *buf, uint w, uint h, int hotspotX, int hotspotY, uint32 keycolor, bool dontScale=false, const Graphics::PixelFormat *format=NULL, const byte *mask=NULL) override |
void | setMouseCursor (const void *buf, uint w, uint h, int hotspotX, int hotspotY, uint32 keycolor, bool dontScale, const Graphics::PixelFormat *format, const byte *mask, bool disableKeyColor) |
void | setCursorPalette (const byte *colors, uint start, uint num) override |
bool | notifyEvent (const Common::Event &event) override |
void | notifyVideoExpose () override |
void | notifyResize (const int width, const int height) override |
![]() | |
SdlGraphicsManager (SdlEventSource *source, SdlWindow *window) | |
virtual void | activateManager () |
virtual void | deactivateManager () |
virtual bool | notifyMousePosition (Common::Point &mouse) |
Common::RotationMode | getRotationMode () const override |
virtual bool | showMouse (bool visible) override |
bool | lockMouse (bool lock) override |
void | saveScreenshot () override |
State | getState () const |
bool | setState (const State &state) |
SdlWindow * | getWindow () const |
void | initSizeHint (const Graphics::ModeList &modes) override |
Common::Keymap * | getKeymap () |
![]() | |
void | showOverlay (bool inGUI) override |
void | hideOverlay () override |
bool | isOverlayVisible () const override |
void | setShakePos (int shakeXOffset, int shakeYOffset) override |
int | getWindowWidth () const |
int | getWindowHeight () const |
![]() | |
virtual bool | setShader (const Common::Path &fileName) |
virtual const OSystem::GraphicsMode * | getSupportedStretchModes () const |
virtual int | getDefaultStretchMode () const |
virtual bool | setStretchMode (int mode) |
virtual int | getStretchMode () const |
virtual float | getHiDPIScreenFactor () const |
virtual void | displayMessageOnOSD (const Common::U32String &msg) |
virtual void | displayActivityIconOnOSD (const Graphics::Surface *icon) |
![]() | |
void | setPalette (const Graphics::Palette &pal, uint start=0) |
Graphics::Palette | grabPalette (uint start, uint num) |
![]() | |
virtual void | notifyPoll () |
Protected Types | |
enum | { kTransactionNone = 0, kTransactionActive = 1, kTransactionRollback = 2 } |
enum | { NUM_DIRTY_RECT = 100, MAX_SCALING = 3 } |
![]() | |
enum | CustomEventAction { kActionToggleFullscreen = 100, kActionToggleMouseCapture, kActionToggleResizableWindow, kActionSaveScreenshot, kActionToggleAspectRatioCorrection, kActionToggleFilteredScaling, kActionCycleStretchMode, kActionIncreaseScaleFactor, kActionDecreaseScaleFactor, kActionNextScaleFilter, kActionPreviousScaleFilter } |
Protected Member Functions | |
void | setPalette (const byte *colors, uint start, uint num) override |
void | grabPalette (byte *colors, uint start, uint num) const override |
virtual void | initGraphicsSurface () |
Graphics::PixelFormat | convertSDLPixelFormat (SDL_PixelFormat *in) const |
bool | gameNeedsAspectRatioCorrection () const override |
int | getGameRenderScale () const override |
void | handleResizeImpl (const int width, const int height) override |
virtual void | setupHardwareSize () |
void | fixupResolutionForAspectRatio (AspectRatio desiredAspectRatio, int &width, int &height) const |
virtual void | addDirtyRect (int x, int y, int w, int h, bool inOverlay, bool realCoordinates=false) |
virtual void | drawMouse () |
virtual void | undrawMouse () |
virtual void | blitCursor () |
virtual void | internUpdateScreen () |
virtual void | updateScreen (SDL_Rect *dirtyRectList, int actualDirtyRects) |
virtual bool | loadGFXMode () |
virtual void | unloadGFXMode () |
virtual bool | hotswapGFXMode () |
virtual void | setAspectRatioCorrection (bool enable) |
void | setFilteringMode (bool enable) |
void | setVSync (bool enable) |
bool | saveScreenshot (const Common::Path &filename) const override |
virtual void | setGraphicsModeIntern () |
virtual void | getDefaultResolution (uint &w, uint &h) |
![]() | |
Common::Rect | getPreferredFullscreenResolution () |
bool | defaultGraphicsModeConfig () const |
void | getWindowSizeFromSdl (int *width, int *height) const |
virtual void | showSystemMouseCursor (bool visible) |
void | setSystemMousePosition (const int x, const int y) override |
void | notifyActiveAreaChanged () override |
![]() | |
Common::Point | convertVirtualToWindow (const int x, const int y) const |
Common::Point | convertWindowToVirtual (int x, int y) const |
frac_t | getDesiredGameAspectRatio () const |
void | handleResize (const int width, const int height) |
virtual void | recalculateDisplayAreas () |
bool | showMouse (bool visible) override |
void | warpMouse (int x, int y) override |
void | setMousePosition (int x, int y) |
Static Protected Member Functions | |
static AspectRatio | getDesiredAspectRatio () |
Protected Attributes | |
SDL_Surface * | _screen |
Graphics::PixelFormat | _screenFormat |
Graphics::PixelFormat | _cursorFormat |
SDL_Surface * | _tmpscreen |
SDL_Surface * | _tmpscreen2 |
SDL_Surface * | _overlayscreen |
bool | _useOldSrc |
Graphics::PixelFormat | _overlayFormat |
bool | _isDoubleBuf |
bool | _isHwPalette |
TransactionDetails | _transactionDetails |
VideoState | _videoMode |
VideoState | _oldVideoMode |
int | _transactionMode |
bool | _displayDisabled |
const PluginList & | _scalerPlugins |
ScalerPluginObject * | _scalerPlugin |
Scaler * | _scaler |
Scaler * | _mouseScaler |
uint | _maxExtraPixels |
uint | _extraPixels |
bool | _screenIsLocked |
Graphics::Surface | _framebuffer |
int | _screenChangeCount |
SDL_Rect | _dirtyRectList [2 *NUM_DIRTY_RECT] |
int | _numDirtyRects |
SDL_Rect | _prevDirtyRectList [NUM_DIRTY_RECT] |
int | _numPrevDirtyRects |
SDL_Rect | _mouseLastRect |
SDL_Rect | _mouseNextRect |
MousePos | _mouseCurState |
byte | _mouseKeyColor |
bool | _disableMouseKeyColor |
byte | _mappedMouseKeyColor |
bool | _cursorDontScale |
bool | _cursorPaletteDisabled |
SDL_Surface * | _mouseOrigSurface |
SDL_Surface * | _mouseSurface |
int | _currentShakeXOffset |
int | _currentShakeYOffset |
SDL_Color * | _currentPalette |
uint | _paletteDirtyStart |
uint | _paletteDirtyEnd |
SDL_Color * | _overlayPalette |
bool | _isInOverlayPalette |
SDL_Color * | _cursorPalette |
Common::Mutex | _graphicsMutex |
bool | _enableFocusRectDebugCode |
bool | _enableFocusRect |
Common::Rect | _focusRect |
![]() | |
SDL_Surface * | _hwScreen |
SdlEventSource * | _eventSource |
SdlWindow * | _window |
![]() | |
int | _windowWidth |
int | _windowHeight |
int | _screenAlign |
bool | _overlayVisible |
bool | _overlayInGUI |
int | _gameScreenShakeXOffset |
int | _gameScreenShakeYOffset |
Common::Rect | _gameDrawRect |
Common::Rect | _overlayDrawRect |
DisplayArea | _activeArea |
bool | _forceRedraw |
bool | _cursorVisible |
bool | _cursorNeedsRedraw |
bool | _cursorLastInActiveArea |
int | _cursorX |
int | _cursorY |
SDL graphics manager
|
overrideprotectedvirtual |
Replace the specified range of the palette with new colors. The palette entries from 'start' till (start+num-1) will be replaced - so a full palette update is accomplished via start=0, num=256.
The palette data is specified in interleaved RGB format. That is, the first byte of the memory block 'colors' points at is the red component of the first new color; the second byte the green component of the first new color; the third byte the blue component, the last byte to the alpha (transparency) value. Then the second color starts, and so on. So memory looks like this: R1-G1-B1-R2-G2-B2-R3-...
colors | the new palette data, in interleaved RGB format |
start | the first palette entry to be updated |
num | the number of palette entries to be updated |
Implements GraphicsManager.
|
overrideprotectedvirtual |
Grabs a specified part of the currently active palette. The format is the same as for setPalette.
This should return exactly the same RGB data as was setup via previous setPalette calls.
For example, for every valid value of start and num of the following code:
byte origPal[num*3]; // Setup origPal's data however you like g_system->setPalette(origPal, start, num); byte obtainedPal[num*3]; g_system->grabPalette(obtainedPal, start, num);
the following should be true:
memcmp(origPal, obtainedPal, num*3) == 0
colors | the palette data, in interleaved RGB format |
start | the first platte entry to be read |
num | the number of palette entries to be read |
Implements GraphicsManager.
|
protected |
Convert from the SDL pixel format to Graphics::PixelFormat
in | The SDL pixel format to convert |
out | A pixel format to be written to |
|
overridevirtual |
Notify the observer of an incoming event.
An observer is supposed to 'eat' the event, with returning true, when it wants to prevent other observers from receiving the event. A usage example here is the keymapper: If it processes an Event, it should 'eat' it and create a new event, which the EventDispatcher will then catch.
event | The event that is incoming. |
true | If the event should not be passed to other observers, false otherwise. |
Reimplemented from SdlGraphicsManager.
|
overridevirtual |
Notify the graphics manager that the graphics needs to be redrawn, since the application window was modified.
This is basically called when SDL_VIDEOEXPOSE was received.
Implements SdlGraphicsManager.
|
overridevirtual |
Notify the graphics manager about a resize event.
It is noteworthy that the requested width/height should actually be set up as is and not changed by the graphics manager, since otherwise it may lead to odd behavior for certain window managers.
It is only required to overwrite this method in case you want a resizable window. The default implementation just does nothing.
width | Requested window width. |
height | Requested window height. |
Reimplemented from SdlGraphicsManager.
|
inlineoverrideprotectedvirtual |
Implements WindowedGraphicsManager.
|
inlineoverrideprotectedvirtual |
Reimplemented from WindowedGraphicsManager.
|
overrideprotectedvirtual |
Backend-specific implementation for updating internal surfaces that need to reflect the new window size.
Reimplemented from SdlGraphicsManager.
|
protected |
Unseen game screen
|
protected |
Temporary screen (for scalers)
|
protected |
Temporary screen (for scalers)
|
protected |
Mutex which prevents multiple threads from interfering with each other when accessing the screen.