Bugfix [#32410] Create New Group (CTRL+G) tried to activate even when nothing is
[blender.git] / source / gameengine / BlenderRoutines / KX_BlenderCanvas.h
1 /*
2  * ***** BEGIN GPL LICENSE BLOCK *****
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU General Public License
6  * as published by the Free Software Foundation; either version 2
7  * of the License, or (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software Foundation,
16  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17  *
18  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
19  * All rights reserved.
20  *
21  * The Original Code is: all of this file.
22  *
23  * Contributor(s): none yet.
24  *
25  * ***** END GPL LICENSE BLOCK *****
26  */
27
28 /** \file KX_BlenderCanvas.h
29  *  \ingroup blroutines
30  */
31
32 #ifndef __KX_BLENDERCANVAS_H__
33 #define __KX_BLENDERCANVAS_H__
34
35 #ifdef WIN32
36 #include <windows.h>
37 #endif 
38
39 #include "GL/glew.h"
40
41 #include "RAS_ICanvas.h"
42 #include "RAS_Rect.h"
43
44 #include "KX_BlenderGL.h"
45
46 #ifdef WITH_CXX_GUARDEDALLOC
47 #include "MEM_guardedalloc.h"
48 #endif
49
50 struct ARegion;
51 struct wmWindow;
52
53 /**
54  * 2D Blender device context abstraction. 
55  * The connection from 3d rendercontext to 2d Blender surface embedding.
56  */
57
58 class KX_BlenderCanvas : public RAS_ICanvas
59 {
60 private:
61         /** Rect that defines the area used for rendering,
62             relative to the context */
63         RAS_Rect m_displayarea;
64
65 public:
66         /* Construct a new canvas.
67          * 
68          * \param area The Blender ARegion to run the game within.
69          */
70         KX_BlenderCanvas(struct wmWindow* win, class RAS_Rect &rect, struct ARegion* ar);
71         ~KX_BlenderCanvas();
72
73                 void 
74         Init(
75         );
76         
77                 void 
78         SwapBuffers(
79         );
80                 void 
81         ResizeWindow(
82                 int width,
83                 int height
84         );
85
86                 void
87         BeginFrame(
88         );
89
90                 void 
91         EndFrame(
92         );
93
94                 void 
95         ClearColor(
96                 float r,
97                 float g,
98                 float b,
99                 float a
100         );
101
102                 void 
103         ClearBuffer(
104                 int type
105         );
106
107                 int 
108         GetWidth(
109         ) const;
110
111                 int 
112         GetHeight(
113         ) const;
114
115                 int
116         GetMouseX(int x
117         );
118
119                 int
120         GetMouseY(int y
121         );
122
123                 float
124         GetMouseNormalizedX(int x
125         );
126
127                 float
128         GetMouseNormalizedY(int y
129         );
130
131         const
132                 RAS_Rect &
133         GetDisplayArea(
134         ) const {
135                 return m_displayarea;
136         };
137
138                 void
139         SetDisplayArea(RAS_Rect *rect
140         ) {
141                 m_displayarea= *rect;
142         };
143
144                 RAS_Rect &
145         GetWindowArea(
146         );
147
148                 void
149         SetViewPort(
150                 int x1, int y1,
151                 int x2, int y2
152         );
153
154                 void 
155         SetMouseState(
156                 RAS_MouseState mousestate
157         );
158
159                 void 
160         SetMousePosition(
161                 int x,
162                 int y
163         );
164
165                 void 
166         MakeScreenShot(
167                 const char* filename
168         );
169         
170         /**
171          * Nothing needs be done for BlenderCanvas
172          * Begin/End Draw, as the game engine GL context
173          * is always current/active.
174          */
175
176                 bool 
177         BeginDraw(
178         ) {
179                         return true;
180         };
181
182                 void 
183         EndDraw(
184         ) {
185         };
186
187 private:
188         /** Blender area the game engine is running within */
189         struct wmWindow* m_win;
190         RAS_Rect        m_frame_rect;
191         RAS_Rect        m_area_rect;
192         short           m_area_left;
193         short           m_area_top;
194
195
196 #ifdef WITH_CXX_GUARDEDALLOC
197         MEM_CXX_CLASS_ALLOC_FUNCS("GE:KX_BlenderCanvas")
198 #endif
199 };
200
201 #endif // __KX_BLENDERCANVAS_H__
202