Mercurial > projects > doodle
view doodle/fig/select_tool.d @ 84:cdd4fc728d94
Renamed Drawable to Renderer
author | daveb |
---|---|
date | Mon, 16 Aug 2010 17:23:09 +0930 |
parents | d92b9f04b1e8 |
children | bc5baa585b32 |
line wrap: on
line source
module doodle.fig.select_tool; public { import doodle.dia.tool; } 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.screenPoint; 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.damageScreen(growCentre(Rectangle(_anchorPoint, _currentPoint), LINE_WIDTH)); viewport.setCursor(Cursor.DEFAULT); return true; } else { return false; } } override bool handleMotion(scope IViewport viewport, in MotionEvent event) { if (_active) { viewport.damageScreen(growCentre(Rectangle(_anchorPoint, _currentPoint), LINE_WIDTH)); _currentPoint = event.screenPoint; viewport.damageScreen(growCentre(Rectangle(_anchorPoint, _currentPoint), LINE_WIDTH)); } return false; } override void draw(in Rectangle screenDamage, scope Renderer screenRenderer) const { if (_active) { screenRenderer.pushState; { screenRenderer.setLineStyle(Renderer.LineStyle.DASHED); screenRenderer.setLineWidth(LINE_WIDTH); screenRenderer.setColor(Color(0.0, 0.0, 0.5, 1.0)); screenRenderer.drawRectangle(Rectangle(_currentPoint, _anchorPoint), false); } screenRenderer.popState; } } private { bool _active; Point _currentPoint; Point _anchorPoint; static immutable double LINE_WIDTH = 1.0; } }