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