source: Packages/glfw/Package.h @ 40

Revision 40, 6.9 KB checked in by art, 12 years ago (diff)

Bindings changed to Packages

Line 
1/***************************************************************************
2 *                                                                         *
3 *   (c) Art Tevs, MPI Informatik Saarbruecken                             *
4 *       mailto: <tevs@mpi-sb.mpg.de>                                      *
5 *                                                                         *
6 *   This program is free software; you can redistribute it and/or modify  *
7 *   it under the terms of the GNU General Public License as published by  *
8 *   the Free Software Foundation; either version 2 of the License, or     *
9 *   (at your option) any later version.                                   *
10 *                                                                         *
11 ***************************************************************************/
12
13#ifndef __GLFW_PACKAGE_PLUGIN_H_
14#define __GLFW_PACKAGE_PLUGIN_H_
15
16//----------------------------------------------------------------------------------
17// Includes
18//----------------------------------------------------------------------------------
19#include <nrEngine/nrEngine.h>
20#include "Event.h"
21
22namespace nrPackage {
23
24    namespace glfw {
25
26        using namespace nrEngine;
27       
28        //! Forward declaration
29        class Task;
30
31        //! Main class of the glfw package
32        /**
33        * Binding is a main class of the glfw loadtime plugin (or package).
34        * It is declared as a singleton, so it can be created only once.
35        * This will initialize the subsysems like glfw framework and
36        * event management. So you have to create a instance of this class
37        * to provide the user the functionality of this package.
38        **/
39        class _NRPackageExport Package : public nrEngine::Package{
40
41            public:
42
43                /**
44                * Default constructor used, to create instance and
45                * to initialize all underlying systems.
46                *
47                * NOTE: You have to instantiate a class after initialization
48                *       of the engine, otherwise exception will be thrown
49                **/
50                Package();
51
52                /**
53                * Release used memory. Close glfw subsystem and close
54                * the task running in the kernel
55                **/
56                ~Package();
57
58                /**
59                 * @see nrEngine::Package::getName()
60                 **/
61                const std::string& getName();
62
63                /**
64                 * @see nrEngine::Package::getFullName()
65                 **/
66                const std::string& getFullName();
67
68                /**
69                 * Open a window where all OpenGL operations access on.
70                 *
71                 * @param width,height Size of the window
72                 * @param fullscreen If true, create fullscreen
73                 * @param bpp Colorbuffer bit depth (default 32)
74                 * @param depth Depthbuffer bit depth (default 24)
75                 * @param stencil Stencilbuffer bit depth (default 8)
76                 * @return true if it succeeds, false otherwise. See log files
77                 **/
78                bool createWindow(nrEngine::int32 width, nrEngine::int32 height, bool fullscreen, nrEngine::int32 bpp = 32, nrEngine::int32 depth = 24, nrEngine::int32 stencil = 8);
79
80                /**
81                 * Close the window and kill all used OpenGL contexts
82                 **/
83                void closeWindow();
84
85                /**
86                 * Set window data, as title, position and size
87                 **/
88                void setWindow(const std::string& title, nrEngine::int32 width = 0, nrEngine::int32 height = 0);
89
90                /**
91                 * Get window title
92                 **/
93                const std::string& getWindowTitle() const { return mWindowTitle; }
94               
95                /**
96                 * Get the name of the message channel where events are
97                 * published
98                 **/
99                static const std::string& getChannelName();
100
101                /**
102                 * Get current mouse position
103                 **/
104                void getMousePos(nrEngine::int32& x, nrEngine::int32& y);
105
106                /**
107                 * Set mouse to new position
108                 **/
109                void setMousePos(nrEngine::int32 x, nrEngine::int32 y);
110
111                /**
112                 * Check if a certain key is down.
113                 **/
114                bool isKeyDown(nrEngine::keyIndex) const ;
115               
116                /**
117                 * Get current window width
118                **/
119                nrEngine::int32 getWindowWidth() const { return mWindowWidth; }
120
121                /**
122                 * Get current window height
123                **/
124                nrEngine::int32 getWindowHeight() const { return mWindowHeight; }
125
126                /**
127                 * Access to the singleton object
128                 **/
129                static Package* instance();
130   
131                /**
132                 * Release the singleton object
133                 **/
134                static void release();
135                 
136                 /**
137                 * Check whenever the engine'S singleton was created before
138                 */
139                 static bool valid();
140
141                 /**
142                  * In normal keys the key event is only initiated if the state of the key is changed.
143                  * This means, that you have always to poll for a key state if key is down (i.e. isKeyDown()).
144                  * However you can specify keys to emit keypress events on every task update even if they are down on.
145                  *
146                  * @param keyIndex Index of a key to be monitored
147                  **/
148                 void addKeyDownMonitor(nrEngine::keyIndex);
149                 
150                 /**
151                 * Remove a key from the key down monitor @see addKeyDownMonitor()
152                 **/
153                 void delKeyDownMonitor(nrEngine::keyIndex);
154                 
155            private:
156
157                //! Singleton to hold the package
158                static SharedPtr<Package> sSingleton;
159
160                //! Task object of the package
161                SharedPtr<Task> mTask;
162               
163                //! Name of the package
164                std::string mName;
165
166                //! Full name
167                std::string mFullName;
168
169                //! Is window already create
170                std::string mWindowTitle;
171
172                //! Current window size
173                nrEngine::int32 mWindowWidth, mWindowHeight;
174
175                //! Is already created
176                bool bWindowCreated;
177               
178                //! Callback function to close the window
179                static nrEngine::int32 closeWindowCallback();
180
181                ScriptFunctionDef(resizeWindow);
182                ScriptFunctionDef(openWindow);
183                ScriptFunctionDef(setWindowTitle);
184
185        };
186
187    };
188};
189
190#endif
191
Note: See TracBrowser for help on using the repository browser.