void GridSettingsCommand::onExecute(Context* context) { base::UniquePtr<Window> window(app::load_widget<Window>("grid_settings.xml", "grid_settings")); Widget* button_ok = app::find_widget<Widget>(window, "ok"); Widget* grid_x = app::find_widget<Widget>(window, "grid_x"); Widget* grid_y = app::find_widget<Widget>(window, "grid_y"); Widget* grid_w = app::find_widget<Widget>(window, "grid_w"); Widget* grid_h = app::find_widget<Widget>(window, "grid_h"); IDocumentSettings* docSettings = context->settings()->getDocumentSettings(context->activeDocument()); Rect bounds = docSettings->getGridBounds(); grid_x->setTextf("%d", bounds.x); grid_y->setTextf("%d", bounds.y); grid_w->setTextf("%d", bounds.w); grid_h->setTextf("%d", bounds.h); window->openWindowInForeground(); if (window->getKiller() == button_ok) { bounds.x = grid_x->getTextInt(); bounds.y = grid_y->getTextInt(); bounds.w = grid_w->getTextInt(); bounds.h = grid_h->getTextInt(); bounds.w = MAX(bounds.w, 1); bounds.h = MAX(bounds.h, 1); docSettings->setGridBounds(bounds); } }
void ScrollCommand::onExecute(Context* context) { IDocumentSettings* docSettings = context->getSettings()->getDocumentSettings(context->getActiveDocument()); ui::View* view = ui::View::getView(current_editor); gfx::Rect vp = view->getViewportBounds(); gfx::Point scroll = view->getViewScroll(); gfx::Rect gridBounds = docSettings->getGridBounds(); int dx = 0; int dy = 0; int pixels = 0; switch (m_units) { case Pixel: pixels = 1; break; case TileWidth: pixels = gridBounds.w; break; case TileHeight: pixels = gridBounds.h; break; case ZoomedPixel: pixels = 1 << current_editor->getZoom(); break; case ZoomedTileWidth: pixels = gridBounds.w << current_editor->getZoom(); break; case ZoomedTileHeight: pixels = gridBounds.h << current_editor->getZoom(); break; case ViewportWidth: pixels = vp.h; break; case ViewportHeight: pixels = vp.w; break; } switch (m_direction) { case Left: dx = -m_quantity * pixels; break; case Right: dx = +m_quantity * pixels; break; case Up: dy = -m_quantity * pixels; break; case Down: dy = +m_quantity * pixels; break; } current_editor->setEditorScroll(scroll.x+dx, scroll.y+dy, true); }