1 /*
2 * Clutter.
3 *
4 * An OpenGL based 'interactive canvas' library.
5 *
6 * Copyright (C) 2009 Intel Corp.
7 *
8 * This library is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Lesser General Public
10 * License as published by the Free Software Foundation; either
11 * version 2 of the License, or (at your option) any later version.
12 *
13 * This library 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 GNU
16 * Lesser General Public License for more details.
17 *
18 * You should have received a copy of the GNU Lesser General Public
19 * License along with this library. If not, see <http://www.gnu.org/licenses/>.
20 *
21 * Author: Emmanuele Bassi <ebassi@linux.intel.com>
22 */
23
24 #ifdef HAVE_CONFIG_H
25 #include "config.h"
26 #endif
27
28 #include "clutter-backend-win32.h"
29 #include "clutter-device-manager-win32.h"
30 #include "clutter-device-manager-win32.h"
31 #include "clutter-stage-win32.h"
32
33 #include "clutter-backend.h"
34 #include "clutter-debug.h"
35 #include "clutter-device-manager-private.h"
36 #include "clutter-private.h"
37
38 enum
39 {
40 PROP_0
41 };
42
43 G_DEFINE_TYPE (ClutterDeviceManagerWin32,
44 clutter_device_manager_win32,
45 CLUTTER_TYPE_DEVICE_MANAGER);
46
47 static void
clutter_device_manager_win32_constructed(GObject * gobject)48 clutter_device_manager_win32_constructed (GObject *gobject)
49 {
50 ClutterDeviceManager *manager = CLUTTER_DEVICE_MANAGER (gobject);
51 ClutterDeviceManagerWin32 *manager_win32;
52 ClutterInputDevice *device;
53
54 device = g_object_new (CLUTTER_TYPE_INPUT_DEVICE,
55 "id", 0,
56 "name", "Core Pointer",
57 "device-type", CLUTTER_POINTER_DEVICE,
58 "device-mode", CLUTTER_INPUT_MODE_MASTER,
59 "has-cursor", TRUE,
60 "enabled", TRUE,
61 NULL);
62 CLUTTER_NOTE (BACKEND, "Added core pointer device");
63 _clutter_device_manager_add_device (manager, device);
64
65 device = g_object_new (CLUTTER_TYPE_INPUT_DEVICE,
66 "id", 1,
67 "name", "Core Keyboard",
68 "device-type", CLUTTER_KEYBOARD_DEVICE,
69 "device-mode", CLUTTER_INPUT_MODE_MASTER,
70 "enabled", TRUE,
71 NULL);
72 CLUTTER_NOTE (BACKEND, "Added core keyboard device");
73 _clutter_device_manager_add_device (manager, device);
74
75 manager_win32 = CLUTTER_DEVICE_MANAGER_WIN32 (manager);
76
77 _clutter_input_device_set_associated_device (manager_win32->core_pointer,
78 manager_win32->core_keyboard);
79 _clutter_input_device_set_associated_device (manager_win32->core_keyboard,
80 manager_win32->core_pointer);
81 }
82
83 static void
clutter_device_manager_win32_add_device(ClutterDeviceManager * manager,ClutterInputDevice * device)84 clutter_device_manager_win32_add_device (ClutterDeviceManager *manager,
85 ClutterInputDevice *device)
86 {
87 ClutterDeviceManagerWin32 *manager_win32 = CLUTTER_DEVICE_MANAGER_WIN32 (manager);
88 ClutterInputDeviceType device_type;
89 gboolean is_pointer, is_keyboard;
90
91 device_type = clutter_input_device_get_device_type (device);
92 is_pointer = (device_type == CLUTTER_POINTER_DEVICE) ? TRUE : FALSE;
93 is_keyboard = (device_type == CLUTTER_KEYBOARD_DEVICE) ? TRUE : FALSE;
94
95 manager_win32->devices = g_slist_prepend (manager_win32->devices, device);
96
97 if (is_pointer && manager_win32->core_pointer == NULL)
98 manager_win32->core_pointer = device;
99
100 if (is_keyboard && manager_win32->core_keyboard == NULL)
101 manager_win32->core_keyboard = device;
102 }
103
104 static void
clutter_device_manager_win32_remove_device(ClutterDeviceManager * manager,ClutterInputDevice * device)105 clutter_device_manager_win32_remove_device (ClutterDeviceManager *manager,
106 ClutterInputDevice *device)
107 {
108 ClutterDeviceManagerWin32 *manager_win32 = CLUTTER_DEVICE_MANAGER_WIN32 (manager);
109
110 manager_win32->devices = g_slist_remove (manager_win32->devices, device);
111 }
112
113 static const GSList *
clutter_device_manager_win32_get_devices(ClutterDeviceManager * manager)114 clutter_device_manager_win32_get_devices (ClutterDeviceManager *manager)
115 {
116 return CLUTTER_DEVICE_MANAGER_WIN32 (manager)->devices;
117 }
118
119 static ClutterInputDevice *
clutter_device_manager_win32_get_core_device(ClutterDeviceManager * manager,ClutterInputDeviceType type)120 clutter_device_manager_win32_get_core_device (ClutterDeviceManager *manager,
121 ClutterInputDeviceType type)
122 {
123 ClutterDeviceManagerWin32 *manager_win32;
124
125 manager_win32 = CLUTTER_DEVICE_MANAGER_WIN32 (manager);
126
127 switch (type)
128 {
129 case CLUTTER_POINTER_DEVICE:
130 return manager_win32->core_pointer;
131
132 case CLUTTER_KEYBOARD_DEVICE:
133 return manager_win32->core_keyboard;
134
135 case CLUTTER_EXTENSION_DEVICE:
136 default:
137 return NULL;
138 }
139
140 return NULL;
141 }
142
143 static ClutterInputDevice *
clutter_device_manager_win32_get_device(ClutterDeviceManager * manager,gint id)144 clutter_device_manager_win32_get_device (ClutterDeviceManager *manager,
145 gint id)
146 {
147 ClutterDeviceManagerWin32 *manager_win32 = CLUTTER_DEVICE_MANAGER_WIN32 (manager);
148 GSList *l;
149
150 for (l = manager_win32->devices; l != NULL; l = l->next)
151 {
152 ClutterInputDevice *device = l->data;
153
154 if (clutter_input_device_get_device_id (device) == id)
155 return device;
156 }
157
158 return NULL;
159 }
160
161 static void
clutter_device_manager_win32_class_init(ClutterDeviceManagerWin32Class * klass)162 clutter_device_manager_win32_class_init (ClutterDeviceManagerWin32Class *klass)
163 {
164 ClutterDeviceManagerClass *manager_class;
165 GObjectClass *gobject_class = (GObjectClass *) klass;
166
167 gobject_class->constructed = clutter_device_manager_win32_constructed;
168
169 manager_class = CLUTTER_DEVICE_MANAGER_CLASS (klass);
170 manager_class->add_device = clutter_device_manager_win32_add_device;
171 manager_class->remove_device = clutter_device_manager_win32_remove_device;
172 manager_class->get_devices = clutter_device_manager_win32_get_devices;
173 manager_class->get_core_device = clutter_device_manager_win32_get_core_device;
174 manager_class->get_device = clutter_device_manager_win32_get_device;
175 }
176
177 static void
clutter_device_manager_win32_init(ClutterDeviceManagerWin32 * self)178 clutter_device_manager_win32_init (ClutterDeviceManagerWin32 *self)
179 {
180 }
181