Mercurial > projects > doodle
diff gtk/canvas.d @ 27:f3d91579bb28
Checkpoint
author | David Bryant <daveb@acres.com.au> |
---|---|
date | Wed, 29 Jul 2009 14:11:35 +0930 |
parents | 06c30d250c0a |
children |
line wrap: on
line diff
--- a/gtk/canvas.d Thu Jul 16 00:12:02 2009 +0930 +++ b/gtk/canvas.d Wed Jul 29 14:11:35 2009 +0930 @@ -68,17 +68,17 @@ mVRuler.setMetric(MetricType.PIXELS); mDrawingArea = new DrawingArea; - mDrawingArea.addOnRealize(&onRealize); - mDrawingArea.addOnConfigure(&onConfigure); - mDrawingArea.addOnExpose(&onExpose); - mDrawingArea.addOnButtonPress(&onButtonPress); - mDrawingArea.addOnButtonRelease(&onButtonRelease); - mDrawingArea.addOnKeyPress(&onKeyEvent); - mDrawingArea.addOnKeyRelease(&onKeyEvent); - mDrawingArea.addOnMotionNotify(&onMotionNotify); - mDrawingArea.addOnScroll(&onScroll); - mDrawingArea.addOnEnterNotify(&onEnterNotify); - mDrawingArea.addOnLeaveNotify(&onLeaveNotify); + mDrawingArea.addOnRealize(&on_realize); + mDrawingArea.addOnConfigure(&on_configure); + mDrawingArea.addOnExpose(&on_expose); + mDrawingArea.addOnButtonPress(&on_button_press); + mDrawingArea.addOnButtonRelease(&on_button_release); + mDrawingArea.addOnKeyPress(&on_key_event); + mDrawingArea.addOnKeyRelease(&on_key_event); + mDrawingArea.addOnMotionNotify(&on_motion_notify); + mDrawingArea.addOnScroll(&on_scroll); + mDrawingArea.addOnEnterNotify(&on_enter_notify); + mDrawingArea.addOnLeaveNotify(&on_leave_notify); mDrawingArea.setEvents(EventMask.EXPOSURE_MASK | EventMask.POINTER_MOTION_MASK | EventMask.POINTER_MOTION_HINT_MASK | @@ -145,6 +145,24 @@ queueDraw; } + override void set_cursor(in Cursor cursor) { + CursorType cursor_type; + + switch (cursor) { + case Cursor.DEFAULT: + cursor_type = CursorType.ARROW; + break; + case Cursor.HAND: + cursor_type = CursorType.HAND1; + break; + case Cursor.CROSSHAIR: + cursor_type = CursorType.CROSSHAIR; + break; + } + + mDrawingArea.setCursor(new gdk.Cursor.Cursor(cursor_type)); + } + override void damage_model(in Rectangle area) { mDamage = mDamage | model_to_pixel(area); } @@ -153,50 +171,9 @@ mDamage = mDamage | area; } - override double zoom() const { - return mZoom; - } - - override Point model_to_pixel(in Point model) const { - return Point.DEFAULT + mViewSize / 2.0 + mZoom * (model - mViewCentre); - } - - override Point pixel_to_model(in Point pixel) const { - return mViewCentre + (pixel - mViewSize / 2.0 - Point.DEFAULT) / mZoom; - } - - override Vector model_to_pixel(in Vector model) const { - return mZoom * model; - } - - override Vector pixel_to_model(in Vector pixel) const { - return pixel / mZoom; - } - - override double model_to_pixel(in double model) const { - return mZoom * model; - } - - override double pixel_to_model(in double pixel) const { - return pixel / mZoom; - } - - override Rectangle model_to_pixel(in Rectangle model) const { - return Rectangle(model_to_pixel(model.position), model_to_pixel(model.size)); - } - - override Rectangle pixel_to_model(in Rectangle model) const { - return Rectangle(pixel_to_model(model.position), pixel_to_model(model.size)); - } - private { - void onRealize(Widget widget) { - assert(widget is mDrawingArea); - //writefln("Got realize\n"); - } - - bool onConfigure(GdkEventConfigure * event, Widget widget) { + bool on_configure(GdkEventConfigure * event, Widget widget) { assert(widget is mDrawingArea); if (!mHadConfigure) { @@ -230,7 +207,7 @@ return true; } - bool onExpose(GdkEventExpose * event, Widget widget) { + bool on_expose(GdkEventExpose * event, Widget widget) { assert(widget is mDrawingArea); Drawable dr = mDrawingArea.getWindow; @@ -294,7 +271,7 @@ return true; } - bool onButtonPress(GdkEventButton * event, Widget widget) { + bool on_button_press(GdkEventButton * event, Widget widget) { assert(widget is mDrawingArea); //writefln("Got button event\n"); @@ -314,7 +291,7 @@ return true; } - bool onButtonRelease(GdkEventButton * event, Widget widget) { + bool on_button_release(GdkEventButton * event, Widget widget) { assert(widget is mDrawingArea); //writefln("Got button event\n"); @@ -334,7 +311,7 @@ return true; } - bool onKeyEvent(GdkEventKey * event, Widget widget) { + bool on_key_event(GdkEventKey * event, Widget widget) { assert(widget is mDrawingArea); //writefln("Got key event\n"); @@ -346,7 +323,7 @@ return true; } - bool onMotionNotify(GdkEventMotion * event, Widget widget) { + bool on_motion_notify(GdkEventMotion * event, Widget widget) { assert(widget is mDrawingArea); //writefln("Got motion notify\n"); gtk_widget_event(mHRuler.getWidgetStruct(), cast(GdkEvent *)event); @@ -366,7 +343,7 @@ return true; } - bool onScroll(GdkEventScroll * event, Widget widget) { + bool on_scroll(GdkEventScroll * event, Widget widget) { assert(widget is mDrawingArea); //writefln("Got scroll\n"); @@ -412,15 +389,17 @@ } */ - bool onEnterNotify(GdkEventCrossing * event, Widget widget) { + bool on_enter_notify(GdkEventCrossing * event, Widget widget) { assert(widget is mDrawingArea); - writefln("Enter %d %d %d", cast(int)event.mode, event.focus, event.state); + //writefln("Enter %d %d %d", cast(int)event.mode, event.focus, event.state); + // TODO return true; } - bool onLeaveNotify(GdkEventCrossing * event, Widget widget) { + bool on_leave_notify(GdkEventCrossing * event, Widget widget) { assert(widget is mDrawingArea); - writefln("Leave %d %d %d", cast(int)event.mode, event.focus, event.state); + //writefln("Leave %d %d %d", cast(int)event.mode, event.focus, event.state); + // TODO return true; } @@ -505,11 +484,7 @@ //writefln("Damage: %s", mDamage); int x, y, w, h; mDamage.get_quantised(x, y, w, h); - //writefln("Quantised damage: %d %d %d %d", x, y, w, h); - y = cast(int)mViewSize.y - (y + h); // Flip vertical axis - //writefln("Flipped Quantised damage: %d %d %d %d", x, y, w, h); - mDrawingArea.queueDrawArea(x, y, w, h); - //mDrawingArea.queueDraw(); + mDrawingArea.queueDrawArea(x, cast(int)mViewSize.y - (y + h), w, h); mDamage = Rectangle.DEFAULT; } else { @@ -519,6 +494,35 @@ double clamp_zoom(in double zoom) { return clamp(zoom, 0.2, 10.0); } + Point model_to_pixel(in Point model) const { + return Point.DEFAULT + mViewSize / 2.0 + mZoom * (model - mViewCentre); + } + + Point pixel_to_model(in Point pixel) const { + return mViewCentre + (pixel - mViewSize / 2.0 - Point.DEFAULT) / mZoom; + } + + Vector model_to_pixel(in Vector model) const { + return mZoom * model; + } + + Vector pixel_to_model(in Vector pixel) const { + return pixel / mZoom; + } + + Rectangle model_to_pixel(in Rectangle model) const { + return Rectangle(model_to_pixel(model.position), model_to_pixel(model.size)); + } + + Rectangle pixel_to_model(in Rectangle model) const { + return Rectangle(pixel_to_model(model.position), pixel_to_model(model.size)); + } + + void on_realize(Widget widget) { + assert(widget is mDrawingArea); + //writefln("Got realize\n"); + } + bool mHadConfigure; Rectangle mDamage; // pixels