Mercurial > projects > doodle
view doodle/dia/tool_layer.d @ 56:b190a9d9352e
Checkpoint
author | "David Bryant <bagnose@gmail.com>" |
---|---|
date | Sun, 08 Aug 2010 21:56:54 +0930 |
parents | 1b4c9ba58673 |
children | 9960c4fbd0dd |
line wrap: on
line source
module doodle.dia.tool_layer; public { import doodle.dia.tool; } private { import std.stdio; import doodle.cairo.routines; } interface ToolStack { } class ToolLayer : Layer, EventHandler, ToolStack { this(in Tool[] tools, in string name) { super(name); _tools = tools.dup; } // Layer overrides: override Rectangle bounds() const { return Rectangle(); } override void draw(const Viewport viewport, in Rectangle pixelDamage, scope Context pixelCr, in Rectangle modelDamage, scope Context modelCr) const { if (_grabbedTool) { _grabbedTool.draw(viewport, pixelDamage, pixelCr); } } // EventHandler overrides: override bool handleButtonPress(scope Viewport viewport, in ButtonEvent event) { // writefln("%s", event); if (_grabbedTool is null) { foreach_reverse(ref tool; _tools) { if (tool.handleButtonPress(viewport, event)) { _grabbedTool = &tool; _grabbedButton = event.button_name; break; } } } else { _grabbedTool.handleButtonPress(viewport, event); } return true; } override bool handleButtonRelease(scope Viewport viewport, in ButtonEvent event) { // writefln("%s", event); if (_grabbedTool !is null) { _grabbedTool.handleButtonRelease(viewport, event); if (_grabbedButton == event.button_name) { _grabbedTool = null; } } return true; } override bool handleKeyPress(scope Viewport viewport, in KeyEvent event) { // writefln("%s", event); return true; } override bool handleKeyRelease(scope Viewport viewport, in KeyEvent event) { // writefln("%s", event); return true; } override bool handleMotion(scope Viewport viewport, in MotionEvent event) { //writefln("%s", event); if (_grabbedTool is null) { foreach_reverse(ref tool; _tools) { if (tool.handleMotion(viewport, event)) { break; } } } else { _grabbedTool.handleMotion(viewport, event); } return true; } override bool handleScroll(scope Viewport viewport, in ScrollEvent event) { // writefln("%s", event); if (_grabbedTool is null) { foreach_reverse(ref tool; _tools) { if (tool.handleScroll(viewport, event)) { break; } } } else { _grabbedTool.handleScroll(viewport, event); } return true; } /* override void push(Tool tool) { } override void pop() { } override void replace(Tool tool) { } */ private { Tool[] _tools; Tool * _grabbedTool; ButtonName _grabbedButton; } }