/* * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /** \file * \ingroup GHOST * Declaration of GHOST_SystemSDL class. */ #pragma once #include "../GHOST_Types.h" #include "GHOST_DisplayManagerSDL.h" #include "GHOST_Event.h" #include "GHOST_System.h" #include "GHOST_TimerManager.h" #include "GHOST_WindowSDL.h" extern "C" { #include "SDL.h" } #if !SDL_VERSION_ATLEAST(2, 0, 0) # error "SDL 2.0 or newer is needed to build with Ghost" #endif class GHOST_WindowSDL; class GHOST_SystemSDL : public GHOST_System { public: void addDirtyWindow(GHOST_WindowSDL *bad_wind); GHOST_SystemSDL(); ~GHOST_SystemSDL(); bool processEvents(bool waitForEvent); int toggleConsole(int action) { return 0; } GHOST_TSuccess getModifierKeys(GHOST_ModifierKeys &keys) const; GHOST_TSuccess getButtons(GHOST_Buttons &buttons) const; char *getClipboard(bool selection) const; void putClipboard(const char *buffer, bool selection) const; uint64_t getMilliSeconds(); uint8_t getNumDisplays() const; GHOST_TSuccess getCursorPosition(int32_t &x, int32_t &y) const; GHOST_TSuccess setCursorPosition(int32_t x, int32_t y); void getAllDisplayDimensions(uint32_t &width, uint32_t &height) const; void getMainDisplayDimensions(uint32_t &width, uint32_t &height) const; GHOST_IContext *createOffscreenContext(GHOST_GLSettings glSettings); GHOST_TSuccess disposeContext(GHOST_IContext *context); private: GHOST_TSuccess init(); GHOST_IWindow *createWindow(const char *title, int32_t left, int32_t top, uint32_t width, uint32_t height, GHOST_TWindowState state, GHOST_TDrawingContextType type, GHOST_GLSettings glSettings, const bool exclusive = false, const bool is_dialog = false, const GHOST_IWindow *parentWindow = NULL); /* SDL specific */ GHOST_WindowSDL *findGhostWindow(SDL_Window *sdl_win); bool generateWindowExposeEvents(); void processEvent(SDL_Event *sdl_event); /** The vector of windows that need to be updated. */ std::vector m_dirty_windows; };