This is an automated email from the git hooks/post-receive script. thansen pushed a commit to branch master in repository aseprite.
commit a00a3b2a83e70ea438df1200123cc3840624857c Author: David Capello <[email protected]> Date: Mon Nov 24 20:52:52 2014 -0300 Fix crash changing ConfigureTools options when activeDoc == NULL --- data/widgets/tools_configuration.xml | 4 +- src/app/commands/cmd_configure_tools.cpp | 274 +++++++++++++------------------ 2 files changed, 120 insertions(+), 158 deletions(-) diff --git a/data/widgets/tools_configuration.xml b/data/widgets/tools_configuration.xml index fcce211..d905710 100644 --- a/data/widgets/tools_configuration.xml +++ b/data/widgets/tools_configuration.xml @@ -1,7 +1,7 @@ <!-- ASEPRITE --> -<!-- Copyright (C) 2001-2013 by David Capello --> +<!-- Copyright (C) 2001-2014 by David Capello --> <gui> -<window text="Tools Configuration" id="configure_tool"> +<window text="Tools Configuration" id="tools_configuration"> <box vertical="true" childspacing="0"> <box horizontal="true" expansive="true"> <box vertical="true" childspacing="2"> diff --git a/src/app/commands/cmd_configure_tools.cpp b/src/app/commands/cmd_configure_tools.cpp index a4375be..517296a 100644 --- a/src/app/commands/cmd_configure_tools.cpp +++ b/src/app/commands/cmd_configure_tools.cpp @@ -1,5 +1,5 @@ /* Aseprite - * Copyright (C) 2001-2013 David Capello + * Copyright (C) 2001-2014 David Capello * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -41,206 +41,168 @@ #include "raster/mask.h" #include "ui/ui.h" +#include "generated_tools_configuration.h" + namespace app { using namespace gfx; using namespace ui; using namespace app::tools; -static Window* window = NULL; - -// Slot for App::Exit signal -static void on_exit_delete_this_widget() -{ - ASSERT(window != NULL); - delete window; -} - -class ConfigureTools : public Command, - public doc::ContextObserver { +class ToolsConfigurationWindow : public app::gen::ToolsConfiguration, + public doc::ContextObserver { public: - ConfigureTools(); - Command* clone() const override { return new ConfigureTools(*this); } + ToolsConfigurationWindow(Context* ctx) : m_ctx(ctx) { + m_ctx->addObserver(this); -protected: - void onExecute(Context* context) override; - void onSetActiveDocument(doc::Document* document) override; + // Slots + this->Close.connect(Bind<void>(&ToolsConfigurationWindow::onWindowClose, this)); + tiled()->Click.connect(Bind<void>(&ToolsConfigurationWindow::onTiledClick, this)); + tiledX()->Click.connect(Bind<void>(&ToolsConfigurationWindow::onTiledXYClick, this, filters::TILED_X_AXIS, tiledX())); + tiledY()->Click.connect(Bind<void>(&ToolsConfigurationWindow::onTiledXYClick, this, filters::TILED_Y_AXIS, tiledY())); + viewGrid()->Click.connect(Bind<void>(&ToolsConfigurationWindow::onViewGridClick, this)); + pixelGrid()->Click.connect(Bind<void>(&ToolsConfigurationWindow::onPixelGridClick, this)); + setGrid()->Click.connect(Bind<void>(&ToolsConfigurationWindow::onSetGridClick, this)); + snapToGrid()->Click.connect(Bind<void>(&ToolsConfigurationWindow::onSnapToGridClick, this)); + + remapWindow(); + centerWindow(); + load_window_pos(this, "ConfigureTool"); + + onSetActiveDocument(m_ctx->activeDocument()); + } -private: - CheckBox* m_tiled; - CheckBox* m_tiledX; - CheckBox* m_tiledY; - CheckBox* m_pixelGrid; - CheckBox* m_snapToGrid; - CheckBox* m_viewGrid; - ISettings* m_settings; - IDocumentSettings* m_docSettings; - - void onWindowClose(); - void onTiledClick(); - void onTiledXYClick(int tiled_axis, CheckBox* checkbox); - void onViewGridClick(); - void onPixelGridClick(); - void onSetGridClick(); - void onSnapToGridClick(); -}; + ~ToolsConfigurationWindow() { + m_ctx->removeObserver(this); + } -ConfigureTools::ConfigureTools() - : Command("ConfigureTools", - "Configure Tools", - CmdUIOnlyFlag) -{ - m_settings = NULL; - m_docSettings = NULL; -} +private: + ISettings* settings() { + ASSERT(m_ctx); + return m_ctx->settings(); + } -void ConfigureTools::onExecute(Context* context) -{ - m_settings = context->settings(); - m_docSettings = NULL; + IDocumentSettings* docSettings() { + ASSERT(settings()); + return settings()->getDocumentSettings(m_ctx->activeDocument()); + } - Button* set_grid; - bool first_time = false; + void onSetActiveDocument(doc::Document* document) override { + IDocumentSettings* docSettings = this->docSettings(); - if (!window) { - window = app::load_widget<Window>("tools_configuration.xml", "configure_tool"); - first_time = true; + tiled()->setSelected(docSettings->getTiledMode() != filters::TILED_NONE); + tiledX()->setSelected(docSettings->getTiledMode() & filters::TILED_X_AXIS ? true: false); + tiledY()->setSelected(docSettings->getTiledMode() & filters::TILED_Y_AXIS ? true: false); + snapToGrid()->setSelected(docSettings->getSnapToGrid()); + viewGrid()->setSelected(docSettings->getGridVisible()); + pixelGrid()->setSelected(docSettings->getPixelGridVisible()); } - // If the window is opened, close it - else if (window->isVisible()) { - context->removeObserver(this); - window->closeWindow(NULL); - return; + + void onWindowClose() { + save_window_pos(this, "ConfigureTool"); } - context->addObserver(this); + void onTiledClick() { + bool flag = tiled()->isSelected(); - try { - m_tiled = app::find_widget<CheckBox>(window, "tiled"); - m_tiledX = app::find_widget<CheckBox>(window, "tiled_x"); - m_tiledY = app::find_widget<CheckBox>(window, "tiled_y"); - m_snapToGrid = app::find_widget<CheckBox>(window, "snap_to_grid"); - m_viewGrid = app::find_widget<CheckBox>(window, "view_grid"); - m_pixelGrid = app::find_widget<CheckBox>(window, "pixel_grid"); - set_grid = app::find_widget<Button>(window, "set_grid"); - } - catch (...) { - delete window; - window = NULL; - throw; + docSettings()->setTiledMode( + flag ? filters::TILED_BOTH: + filters::TILED_NONE); + + tiledX()->setSelected(flag); + tiledY()->setSelected(flag); } - onSetActiveDocument(context->activeDocument()); + void onTiledXYClick(int tiled_axis, CheckBox* checkbox) { + int tiled_mode = docSettings()->getTiledMode(); - if (first_time) { - // Slots - window->Close.connect(Bind<void>(&ConfigureTools::onWindowClose, this)); - m_tiled->Click.connect(Bind<void>(&ConfigureTools::onTiledClick, this)); - m_tiledX->Click.connect(Bind<void>(&ConfigureTools::onTiledXYClick, this, filters::TILED_X_AXIS, m_tiledX)); - m_tiledY->Click.connect(Bind<void>(&ConfigureTools::onTiledXYClick, this, filters::TILED_Y_AXIS, m_tiledY)); - m_viewGrid->Click.connect(Bind<void>(&ConfigureTools::onViewGridClick, this)); - m_pixelGrid->Click.connect(Bind<void>(&ConfigureTools::onPixelGridClick, this)); - set_grid->Click.connect(Bind<void>(&ConfigureTools::onSetGridClick, this)); - m_snapToGrid->Click.connect(Bind<void>(&ConfigureTools::onSnapToGridClick, this)); + if (checkbox->isSelected()) + tiled_mode |= tiled_axis; + else + tiled_mode &= ~tiled_axis; - App::instance()->Exit.connect(&on_exit_delete_this_widget); - } + checkbox->findSibling("tiled")->setSelected(tiled_mode != filters::TILED_NONE); - // Default position - window->remapWindow(); - window->centerWindow(); + docSettings()->setTiledMode((filters::TiledMode)tiled_mode); + } - // Load window configuration - load_window_pos(window, "ConfigureTool"); + void onViewGridClick() { + docSettings()->setGridVisible(viewGrid()->isSelected()); + } - window->openWindow(); -} + void onPixelGridClick() { + docSettings()->setPixelGridVisible(pixelGrid()->isSelected()); + } -void ConfigureTools::onWindowClose() -{ - save_window_pos(window, "ConfigureTool"); -} + void onSetGridClick() { + try { + // TODO use the same context as in ConfigureTools::onExecute + const ContextReader reader(UIContext::instance()); + const Document* document = reader.document(); -void ConfigureTools::onTiledClick() -{ - bool flag = m_tiled->isSelected(); + if (document && document->isMaskVisible()) { + const Mask* mask(document->mask()); - m_docSettings->setTiledMode(flag ? filters::TILED_BOTH: - filters::TILED_NONE); + docSettings()->setGridBounds(mask->bounds()); + } + else { + Command* grid_settings_cmd = + CommandsModule::instance()->getCommandByName(CommandId::GridSettings); - m_tiledX->setSelected(flag); - m_tiledY->setSelected(flag); -} + UIContext::instance()->executeCommand(grid_settings_cmd, NULL); + } + } + catch (LockedDocumentException& e) { + Console::showException(e); + } + } -void ConfigureTools::onTiledXYClick(int tiled_axis, CheckBox* checkbox) -{ - int tiled_mode = m_docSettings->getTiledMode(); + void onSnapToGridClick() { + docSettings()->setSnapToGrid(snapToGrid()->isSelected()); + } - if (checkbox->isSelected()) - tiled_mode |= tiled_axis; - else - tiled_mode &= ~tiled_axis; + Context* m_ctx; +}; - checkbox->findSibling("tiled")->setSelected(tiled_mode != filters::TILED_NONE); +class ConfigureTools : public Command { +public: + ConfigureTools(); + Command* clone() const override { return new ConfigureTools(*this); } - m_docSettings->setTiledMode((filters::TiledMode)tiled_mode); -} +protected: + void onExecute(Context* context) override; +}; -void ConfigureTools::onSnapToGridClick() -{ - m_docSettings->setSnapToGrid(m_snapToGrid->isSelected()); -} +static ToolsConfigurationWindow* window; -void ConfigureTools::onViewGridClick() +ConfigureTools::ConfigureTools() + : Command("ConfigureTools", + "Configure Tools", + CmdUIOnlyFlag) { - m_docSettings->setGridVisible(m_viewGrid->isSelected()); } -void ConfigureTools::onPixelGridClick() +// Slot for App::Exit signal +static void on_exit_delete_this_widget() { - m_docSettings->setPixelGridVisible(m_pixelGrid->isSelected()); + ASSERT(window != NULL); + delete window; } -void ConfigureTools::onSetGridClick() +void ConfigureTools::onExecute(Context* context) { - try { - // TODO use the same context as in ConfigureTools::onExecute - const ContextReader reader(UIContext::instance()); - const Document* document = reader.document(); - - if (document && document->isMaskVisible()) { - const Mask* mask(document->mask()); - - m_docSettings->setGridBounds(mask->bounds()); - } - else { - Command* grid_settings_cmd = - CommandsModule::instance()->getCommandByName(CommandId::GridSettings); + if (!window) { + window = new ToolsConfigurationWindow(context); - UIContext::instance()->executeCommand(grid_settings_cmd, NULL); - } - } - catch (LockedDocumentException& e) { - Console::showException(e); + App::instance()->Exit.connect(&on_exit_delete_this_widget); } -} - -void ConfigureTools::onSetActiveDocument(doc::Document* document) -{ - if (!document) - return; - - m_docSettings = m_settings->getDocumentSettings(document); - ASSERT(m_docSettings); - if (!m_docSettings) + // If the window is opened, close it + else if (window->isVisible()) { + window->closeWindow(NULL); return; + } - m_tiled->setSelected(m_docSettings->getTiledMode() != filters::TILED_NONE); - m_tiledX->setSelected(m_docSettings->getTiledMode() & filters::TILED_X_AXIS ? true: false); - m_tiledY->setSelected(m_docSettings->getTiledMode() & filters::TILED_Y_AXIS ? true: false); - m_snapToGrid->setSelected(m_docSettings->getSnapToGrid()); - m_viewGrid->setSelected(m_docSettings->getGridVisible()); - m_pixelGrid->setSelected(m_docSettings->getPixelGridVisible()); + window->openWindow(); } Command* CommandFactory::createConfigureToolsCommand() -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/aseprite.git _______________________________________________ Pkg-games-commits mailing list [email protected] http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-games-commits

