Mercurial > projects > doodle
view doodle/fig/select_tool.d @ 63:20d6327c4a75
Event progress. Got key press/release working and panning via keyboard.
author | daveb |
---|---|
date | Thu, 12 Aug 2010 16:35:24 +0930 |
parents | |
children | 43cc2135ced0 |
line wrap: on
line source
module doodle.fig.select_tool; public { import doodle.dia.tool; } private { import doodle.cairo.routines; } final class SelectTool : Tool { this() { super("Select"); } override bool handleButtonPress(scope IViewport viewport, in ButtonEvent event) { if (event.buttonName == ButtonName.LEFT) { _active = true; _anchorPoint = _currentPoint = event.pixelPoint; viewport.setCursor(Cursor.HAND); return true; } else { return false; } } override bool handleButtonRelease(scope IViewport viewport, in ButtonEvent event) { if (event.buttonName == ButtonName.LEFT && _active) { _active = false; viewport.damagePixel(feather(Rectangle(_anchorPoint, _currentPoint), LINE_WIDTH / 2.0)); viewport.setCursor(Cursor.DEFAULT); return true; } else { return false; } } override bool handleMotion(scope IViewport viewport, in MotionEvent event) { if (_active) { viewport.damagePixel(feather(Rectangle(_anchorPoint, _currentPoint), LINE_WIDTH / 2.0)); _currentPoint = event.pixelPoint; viewport.damagePixel(feather(Rectangle(_anchorPoint, _currentPoint), LINE_WIDTH / 2.0)); } return false; } override void draw(in IViewport viewport, in Rectangle pixelDamage, scope Context pixelCr) const { if (_active) { /* pixelCr.save; { pixelCr.setSourceRgba(0.0, 0.0, 0.8, 0.3); rectangle(pixelCr, Rectangle(_currentPoint, _anchorPoint)); pixelCr.fill(); } pixelCr.restore(); */ pixelCr.save(); { double[] dashes = [ 4.0, 4.0 ]; pixelCr.setDash(dashes, 0.0); pixelCr.setSourceRgba(0.0, 0.0, 0.5, 1.0); pixelCr.setLineWidth(LINE_WIDTH); rectangle(pixelCr, Rectangle(_currentPoint, _anchorPoint)); pixelCr.stroke; } pixelCr.restore; } } private { bool _active; Point _currentPoint; Point _anchorPoint; // Pixel static immutable double LINE_WIDTH = 1.0; } }