Added group defaultconfig to group mainmodule.
[blender-staging.git] / intern / bmfont / test / simpletest / BMF_Test.cpp
1 /**
2  * $Id$
3  * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
4  *
5  * This program is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU General Public License
7  * as published by the Free Software Foundation; either version 2
8  * of the License, or (at your option) any later version. The Blender
9  * Foundation also sells licenses for use in proprietary software under
10  * the Blender License.  See http://www.blender.org/BL/ for information
11  * about this.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, write to the Free Software Foundation,
20  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
21  *
22  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
23  * All rights reserved.
24  *
25  * The Original Code is: all of this file.
26  *
27  * Contributor(s): none yet.
28  *
29  * ***** END GPL/BL DUAL LICENSE BLOCK *****
30  */
31
32 /**
33
34  * $Id$
35  * Copyright (C) 2001 NaN Technologies B.V.
36  * Simple test file for the bitmap font library using GHOST.
37  * @author      Maarten Gribnau
38  * @date        November 15, 2001
39  */
40
41 #include <iostream>
42
43 #ifdef HAVE_CONFIG_H
44 #include <config.h>
45 #endif
46
47 #define FALSE 0
48 #define TRUE 1
49
50 #if defined(WIN32) || defined(__APPLE__)
51 #ifdef WIN32
52 #include <windows.h>
53 #include <GL/gl.h>
54 #else // WIN32
55 // __APPLE__ is defined
56 #include <AGL/gl.h>
57 #endif // WIN32
58 #else // defined(WIN32) || defined(__APPLE__)
59 #include <GL/gl.h>
60 #endif // defined(WIN32) || defined(__APPLE__)
61
62
63 #include "STR_String.h"
64 #include "GHOST_Rect.h"
65
66 #include "GHOST_ISystem.h"
67 #include "GHOST_IEvent.h"
68 #include "GHOST_IEventConsumer.h"
69
70 #include "BMF_Api.h"
71
72 static class Application* fApp;
73 static GHOST_ISystem* fSystem = 0;
74
75
76 static void drawGL()
77 {
78         GLint x = 10, y = 10;
79
80         ::glRasterPos2i(x, y);
81         BMF_Font *font = BMF_GetFont(BMF_kHelvetica10);
82         BMF_DrawString(font, "Helvetica 10 point");
83         y += 14;
84         ::glRasterPos2i(x, y);
85         font = BMF_GetFont(BMF_kHelvetica12);
86         BMF_DrawString(font, "Helvetica 12 point");
87         y += 16;
88         ::glRasterPos2i(x, y);
89         font = BMF_GetFont(BMF_kHelveticaBold8);
90         BMF_DrawString(font, "Helvetica Bold 8 point");
91         y += 12;
92         ::glRasterPos2i(x, y);
93         font = BMF_GetFont(BMF_kHelveticaBold10);
94         BMF_DrawString(font, "Helvetica Bold 10 point");
95         y += 14;
96         ::glRasterPos2i(x, y);
97         font = BMF_GetFont(BMF_kHelveticaBold12);
98         BMF_DrawString(font, "Helvetica Bold 12 point");
99         y += 16;
100         ::glRasterPos2i(x, y);
101         font = BMF_GetFont(BMF_kHelveticaBold14);
102         BMF_DrawString(font, "Helvetica Bold 14 point");
103         y += 18;
104         ::glRasterPos2i(x, y);
105         font = BMF_GetFont(BMF_kScreen12);
106         BMF_DrawString(font, "Screen 12 point");
107         y += 16;
108         ::glRasterPos2i(x, y);
109         font = BMF_GetFont(BMF_kScreen14);
110         BMF_DrawString(font, "Screen 14 point");
111         y += 18;
112         ::glRasterPos2i(x, y);
113         font = BMF_GetFont(BMF_kScreen15);
114         BMF_DrawString(font, "Screen 15 point");
115 }
116
117
118 static void setViewPortGL(GHOST_IWindow* window)
119 {
120     window->activateDrawingContext();
121     GHOST_Rect bnds;
122         window->getClientBounds(bnds);
123
124         ::glViewport(0, 0, bnds.getWidth(), bnds.getHeight());
125
126         ::glMatrixMode(GL_PROJECTION);
127         ::glLoadIdentity();
128         ::glOrtho(0, bnds.getWidth(), 0, bnds.getHeight(), -10, 10);
129         
130         ::glClearColor(.2f,0.0f,0.0f,0.0f);
131         ::glClear(GL_COLOR_BUFFER_BIT);
132 }
133
134
135
136 class Application : public GHOST_IEventConsumer {
137 public:
138         Application(GHOST_ISystem* system);
139         virtual bool processEvent(GHOST_IEvent* event);
140
141         GHOST_ISystem* m_system;
142         GHOST_IWindow* m_mainWindow;
143         bool m_exitRequested;
144 };
145
146
147 Application::Application(GHOST_ISystem* system)
148         : m_system(system), m_mainWindow(0), m_exitRequested(false)
149 {
150         fApp = this;
151
152         // Create the main window
153         STR_String title1 ("gears - main window");
154         m_mainWindow = system->createWindow(title1, 10, 64, 320, 200, GHOST_kWindowStateNormal, GHOST_kDrawingContextTypeOpenGL,FALSE);
155     if (!m_mainWindow) {
156                 std::cout << "could not create main window\n";
157         exit(-1);
158     }
159 }
160
161
162 bool Application::processEvent(GHOST_IEvent* event)
163 {
164         bool handled = true;
165
166         switch (event->getType()) {
167         case GHOST_kEventWindowClose:
168                 {
169                 GHOST_IWindow* window2 = event->getWindow();
170                 if (window2 == m_mainWindow) {
171                         exit(0);
172                 } else {
173                         m_system->disposeWindow(window2);
174                 }
175                 }
176                 break;
177
178         case GHOST_kEventWindowActivate:
179                 handled = false;
180                 break;
181         case GHOST_kEventWindowDeactivate:
182                 handled = false;
183                 break;
184         case GHOST_kEventWindowUpdate:
185                 {
186                         GHOST_IWindow* window2 = event->getWindow();
187                         if (!m_system->validWindow(window2)) break;
188                         {
189                                 setViewPortGL(window2);
190                                 drawGL();
191                                 window2->swapBuffers();
192                         }
193                 }
194                 break;
195                 
196         default:
197                 handled = false;
198                 break;
199         }
200         return handled;
201 }
202
203
204 int main(int /*argc*/, char** /*argv*/)
205 {
206         // Create the system
207         GHOST_ISystem::createSystem();
208         fSystem = GHOST_ISystem::getSystem();
209
210         if (fSystem) {
211                 // Create an application object
212                 Application app (fSystem);
213
214                 // Add the application as event consumer
215                 fSystem->addEventConsumer(&app);
216
217                 // Enter main loop
218                 while (!app.m_exitRequested) {
219                         fSystem->processEvents(TRUE);
220                         fSystem->dispatchEvents();
221                 }
222         }
223
224         // Dispose the system
225         GHOST_ISystem::disposeSystem();
226
227         return 0;
228 }
229