1
/* LIBGIMP - The GIMP Library
2
* Copyright (C) 1995-1997 Peter Mattis and Spencer Kimball
4
* gimpcontrollerwheel.c
5
* Copyright (C) 2004 Michael Natterer <mitch@gimp.org>
7
* This library is free software; you can redistribute it and/or
8
* modify it under the terms of the GNU Lesser General Public
9
* License as published by the Free Software Foundation; either
10
* version 2 of the License, or (at your option) any later version.
12
* This library is distributed in the hope that it will be useful,
13
* but WITHOUT ANY WARRANTY; without even the implied warranty of
14
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15
* Lesser General Public License for more details.
17
* You should have received a copy of the GNU Lesser General Public
18
* License along with this library; if not, write to the
19
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
20
* Boston, MA 02111-1307, USA.
27
#include "libgimpwidgets/gimpwidgets.h"
29
#include "widgets-types.h"
31
#include "gimpcontrollerwheel.h"
32
#include "gimphelp-ids.h"
34
#include "gimp-intl.h"
37
typedef struct _WheelEvent WheelEvent;
41
GdkScrollDirection direction;
42
GdkModifierType modifiers;
48
static void gimp_controller_wheel_class_init (GimpControllerWheelClass *klass);
49
static void gimp_controller_wheel_init (GimpControllerWheel *wheel);
51
static GObject * gimp_controller_wheel_constructor (GType type,
53
GObjectConstructParam *params);
55
static gint gimp_controller_wheel_get_n_events (GimpController *controller);
56
static const gchar * gimp_controller_wheel_get_event_name (GimpController *controller,
58
static const gchar * gimp_controller_wheel_get_event_blurb (GimpController *controller,
62
static GimpControllerClass *parent_class = NULL;
64
static const WheelEvent wheel_events[] =
66
{ GDK_SCROLL_UP, GDK_MOD1_MASK | GDK_CONTROL_MASK | GDK_SHIFT_MASK,
67
"scroll-up-shift-control-alt",
68
N_("Scroll Up (Shift + Control + Alt)") },
69
{ GDK_SCROLL_UP, GDK_MOD1_MASK | GDK_CONTROL_MASK,
70
"scroll-up-control-alt",
71
N_("Scroll Up (Control + Alt)") },
72
{ GDK_SCROLL_UP, GDK_MOD1_MASK | GDK_SHIFT_MASK,
73
"scroll-up-shift-alt",
74
N_("Scroll Up (Shift + Alt)") },
75
{ GDK_SCROLL_UP, GDK_CONTROL_MASK | GDK_SHIFT_MASK,
76
"scroll-up-shift-control",
77
N_("Scroll Up (Shift + Control)") },
78
{ GDK_SCROLL_UP, GDK_MOD1_MASK,
80
N_("Scroll Up (Alt)") },
81
{ GDK_SCROLL_UP, GDK_CONTROL_MASK,
83
N_("Scroll Up (Control)") },
84
{ GDK_SCROLL_UP, GDK_SHIFT_MASK,
86
N_("Scroll Up (Shift)") },
91
{ GDK_SCROLL_DOWN, GDK_MOD1_MASK | GDK_CONTROL_MASK | GDK_SHIFT_MASK,
92
"scroll-down-shift-control-alt",
93
N_("Scroll Down (Shift + Control + Alt)") },
94
{ GDK_SCROLL_DOWN, GDK_MOD1_MASK | GDK_CONTROL_MASK,
95
"scroll-down-control-alt",
96
N_("Scroll Down (Control + Alt)") },
97
{ GDK_SCROLL_DOWN, GDK_MOD1_MASK | GDK_SHIFT_MASK,
98
"scroll-down-shift-alt",
99
N_("Scroll Down (Shift + Alt)") },
100
{ GDK_SCROLL_DOWN, GDK_CONTROL_MASK | GDK_SHIFT_MASK,
101
"scroll-down-shift-control",
102
N_("Scroll Down (Shift + Control)") },
103
{ GDK_SCROLL_DOWN, GDK_MOD1_MASK,
105
N_("Scroll Down (Alt)") },
106
{ GDK_SCROLL_DOWN, GDK_CONTROL_MASK,
107
"scroll-down-control",
108
N_("Scroll Down (Control)") },
109
{ GDK_SCROLL_DOWN, GDK_SHIFT_MASK,
111
N_("Scroll Down (Shift)") },
112
{ GDK_SCROLL_DOWN, 0,
116
{ GDK_SCROLL_LEFT, GDK_MOD1_MASK | GDK_CONTROL_MASK | GDK_SHIFT_MASK,
117
"scroll-left-shift-control-alt",
118
N_("Scroll Left (Shift + Control + Alt)") },
119
{ GDK_SCROLL_LEFT, GDK_MOD1_MASK | GDK_CONTROL_MASK,
120
"scroll-left-control-alt",
121
N_("Scroll Left (Control + Alt)") },
122
{ GDK_SCROLL_LEFT, GDK_MOD1_MASK | GDK_SHIFT_MASK,
123
"scroll-left-shift-alt",
124
N_("Scroll Left (Shift + Alt)") },
125
{ GDK_SCROLL_LEFT, GDK_CONTROL_MASK | GDK_SHIFT_MASK,
126
"scroll-left-shift-control",
127
N_("Scroll Left (Shift + Control)") },
128
{ GDK_SCROLL_LEFT, GDK_MOD1_MASK,
130
N_("Scroll Left (Alt)") },
131
{ GDK_SCROLL_LEFT, GDK_CONTROL_MASK,
132
"scroll-left-control",
133
N_("Scroll Left (Control)") },
134
{ GDK_SCROLL_LEFT, GDK_SHIFT_MASK,
136
N_("Scroll Left (Shift)") },
137
{ GDK_SCROLL_LEFT, 0,
141
{ GDK_SCROLL_RIGHT, GDK_MOD1_MASK | GDK_CONTROL_MASK | GDK_SHIFT_MASK,
142
"scroll-right-shift-control-alt",
143
N_("Scroll Right (Shift + Control + Alt)") },
144
{ GDK_SCROLL_RIGHT, GDK_MOD1_MASK | GDK_CONTROL_MASK,
145
"scroll-right-control-alt",
146
N_("Scroll Right (Control + Alt)") },
147
{ GDK_SCROLL_RIGHT, GDK_MOD1_MASK | GDK_SHIFT_MASK,
148
"scroll-right-shift-alt",
149
N_("Scroll Right (Shift + Alt)") },
150
{ GDK_SCROLL_RIGHT, GDK_CONTROL_MASK | GDK_SHIFT_MASK,
151
"scroll-right-shift-control",
152
N_("Scroll Right (Shift + Control)") },
153
{ GDK_SCROLL_RIGHT, GDK_MOD1_MASK,
155
N_("Scroll Right (Alt)") },
156
{ GDK_SCROLL_RIGHT, GDK_CONTROL_MASK,
157
"scroll-right-control",
158
N_("Scroll Right (Control)") },
159
{ GDK_SCROLL_RIGHT, GDK_SHIFT_MASK,
160
"scroll-right-shift",
161
N_("Scroll Right (Shift)") },
162
{ GDK_SCROLL_RIGHT, 0,
169
gimp_controller_wheel_get_type (void)
171
static GType controller_type = 0;
173
if (! controller_type)
175
static const GTypeInfo controller_info =
177
sizeof (GimpControllerWheelClass),
178
(GBaseInitFunc) NULL,
179
(GBaseFinalizeFunc) NULL,
180
(GClassInitFunc) gimp_controller_wheel_class_init,
181
NULL, /* class_finalize */
182
NULL, /* class_data */
183
sizeof (GimpControllerWheel),
185
(GInstanceInitFunc) gimp_controller_wheel_init,
188
controller_type = g_type_register_static (GIMP_TYPE_CONTROLLER,
189
"GimpControllerWheel",
190
&controller_info, 0);
193
return controller_type;
197
gimp_controller_wheel_class_init (GimpControllerWheelClass *klass)
199
GObjectClass *object_class = G_OBJECT_CLASS (klass);
200
GimpControllerClass *controller_class = GIMP_CONTROLLER_CLASS (klass);
202
parent_class = g_type_class_peek_parent (klass);
204
object_class->constructor = gimp_controller_wheel_constructor;
206
controller_class->name = _("Mouse Wheel");
207
controller_class->help_id = GIMP_HELP_CONTROLLER_WHEEL;
209
controller_class->get_n_events = gimp_controller_wheel_get_n_events;
210
controller_class->get_event_name = gimp_controller_wheel_get_event_name;
211
controller_class->get_event_blurb = gimp_controller_wheel_get_event_blurb;
215
gimp_controller_wheel_init (GimpControllerWheel *wheel)
220
gimp_controller_wheel_constructor (GType type,
222
GObjectConstructParam *params)
226
object = G_OBJECT_CLASS (parent_class)->constructor (type, n_params, params);
228
g_object_set (object,
229
"name", _("Mouse Wheel Events"),
237
gimp_controller_wheel_get_n_events (GimpController *controller)
239
return G_N_ELEMENTS (wheel_events);
243
gimp_controller_wheel_get_event_name (GimpController *controller,
246
if (event_id < 0 || event_id >= G_N_ELEMENTS (wheel_events))
249
return wheel_events[event_id].name;
253
gimp_controller_wheel_get_event_blurb (GimpController *controller,
256
if (event_id < 0 || event_id >= G_N_ELEMENTS (wheel_events))
259
return gettext (wheel_events[event_id].blurb);
263
gimp_controller_wheel_scroll (GimpControllerWheel *wheel,
264
const GdkEventScroll *sevent)
268
g_return_val_if_fail (GIMP_IS_CONTROLLER_WHEEL (wheel), FALSE);
269
g_return_val_if_fail (sevent != NULL, FALSE);
271
for (i = 0; i < G_N_ELEMENTS (wheel_events); i++)
273
if (wheel_events[i].direction == sevent->direction)
275
if ((wheel_events[i].modifiers & sevent->state) ==
276
wheel_events[i].modifiers)
278
GimpControllerEvent controller_event;
279
GimpControllerEventTrigger *trigger;
281
trigger = (GimpControllerEventTrigger *) &controller_event;
283
trigger->type = GIMP_CONTROLLER_EVENT_TRIGGER;
284
trigger->source = GIMP_CONTROLLER (wheel);
285
trigger->event_id = i;
287
if (gimp_controller_event (GIMP_CONTROLLER (wheel),