# HG changeset patch # User "David Bryant " # Date 1281851354 -34200 # Node ID 024a5608087f32b8f0eb9e28c2f88971dfe093a6 # Parent 15ca7d5cd1ed06850d659d570c104bf2599476af Meh diff -r 15ca7d5cd1ed -r 024a5608087f doodle/dia/icanvas.d --- a/doodle/dia/icanvas.d Sun Aug 15 01:36:22 2010 +0930 +++ b/doodle/dia/icanvas.d Sun Aug 15 15:19:14 2010 +0930 @@ -13,20 +13,24 @@ mixin(defineEnum!("Cursor", "DEFAULT", "HAND", "CROSSHAIR", "PENCIL")); -interface IViewport { - void zoomRelative(in Point screenDatum, in double factor); - void panRelative(in Vector screenDisplacement); - void setCursor(in Cursor cursor); - +interface IViewport2 { void damageModel(in Rectangle area); void damageScreen(in Rectangle area); } +interface IViewport : IViewport2 { + void zoomRelative(in Point screenDatum, in double factor); // FIXME reorder arguments + void panRelative(in Vector screenDisplacement); + void setCursor(in Cursor cursor); +} + +/* final class Damage { void increase(in Rectangle additional) { _rectangle = _rectangle | additional; } Rectangle rectangle() const { return _rectangle; } private Rectangle _rectangle; } +*/ interface IEventHandler { bool handleButtonPress(scope IViewport viewport, in ButtonEvent event); diff -r 15ca7d5cd1ed -r 024a5608087f doodle/gtk/canvas.d --- a/doodle/gtk/canvas.d Sun Aug 15 01:36:22 2010 +0930 +++ b/doodle/gtk/canvas.d Sun Aug 15 15:19:14 2010 +0930 @@ -299,39 +299,27 @@ bool onButtonPress(GdkEventButton * event, Widget widget) { assert(widget is _drawingArea); - - auto buttonEvent = makeButtonEvent(event, _screenModel); - _eventHandler.handleButtonPress(this, buttonEvent); + _eventHandler.handleButtonPress(this, makeButtonEvent(event, _screenModel)); fixDamage; return true; } bool onButtonRelease(GdkEventButton * event, Widget widget) { assert(widget is _drawingArea); - - auto buttonEvent = makeButtonEvent(event, _screenModel); - _eventHandler.handleButtonRelease(this, buttonEvent); + _eventHandler.handleButtonRelease(this, makeButtonEvent(event, _screenModel)); fixDamage; return true; } bool onKeyPressEvent(GdkEventKey * event, Widget widget) { assert(widget is _drawingArea); - - auto keyEvent = new KeyEvent(event.string[0..strlen(event.string)].idup, - event.keyval, - gtk2tkMask(event.state)); - message("Got key press %s", keyEvent); - _eventHandler.handleKeyPress(this, keyEvent); - + _eventHandler.handleKeyPress(this, makeKeyEvent(event, _screenModel)); fixDamage; - return true; } bool onKeyReleaseEvent(GdkEventKey * event, Widget widget) { assert(widget is _drawingArea); - _eventHandler.handleKeyRelease(this, makeKeyEvent(event, _screenModel)); fixDamage; return true; @@ -351,7 +339,6 @@ bool onScroll(GdkEventScroll * event, Widget widget) { assert(widget is _drawingArea); - _eventHandler.handleScroll(this, makeScrollEvent(event, _screenModel)); fixDamage; return true; @@ -359,7 +346,6 @@ bool onEnterNotify(GdkEventCrossing * event, Widget widget) { assert(widget is _drawingArea); - _eventHandler.handleEnter(this, makeCrossingEvent(event, _screenModel)); fixDamage; return true; @@ -367,7 +353,6 @@ bool onLeaveNotify(GdkEventCrossing * event, Widget widget) { assert(widget is _drawingArea); - _eventHandler.handleLeave(this, makeCrossingEvent(event, _screenModel)); fixDamage; return true; diff -r 15ca7d5cd1ed -r 024a5608087f doodle/tk/drawing.d --- a/doodle/tk/drawing.d Sun Aug 15 01:36:22 2010 +0930 +++ b/doodle/tk/drawing.d Sun Aug 15 15:19:14 2010 +0930 @@ -35,5 +35,8 @@ //void setFontSize; void drawText(in string text); + void measureText(in string text, out Rectangle logicalBounds, out Rectangle totalBounds); + // How to fit fonts, metrics, etc in here? + // Initially let's just support one font } diff -r 15ca7d5cd1ed -r 024a5608087f doodle/tk/geometry.d --- a/doodle/tk/geometry.d Sun Aug 15 01:36:22 2010 +0930 +++ b/doodle/tk/geometry.d Sun Aug 15 15:19:14 2010 +0930 @@ -263,7 +263,7 @@ // Operations about the centre -Rectangle feather(in Rectangle r, double amount) { +Rectangle feather(in Rectangle r, double amount) { // feather isn't the right name assert(amount >= 0.0); assert(!isnan(amount)); return Rectangle(Point(r.position.x - amount, r.position.y - amount), diff -r 15ca7d5cd1ed -r 024a5608087f doodle/tk/pixel_model.d --- a/doodle/tk/pixel_model.d Sun Aug 15 01:36:22 2010 +0930 +++ b/doodle/tk/pixel_model.d Sun Aug 15 15:19:14 2010 +0930 @@ -9,6 +9,7 @@ } // This class manages the relationship between screen space and model space. +// Screen is defined as the current window/viewport into the model // It provides convenient high-level operations. // // x and y run right and up respectively for screen and model space @@ -62,11 +63,11 @@ private { static double clampZoom(in double zoom) { return clamp(zoom, 0.1, 10.0); } - // Screen units are screens + // Screen units are pixels // Model units are millimetres - double _zoom; // screens-per-millimetre - Rectangle _viewBoundsScreen; // bounds of the viewport in screens - Point _viewCentreModel; // where in the model is the centre of our view - Rectangle _canvasBoundsModel; // the bounds of the canvas in millimetres + double _zoom; // pixels-per-millimetre + Rectangle _viewBoundsScreen; // bounds of the viewport in screen space + Point _viewCentreModel; // where in the model is the centre of our screen + Rectangle _canvasBoundsModel; // the bounds of the canvas in model space } }