From a4bf93e4d57c42c38ad59e169ecfc644a877775e Mon Sep 17 00:00:00 2001 From: David Capello Date: Thu, 16 Apr 2015 12:55:39 -0300 Subject: [PATCH 1/3] MaskByColorCommand needs an active image to be executed (fix #627) --- src/app/commands/cmd_mask_by_color.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/app/commands/cmd_mask_by_color.cpp b/src/app/commands/cmd_mask_by_color.cpp index cf20fdab8..e26a2c382 100644 --- a/src/app/commands/cmd_mask_by_color.cpp +++ b/src/app/commands/cmd_mask_by_color.cpp @@ -67,7 +67,8 @@ MaskByColorCommand::MaskByColorCommand() bool MaskByColorCommand::onEnabled(Context* context) { return context->checkFlags(ContextFlags::ActiveDocumentIsWritable | - ContextFlags::HasActiveSprite); + ContextFlags::HasActiveSprite | + ContextFlags::HasActiveImage); } void MaskByColorCommand::onExecute(Context* context) From 5a5a6fe4f631f5e568ce1589d31d29436a90bffb Mon Sep 17 00:00:00 2001 From: David Capello Date: Thu, 16 Apr 2015 13:07:14 -0300 Subject: [PATCH 2/3] Replace slider_change_hook() with StatusBar::onCelOpacityChange() --- src/app/ui/status_bar.cpp | 10 ++++------ src/app/ui/status_bar.h | 1 + 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/src/app/ui/status_bar.cpp b/src/app/ui/status_bar.cpp index 61ee1fd79..e1c618e2e 100644 --- a/src/app/ui/status_bar.cpp +++ b/src/app/ui/status_bar.cpp @@ -84,8 +84,6 @@ private: base::UniquePtr m_timer; }; -static void slider_change_hook(Slider* slider); - static WidgetType statusbar_type() { static WidgetType type = kGenericWidget; @@ -173,7 +171,7 @@ StatusBar::StatusBar() setup_mini_look(m_newFrame); setup_mini_look(m_slider); - m_slider->Change.connect(Bind(&slider_change_hook, m_slider)); + m_slider->Change.connect(Bind(&StatusBar::onCelOpacityChange, this)); m_slider->setMinSize(gfx::Size(ui::display_w()/5, 0)); box1->setBorder(gfx::Border(2, 1, 2, 2)*guiscale()); @@ -426,7 +424,7 @@ bool StatusBar::CustomizedTipWindow::onProcessMessage(Message* msg) return ui::TipWindow::onProcessMessage(msg); } -static void slider_change_hook(Slider* slider) +void StatusBar::onCelOpacityChange() { try { ContextWriter writer(UIContext::instance(), 500); @@ -434,13 +432,13 @@ static void slider_change_hook(Slider* slider) DocumentRange range = App::instance()->getMainWindow()->getTimeline()->range(); if (range.enabled()) { for (Cel* cel : get_unique_cels(writer.sprite(), range)) - cel->setOpacity(slider->getValue()); + cel->setOpacity(m_slider->getValue()); } else { Cel* cel = writer.cel(); if (cel) { // Update the opacity - cel->setOpacity(slider->getValue()); + cel->setOpacity(m_slider->getValue()); } } diff --git a/src/app/ui/status_bar.h b/src/app/ui/status_bar.h index e0c41f753..483aab268 100644 --- a/src/app/ui/status_bar.h +++ b/src/app/ui/status_bar.h @@ -60,6 +60,7 @@ namespace app { private: void onCurrentToolChange(); + void onCelOpacityChange(); void updateFromDocument(Editor* editor); void updateCurrentFrame(Editor* editor); void newFrame(); From aae3e69fdaf7d1ee8141fc41f3f3881e24b352b6 Mon Sep 17 00:00:00 2001 From: David Capello Date: Thu, 16 Apr 2015 13:14:39 -0300 Subject: [PATCH 3/3] Fix bug showing frame # and opacity slider in StatusBar without an active document --- src/app/ui/status_bar.cpp | 8 +++++--- src/app/ui/status_bar.h | 1 + 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/app/ui/status_bar.cpp b/src/app/ui/status_bar.cpp index e1c618e2e..7f397d6c1 100644 --- a/src/app/ui/status_bar.cpp +++ b/src/app/ui/status_bar.cpp @@ -137,6 +137,7 @@ StatusBar* StatusBar::m_instance = NULL; StatusBar::StatusBar() : Widget(statusbar_type()) , m_color(app::Color::fromMask()) + , m_hasDoc(false) { m_instance = this; @@ -331,7 +332,7 @@ void StatusBar::onResize(ResizeEvent& ev) rc.x += rc.w - prefWidth - border.right() - toolBarWidth; rc.w = prefWidth; - m_commandsBox->setVisible(true); + m_commandsBox->setVisible(true && m_hasDoc); m_commandsBox->setBounds(rc); } else @@ -455,6 +456,7 @@ void StatusBar::updateFromDocument(Editor* editor) try { if (editor && editor->document()) { const DocumentReader reader(editor->document(), 100); + m_hasDoc = true; m_commandsBox->setVisible(true); // Cel opacity @@ -473,11 +475,11 @@ void StatusBar::updateFromDocument(Editor* editor) } } else { + m_hasDoc = false; m_commandsBox->setVisible(false); } } - catch (LockedDocumentException&) { - // Disable all + catch (const LockedDocumentException&) { m_slider->setEnabled(false); } } diff --git a/src/app/ui/status_bar.h b/src/app/ui/status_bar.h index 483aab268..50eeada05 100644 --- a/src/app/ui/status_bar.h +++ b/src/app/ui/status_bar.h @@ -83,6 +83,7 @@ namespace app { ui::Slider* m_slider; // Opacity slider ui::Entry* m_currentFrame; // Current frame and go to frame entry ui::Button* m_newFrame; // Button to create a new frame + bool m_hasDoc; // Tip window class CustomizedTipWindow;