Mercurial > projects > doodle
view doodle/main/prog/doodler.d @ 87:c825e6db57c1
Added a flag for OpenGL/Cairo
author | "David Bryant <bagnose@gmail.com>" |
---|---|
date | Mon, 16 Aug 2010 22:54:16 +0930 |
parents | 98980cee8c5b |
children | a98116479793 |
line wrap: on
line source
module main.prog.doodler; immutable useOpenGL = false; private { import doodle.core.backtrace; import doodle.core.logging; import doodle.core.backtrace; import doodle.dia.standard_tools; import doodle.dia.page_layer; import doodle.dia.grid_layer; import doodle.dia.tool_layer; import doodle.fig.diagram_layer; import doodle.fig.select_tool; import doodle.fig.tools; import doodle.gtk.palette; static if (useOpenGL) { import doodle.gtk.opengl_canvas; import glgdk.GLdInit; } else { import doodle.gtk.cairo_canvas; } import gtk.Main; import gtk.MainWindow; import gtk.VBox; import std.stdio; } final class TopLevel : private IToolStackObserver { this(string[] args) { Main.init(args); static if (useOpenGL) { GLdInit.init(args); } auto window = new MainWindow("Doodle"); auto vbox = new VBox(false, 0); auto palette = new Palette!Tool; _palette = palette; vbox.packStart(palette, false, false, 0); Tool[] tools; tools ~= new PanTool; tools ~= new ZoomTool; tools ~= new SelectTool; auto toolLayer = new ToolLayer(tools, this); _toolStack = toolLayer; auto gridLayer = new GridLayer; auto diagramLayer = new DiagramLayer; _diagram = diagramLayer; Layer[] layers; layers ~= new PageLayer; layers ~= gridLayer; layers ~= toolLayer; // assume the screen has PPI of 120.0 immutable millimetersPerInch = 25.4; immutable pixelsPerMillimetre = 120.0 / millimetersPerInch; static if (useOpenGL) { auto canvas = new OpenGLCanvas(layers, toolLayer, gridLayer, pixelsPerMillimetre); } else { auto canvas = new CairoCanvas(layers, toolLayer, gridLayer, pixelsPerMillimetre); } vbox.packStart(canvas, true, true, 0); Palette!Tool.Item[] items = [ { "select.svg", "Select", "Select and modify elements", new SelectTool }, { "rectangle.svg", "Rectangle", "Create rectangle", new CreateRectangleTool(_diagram) }, { "ellipse.svg", "Ellipse", "Create ellipse", new CreateRectangleTool(_diagram) }, { "polyline.svg", "Polyline", "Create polyline", new CreateRectangleTool(_diagram) } ]; palette.configure(items, &_toolStack.use); window.add(vbox); window.setDefaultSize(640, 580); window.showAll(); Main.run(); } void toolChanged(Tool tool) { message("Tool changed %s", tool.name); _palette.activate(tool); } private { IToolStack _toolStack; IPalette!Tool _palette; IDiagram _diagram; } } void main(string[] args) { new TopLevel(args); }