1 /* 2 * This source file is part of libRocket, the HTML/CSS Interface Middleware 3 * 4 * For the latest information, see http://www.librocket.com 5 * 6 * Copyright (c) 2008-2010 CodePoint Ltd, Shift Technology Ltd 7 * 8 * Permission is hereby granted, free of charge, to any person obtaining a copy 9 * of this software and associated documentation files (the "Software"), to deal 10 * in the Software without restriction, including without limitation the rights 11 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 12 * copies of the Software, and to permit persons to whom the Software is 13 * furnished to do so, subject to the following conditions: 14 * 15 * The above copyright notice and this permission notice shall be included in 16 * all copies or substantial portions of the Software. 17 * 18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 19 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 20 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 21 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 22 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 23 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 24 * THE SOFTWARE. 25 * 26 */ 27 28 #ifndef ROCKETSHELL_H 29 #define ROCKETSHELL_H 30 31 #include <Rocket/Core/Types.h> 32 #include <Rocket/Core/Context.h> 33 #include <Rocket/Core/SystemInterface.h> 34 #include <ShellRenderInterfaceExtensions.h> 35 36 #ifdef ROCKET_PLATFORM_WIN32 37 #define PATH_SEPARATOR ";" 38 #else 39 #define PATH_SEPARATOR ":" 40 #endif 41 42 /** 43 Shell functions for creating windows, attaching OpenGL and handling input in a platform independent way. 44 @author Lloyd Weehuizen 45 */ 46 47 class Shell 48 { 49 public: 50 /// Initialise the shell. 51 /// @param[in] path The path (relative to the current working directory) of the application's working directory. 52 static bool Initialise(const Rocket::Core::String& path); 53 /// Shutdown the shell. 54 static void Shutdown(); 55 56 /// Loads the default fonts from the given path. 57 static void LoadFonts(const char* directory); 58 59 /// Returns the path to the application's executable. 60 static const Rocket::Core::String& GetExecutablePath(); 61 62 /// Open a platform specific window, optionally initialising an OpenGL context on it. 63 /// @param[in] title Title of the window. 64 /// @param[in] srie Provides the interface for attaching a renderer to the window and performing related bits of interface. 65 static bool OpenWindow(const char* title, ShellRenderInterfaceExtensions *_shell_renderer, unsigned int width, unsigned int height, bool allow_resize); 66 /// Close the active window. 67 static void CloseWindow(); 68 69 /// Returns a platform-dependent handle to the window. 70 static void* GetWindowHandle(); 71 72 /// Run the event loop, calling the idle function every frame. 73 typedef void (*ShellIdleFunction)(); 74 static void EventLoop(ShellIdleFunction idle_function); 75 static void RequestExit(); 76 77 /// Display an error message. 78 static void DisplayError(const char* fmt, ...); 79 /// Log a message to the debugger. 80 static void Log(const char* fmt, ...); 81 82 /// Get the number of seconds that have passed since shell startup. 83 static float GetElapsedTime(); 84 85 /// Sets the context to send window resized events to. 86 /// @param[in] context The context to send events to. 87 static void SetContext(Rocket::Core::Context* context); 88 89 private: 90 static Rocket::Core::String executable_path; 91 static Rocket::Core::Context* context; 92 }; 93 94 #include "ShellRenderInterfaceOpenGL.h" 95 #include "ShellSystemInterface.h" 96 97 #endif 98