ea39b6835f6a3f1de95463768f4b6c1b3546594e
[blender.git] / intern / iksolver / test / ik_glut_test / common / GlutKeyboardManager.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 #ifndef __GLUTKEYBOARDMANAGER_H__
29 #define __GLUTKEYBOARDMANAGER_H__
30
31 #include "MEM_NonCopyable.h"
32 #include "MEM_SmartPtr.h"
33
34 // So pissed off with Glut callback stuff
35 // that is impossible to call objects unless they are global
36
37 // inherit from GlutKeyboardHandler and installl the drawer in the singleton
38 // class GlutKeyboardManager.
39
40 class GlutKeyboardHandler : public MEM_NonCopyable {
41 public :
42
43         virtual 
44                 void
45         HandleKeyboard(
46                 unsigned char key,
47                 int x,
48                 int y
49         )= 0;
50
51         virtual 
52         ~GlutKeyboardHandler(
53         ){};            
54 };
55
56 class GlutKeyboardManager : public MEM_NonCopyable{
57
58 public :
59
60         static
61                 GlutKeyboardManager *
62         Instance(
63         );
64
65         // this is the function you should pass to glut
66
67         static
68                 void
69         HandleKeyboard(
70                 unsigned char key,
71                 int x,
72                 int y
73         );
74
75                 void
76         InstallHandler(
77                 GlutKeyboardHandler *
78         );
79
80                 void
81         ReleaseHandler(
82         );
83
84         ~GlutKeyboardManager(
85         );
86
87 private :
88
89         GlutKeyboardManager (
90         ) :
91                 m_handler (0)
92         {
93         };
94         
95         GlutKeyboardHandler * m_handler;
96
97         static MEM_SmartPtr<GlutKeyboardManager> m_s_instance;
98 };      
99
100 #endif
101