4a2344b7c7481195c150791b11c57cbb2ae79c32
[blender.git] / intern / iksolver / test / ik_glut_test / common / GlutMouseManager.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 __GLUTMOUSEMANAGER_H__
29 #define __GLUTMOUSEMANAGER_H__
30
31 #include "MEM_NonCopyable.h"
32 #include "MEM_SmartPtr.h"
33
34 class GlutMouseHandler {
35 public :
36
37         virtual         
38                 void
39         Mouse(
40                 int button,
41                 int state,
42                 int x,
43                 int y
44         ) = 0;
45
46         virtual
47                 void
48         Motion(
49                 int x,
50                 int y
51         ) = 0;
52
53         virtual 
54         ~GlutMouseHandler(
55         ){};            
56 };
57
58 class GlutMouseManager : public MEM_NonCopyable{
59
60 public :
61
62         static
63                 GlutMouseManager *
64         Instance(
65         );
66
67         // these are the functions you should pass to GLUT      
68
69         static
70                 void
71         Mouse(
72                 int button,
73                 int state,
74                 int x,
75                 int y
76         );
77
78         static
79                 void
80         Motion(
81                 int x,
82                 int y
83         );
84
85                 void
86         InstallHandler(
87                 GlutMouseHandler *
88         );
89
90                 void
91         ReleaseHandler(
92         );
93
94         ~GlutMouseManager(
95         );
96
97 private :
98
99         GlutMouseManager (
100         ) :
101                 m_handler (0)
102         {
103         };
104         
105         GlutMouseHandler * m_handler;
106
107         static MEM_SmartPtr<GlutMouseManager> m_s_instance;
108 };      
109
110 #endif
111