view doodle/gtk/events.d @ 73:6f2525e170f2

Cairo/OpenGL checkpoint
author "David Bryant <bagnose@gmail.com>"
date Sun, 15 Aug 2010 01:02:15 +0930
parents
children 15ca7d5cd1ed
line wrap: on
line source

module doodle.gtk.events;

public {
    import doodle.tk.events;
}

private {
    import doodle.gtk.conversions;

    import core.stdc.string : strlen;
}


// 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 PixelModel pixelModel) {
    Point pixelPoint = Point(event.x + 0.5, pixelModel.viewBounds.h - (event.y + 0.5));
    Point modelPoint = pixelModel.pixelToModel(pixelPoint);
    return new ButtonEvent(gtk2tkButtonAction(event.type),
                           gtk2tkButtonName(event.button),
                           pixelPoint, 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 PixelModel pixelModel) {
    Point pixelPoint = Point(event.x + 0.5, pixelModel.viewBounds.h - (event.y + 0.5));
    Point modelPoint = pixelModel.pixelToModel(pixelPoint);

    return new MotionEvent(pixelPoint, 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 PixelModel pixelModel) {
    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 PixelModel pixelModel) {
    Point pixelPoint = Point(event.x + 0.5, pixelModel.viewBounds.h - (event.y + 0.5));
    Point modelPoint = pixelModel.pixelToModel(pixelPoint);
    return new ScrollEvent(gtk2tkDirection(event.direction),
                           pixelPoint,
                           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 PixelModel pixelModel) {
    Point pixelPoint = Point(event.x + 0.5, pixelModel.viewBounds.h - (event.y + 0.5));
    Point modelPoint = pixelModel.pixelToModel(pixelPoint);
    return new CrossingEvent(gtk2tkCrossingMode(event.mode),
                             pixelPoint,
                             modelPoint,
                             gtk2tkMask(event.state));
}


/*
   public struct GdkEventFocus {
   GdkEventType type;
   GdkWindow *window;
   byte sendEvent;
   short inn;
   }
 */
// In case we implement focus event...