Mercurial > projects > doodle
view doodle/gtk/events.d @ 82:0314b2e03f9b
Moved gtk/conversions.d int gtk/events.d
Nearly done with the housekeeping...
author | "David Bryant <bagnose@gmail.com>" |
---|---|
date | Mon, 16 Aug 2010 00:08:19 +0930 |
parents | d92b9f04b1e8 |
children | 752676232e4b |
line wrap: on
line source
module doodle.gtk.events; public { import doodle.tk.events; } private { import core.stdc.string : strlen; static import gdk.Event; } private { ButtonAction gtk2tkButtonAction(gdk.Event.EventType event_type) { switch (event_type) { case gdk.Event.EventType.BUTTON_PRESS: return ButtonAction.SINGLE_PRESS; case gdk.Event.EventType.DOUBLE_BUTTON_PRESS: return ButtonAction.DOUBLE_PRESS; case gdk.Event.EventType.TRIPLE_BUTTON_PRESS: return ButtonAction.TRIPLE_PRESS; case gdk.Event.EventType.BUTTON_RELEASE: return ButtonAction.RELEASE; default: assert(false); } } ButtonName gtk2tkButtonName(gdk.Event.guint button) { switch (button) { case 1: return ButtonName.LEFT; case 2: return ButtonName.MIDDLE; case 3: return ButtonName.RIGHT; case 4: return ButtonName.FOUR; case 5: return ButtonName.FIVE; default: assert(false); } } Mask gtk2tkMask(gdk.Event.guint state) { Modifier[] modifiers; if (state & gdk.Event.GdkModifierType.SHIFT_MASK) modifiers ~= Modifier.SHIFT; if (state & gdk.Event.GdkModifierType.CONTROL_MASK) modifiers ~= Modifier.CONTROL; if (state & gdk.Event.GdkModifierType.MOD1_MASK) modifiers ~= Modifier.ALT; if (state & gdk.Event.GdkModifierType.MOD2_MASK) modifiers ~= Modifier.META; // Note, MOD 3-5 are currently omitted if (state & gdk.Event.GdkModifierType.BUTTON1_MASK) modifiers ~= Modifier.LEFT_BUTTON; if (state & gdk.Event.GdkModifierType.BUTTON2_MASK) modifiers ~= Modifier.MIDDLE_BUTTON; if (state & gdk.Event.GdkModifierType.BUTTON3_MASK) modifiers ~= Modifier.RIGHT_BUTTON; if (state & gdk.Event.GdkModifierType.BUTTON4_MASK) modifiers ~= Modifier.UNUSED_BUTTON_1; if (state & gdk.Event.GdkModifierType.BUTTON5_MASK) modifiers ~= Modifier.UNUSED_BUTTON_2; Mask m = Mask(modifiers); return Mask(modifiers); } ScrollDirection gtk2tkDirection(gdk.Event.ScrollDirection direction) { switch (direction) { case gdk.Event.ScrollDirection.UP: return ScrollDirection.UP; case gdk.Event.ScrollDirection.DOWN: return ScrollDirection.DOWN; case gdk.Event.ScrollDirection.LEFT: return ScrollDirection.LEFT; case gdk.Event.ScrollDirection.RIGHT: return ScrollDirection.RIGHT; default: assert(false); } } CrossingMode gtk2tkCrossingMode(gdk.Event.CrossingMode crossingMode) { switch (crossingMode) { case crossingMode.NORMAL: return CrossingMode.NORMAL; case crossingMode.GRAB: return CrossingMode.GRAB; case crossingMode.UNGRAB: return CrossingMode.UNGRAB; case crossingMode.GTK_GRAB: return CrossingMode.GRAB2; case crossingMode.GTK_UNGRAB: return CrossingMode.UNGRAB2; case crossingMode.STATE_CHANGED: return CrossingMode.STATE_CHANGED; default: assert(false); } } } // Functions for creating the events /* public struct GdkEventButton { GdkEventType type; GdkWindow *window; byte sendEvent; uint time; double x; double y; double *axes; uint state; uint button; GdkDevice *device; double xRoot, yRoot; } */ ButtonEvent makeButtonEvent(const GdkEventButton * event, in ScreenModel screenModel) { Point screenPoint = Point(event.x + 0.5, screenModel.viewBoundsScreen.h - (event.y + 0.5)); Point modelPoint = screenModel.screenToModel(screenPoint); return new ButtonEvent(gtk2tkButtonAction(event.type), gtk2tkButtonName(event.button), screenPoint, modelPoint, gtk2tkMask(event.state)); } /* public struct GdkEventMotion { GdkEventType type; GdkWindow *window; byte sendEvent; uint time; double x; double y; double *axes; uint state; short isHint; GdkDevice *device; double xRoot, yRoot; } */ MotionEvent makeMotionEvent(const GdkEventMotion * event, in ScreenModel screenModel) { Point screenPoint = Point(event.x + 0.5, screenModel.viewBoundsScreen.h - (event.y + 0.5)); Point modelPoint = screenModel.screenToModel(screenPoint); return new MotionEvent(screenPoint, modelPoint, gtk2tkMask(event.state)); } /* public struct GdkEventKey { GdkEventType type; GdkWindow *window; byte sendEvent; uint time; uint state; uint keyval; int length; char *string; ushort hardwareKeycode; ubyte group; uint bitfield0; uint isModifier : 1; } */ KeyEvent makeKeyEvent(const GdkEventKey * event, in ScreenModel screenModel) { return new KeyEvent(event.string[0..strlen(event.string)].idup, event.keyval, gtk2tkMask(event.state)); } /* public struct GdkEventScroll { GdkEventType type; GdkWindow *window; byte sendEvent; uint time; double x; double y; uint state; GdkScrollDirection direction; GdkDevice *device; double xRoot, yRoot; } */ ScrollEvent makeScrollEvent(const GdkEventScroll * event, in ScreenModel screenModel) { Point screenPoint = Point(event.x + 0.5, screenModel.viewBoundsScreen.h - (event.y + 0.5)); Point modelPoint = screenModel.screenToModel(screenPoint); return new ScrollEvent(gtk2tkDirection(event.direction), screenPoint, modelPoint, gtk2tkMask(event.state)); } /* public enum GdkCrossingMode { NORMAL, GRAB, UNGRAB, GTK_GRAB, GTK_UNGRAB, STATE_CHANGED } public struct GdkEventCrossing { GdkEventType type; GdkWindow *window; byte sendEvent; GdkWindow *subwindow; uint time; double x; double y; double xRoot; double yRoot; GdkCrossingMode mode; GdkNotifyType detail; int focus; uint state; } */ CrossingEvent makeCrossingEvent(const GdkEventCrossing * event, in ScreenModel screenModel) { Point screenPoint = Point(event.x + 0.5, screenModel.viewBoundsScreen.h - (event.y + 0.5)); Point modelPoint = screenModel.screenToModel(screenPoint); return new CrossingEvent(gtk2tkCrossingMode(event.mode), screenPoint, modelPoint, gtk2tkMask(event.state)); } /* public struct GdkEventFocus { GdkEventType type; GdkWindow *window; byte sendEvent; short inn; } */ // In case we implement focus event...