Mercurial > projects > doodle
view standard_tools.d @ 16:9e63308b749c
* Fix up public/private includes
* Make Mask a struct
author | David Bryant <daveb@acres.com.au> |
---|---|
date | Mon, 13 Jul 2009 16:16:17 +0930 |
parents | 0b7e7d43a79d |
children | c643c04e3f5e |
line wrap: on
line source
module standard_tools; public { import tool; } private { import std.math; } final class PanTool : Tool { bool handle_button_press(Viewport viewport, in ButtonEvent event) { if (event.button_name == ButtonName.MIDDLE) { mLastPosition = event.screen_point; return true; } else { return false; } } bool handle_button_release(Viewport viewport, in ButtonEvent event) { return true; } bool handle_motion(Viewport viewport, in MotionEvent event) { if (event.mask.is_set(Modifier.MIDDLE_BUTTON)) { viewport.rel_pan(mLastPosition - event.screen_point); mLastPosition = event.screen_point; return true; } else { return false; } } bool handle_scroll(Viewport viewport, in ScrollEvent event) { if (event.mask.is_unset(Modifier.MIDDLE_BUTTON)) { Vector delta; switch (event.scroll_direction) { case ScrollDirection.UP: delta = event.mask.is_set(Modifier.SHIFT) ? Vector(AMOUNT, 0.0) : Vector(0.0, AMOUNT); break; case ScrollDirection.DOWN: delta = event.mask.is_set(Modifier.SHIFT) ? Vector(-AMOUNT, 0.0) : Vector(0.0, -AMOUNT); break; case ScrollDirection.LEFT: delta = Vector(-AMOUNT, 0.0); break; case ScrollDirection.RIGHT: delta = Vector(AMOUNT, 0.0); break; } viewport.rel_pan(delta); } return true; } bool handle_key_press(Viewport viewport, in KeyEvent event) { return false; } bool handle_key_release(Viewport viewport, in KeyEvent event) { return false; } private { Point mLastPosition; static invariant double AMOUNT = 60.0; } } final class ZoomTool : Tool { bool handle_button_press(Viewport viewport, in ButtonEvent event) { return false; } bool handle_button_release(Viewport viewport, in ButtonEvent event) { return false; } bool handle_motion(Viewport viewport, in MotionEvent event) { return false; } bool handle_scroll(Viewport viewport, in ScrollEvent event) { if (event.mask.is_set(Modifier.CONTROL)) { if (event.scroll_direction == ScrollDirection.DOWN) { viewport.rel_zoom(event.screen_point(), 1.0 / ZOOM); return true; } else if (event.scroll_direction == ScrollDirection.UP) { viewport.rel_zoom(event.screen_point(), ZOOM); return true; } else { return false; } } else { return false; } } bool handle_key_press(Viewport viewport, in KeyEvent event) { return false; } bool handle_key_release(Viewport viewport, in KeyEvent event) { return false; } private { static invariant double ZOOM = sqrt(2.0); } }