From: Carlos Lopez Date: Sun, 28 Jun 2009 13:05:28 +0000 (+0200) Subject: Add Resolution Dial widget. Synchronise Low res check button with low res action... X-Git-Url: https://git.pterodactylus.net/?a=commitdiff_plain;h=3a2a20f4d04c9a1791b6e1997e75d729326a422b;p=synfig.git Add Resolution Dial widget. Synchronise Low res check button with low res action and vice-versa.Also Increase/Decrease resolution buttons change low res check button status and low res action. --- diff --git a/synfig-studio/trunk/src/gtkmm/Makefile.am b/synfig-studio/trunk/src/gtkmm/Makefile.am index 42cdd55..1be3e71 100644 --- a/synfig-studio/trunk/src/gtkmm/Makefile.am +++ b/synfig-studio/trunk/src/gtkmm/Makefile.am @@ -295,7 +295,8 @@ OTHER_HH = \ zoomdial.h \ framedial.h \ keyframedial.h \ - toggleducksdial.h + toggleducksdial.h \ + resolutiondial.h OTHER_CC = \ main.cpp \ @@ -328,7 +329,8 @@ OTHER_CC = \ zoomdial.cpp \ framedial.cpp \ keyframedial.cpp \ - toggleducksdial.cpp + toggleducksdial.cpp \ + resolutiondial.cpp INCLUDES = \ -I$(top_srcdir)/src diff --git a/synfig-studio/trunk/src/gtkmm/canvasview.cpp b/synfig-studio/trunk/src/gtkmm/canvasview.cpp index e8e3a4d..92882f7 100644 --- a/synfig-studio/trunk/src/gtkmm/canvasview.cpp +++ b/synfig-studio/trunk/src/gtkmm/canvasview.cpp @@ -705,6 +705,7 @@ CanvasView::CanvasView(etl::loose_handle instance,etl::handleshow(); + // Set up the ResolutionDial widget + + resolutiondial=Gtk::manage(new class ResolutionDial()); + + resolutiondial->update_lowres(work_area->get_low_resolution_flag()); + resolutiondial->signal_increase_resolution().connect( + sigc::mem_fun(*this, &studio::CanvasView::decrease_low_res_pixel_size)); + resolutiondial->signal_decrease_resolution().connect( + sigc::mem_fun(*this, &studio::CanvasView::increase_low_res_pixel_size)); + resolutiondial->signal_use_low_resolution().connect( + sigc::mem_fun(*this, &studio::CanvasView::toggle_low_res_pixel_flag)); + resolutiondial->show(); + + displaybar->attach(*resolutiondial, 1, 2, 0, 1, Gtk::SHRINK, Gtk::SHRINK); displaybar->attach(*toggleducksdial, 0, 1, 0, 1, Gtk::SHRINK, Gtk::SHRINK); displaybar->show(); @@ -1452,7 +1468,7 @@ CanvasView::init_menus() action = Gtk::ToggleAction::create("toggle-low-res", _("Use Low-Res")); action->set_active(work_area->get_low_resolution_flag()); - action_group->add(action, sigc::mem_fun(*work_area, &studio::WorkArea::toggle_low_resolution_flag)); + action_group->add(action, sigc::mem_fun(*this, &studio::CanvasView::toggle_low_res_pixel_flag)); action = Gtk::ToggleAction::create("toggle-onion-skin", _("Show Onion Skin")); action->set_active(work_area->get_onion_skin()); @@ -3066,9 +3082,11 @@ CanvasView::rebuild_ducks() void CanvasView::decrease_low_res_pixel_size() { + if(changing_resolution_) + return; + changing_resolution_=true; list sizes = CanvasView::get_pixel_sizes(); int pixel_size = work_area->get_low_res_pixel_size(); - for (list::iterator iter = sizes.begin(); iter != sizes.end(); iter++) if (*iter == pixel_size) { @@ -3084,17 +3102,32 @@ CanvasView::decrease_low_res_pixel_size() } break; } + // Update the "toggle-low-res" action + Glib::RefPtr action = Glib::RefPtr::cast_dynamic(action_group->get_action("toggle-low-res")); + action->set_active(work_area->get_low_resolution_flag()); + // Update toggle low res button + resolutiondial->update_lowres(work_area->get_low_resolution_flag()); + changing_resolution_=false; } void CanvasView::increase_low_res_pixel_size() { + if(changing_resolution_) + return; + changing_resolution_=true; list sizes = CanvasView::get_pixel_sizes(); int pixel_size = work_area->get_low_res_pixel_size(); - if (!work_area->get_low_resolution_flag()) { + // We were using "hi res" so change it to low res. work_area->set_low_resolution_flag(true); + // Update the "toggle-low-res" action + Glib::RefPtr action = Glib::RefPtr::cast_dynamic(action_group->get_action("toggle-low-res")); + action->set_active(true); + // Update the toggle low res button + resolutiondial->update_lowres(true); + changing_resolution_=false; return; } @@ -3110,6 +3143,27 @@ CanvasView::increase_low_res_pixel_size() } break; } + // Update the "toggle-low-res" action + Glib::RefPtr action = Glib::RefPtr::cast_dynamic(action_group->get_action("toggle-low-res")); + action->set_active(work_area->get_low_resolution_flag()); + // Update toggle low res button + resolutiondial->update_lowres(work_area->get_low_resolution_flag()); + changing_resolution_=false; +} + +void +CanvasView::toggle_low_res_pixel_flag() +{ + if(changing_resolution_) + return; + changing_resolution_=true; + work_area->toggle_low_resolution_flag(); + // Update the toggle low res button + resolutiondial->update_lowres(work_area->get_low_resolution_flag()); + // Update the "toggle-low-res" action + Glib::RefPtr action = Glib::RefPtr::cast_dynamic(action_group->get_action("toggle-low-res")); + action->set_active(work_area->get_low_resolution_flag()); + changing_resolution_=false; } void diff --git a/synfig-studio/trunk/src/gtkmm/canvasview.h b/synfig-studio/trunk/src/gtkmm/canvasview.h index 5986da6..ea3fae7 100644 --- a/synfig-studio/trunk/src/gtkmm/canvasview.h +++ b/synfig-studio/trunk/src/gtkmm/canvasview.h @@ -67,6 +67,7 @@ #include "dialog_keyframe.h" #include "framedial.h" #include "toggleducksdial.h" +#include "resolutiondial.h" #include "duckmatic.h" #include @@ -269,6 +270,8 @@ private: FrameDial *framedial; ToggleDucksDial *toggleducksdial; bool toggling_ducks_; + ResolutionDial *resolutiondial; + bool changing_resolution_; //! Shows current time and allows edition @@ -431,6 +434,7 @@ private: void decrease_low_res_pixel_size(); void increase_low_res_pixel_size(); + void toggle_low_res_pixel_flag(); /* -- ** -- P U B L I C M E T H O D S ----------------------------------------- diff --git a/synfig-studio/trunk/src/gtkmm/resolutiondial.cpp b/synfig-studio/trunk/src/gtkmm/resolutiondial.cpp new file mode 100644 index 0000000..5680f62 --- /dev/null +++ b/synfig-studio/trunk/src/gtkmm/resolutiondial.cpp @@ -0,0 +1,97 @@ +/* === S Y N F I G ========================================================= */ +/*! \file resolutiondial.cpp +** \brief Template File +** +** $Id$ +** +** \legal +** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley +** Copyright (c) 2009 Gerco Ballintijn +** Copyright (c) 2009 Carlos Lopez +** +** This package is free software; you can redistribute it and/or +** modify it under the terms of the GNU General Public License as +** published by the Free Software Foundation; either version 2 of +** the License, or (at your option) any later version. +** +** This package is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +** General Public License for more details. +** \endlegal +*/ +/* ========================================================================= */ + +/* === H E A D E R S ======================================================= */ + +#ifdef USING_PCH +# include "pch.h" +#else +#ifdef HAVE_CONFIG_H +# include +#endif + +#include "resolutiondial.h" +#include +#include + +#endif + +/* === U S I N G =========================================================== */ + +using namespace std; +using namespace studio; + +/* === M A C R O S ========================================================= */ + +/* === G L O B A L S ======================================================= */ + +/* === P R O C E D U R E S ================================================= */ + +/* === M E T H O D S ======================================================= */ + +ResolutionDial::ResolutionDial(): Gtk::Table(1, 3, false) +{ + Gtk::IconSize iconsize = Gtk::IconSize::from_name("synfig-small_icon"); + + increase_resolution = create_icon(iconsize, Gtk::Stock::ADD, _("Increase Display Resolution")); + decrease_resolution = create_icon(iconsize, Gtk::Stock::REMOVE, _("Decrease Display Resolution")); + use_low_resolution = create_check(_("Low Res"), _("Use Low Resolution when enabled")); + + attach(*decrease_resolution, 0, 1, 0, 1, Gtk::SHRINK, Gtk::SHRINK, 0, 0); + attach(*use_low_resolution, 1, 2, 0, 1, Gtk::SHRINK, Gtk::SHRINK, 0, 0); + attach(*increase_resolution, 2, 3, 0, 1, Gtk::SHRINK, Gtk::SHRINK, 0, 0); +} + +Gtk::Button * +ResolutionDial::create_icon(Gtk::IconSize size, const Gtk::BuiltinStockID & stockid, + const char * tooltip) +{ + Gtk::Button *button = manage(new class Gtk::Button()); + Gtk::Image *icon = manage(new Gtk::Image(stockid, size)); + button->add(*icon); + tooltips.set_tip(*button, tooltip); + icon->set_padding(0, 0); + icon->show(); + button->set_relief(Gtk::RELIEF_NONE); + button->show(); + + return button; +} + +Gtk::CheckButton * +ResolutionDial::create_check(const char *label, const char * tooltip) +{ + Gtk::CheckButton *cbutton = manage(new class Gtk::CheckButton()); + cbutton->set_label(label); + tooltips.set_tip(*cbutton, tooltip); + cbutton->show(); + + return cbutton; +} + +void +ResolutionDial::update_lowres(bool flag) +{ + use_low_resolution->set_active(flag); +} diff --git a/synfig-studio/trunk/src/gtkmm/resolutiondial.h b/synfig-studio/trunk/src/gtkmm/resolutiondial.h new file mode 100644 index 0000000..5ee9df9 --- /dev/null +++ b/synfig-studio/trunk/src/gtkmm/resolutiondial.h @@ -0,0 +1,77 @@ +/* === S Y N F I G ========================================================= */ +/*! \file resolutiondial.h +** \brief Template Header +** +** $Id$ +** +** \legal +** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley +** Copyright (c) 2008 Chris Moore +** Copyright (c) 2009 Gerco Ballintijn +** Copyright (c) 2009 Carlos Lopez +** +** This package is free software; you can redistribute it and/or +** modify it under the terms of the GNU General Public License as +** published by the Free Software Foundation; either version 2 of +** the License, or (at your option) any later version. +** +** This package is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +** General Public License for more details. +** \endlegal +*/ +/* ========================================================================= */ + +/* === S T A R T =========================================================== */ + +#ifndef __SYNFIG_STUDIO_RESOLUTIONDIAL_H +#define __SYNFIG_STUDIO_RESOLUTIONDIAL_H + +/* === H E A D E R S ======================================================= */ + +#include +#include +#include +#include "duckmatic.h" + +#include "general.h" + + +/* === M A C R O S ========================================================= */ + +/* === T Y P E D E F S ===================================================== */ + +/* === C L A S S E S & S T R U C T S ======================================= */ + +namespace studio +{ + +class ResolutionDial : public Gtk::Table +{ + Gtk::Tooltips tooltips; + + Gtk::Button *increase_resolution; + Gtk::Button *decrease_resolution; + Gtk::CheckButton *use_low_resolution; + + Gtk::Button *create_icon(Gtk::IconSize size, const Gtk::BuiltinStockID & stockid, const char * tooltip); + Gtk::CheckButton *create_check(const char *text, const char *tooltip); + +public: + + ResolutionDial(); + + void update_lowres(bool flag); + Glib::SignalProxy0 signal_increase_resolution() { return increase_resolution->signal_clicked(); } + Glib::SignalProxy0 signal_decrease_resolution() { return decrease_resolution->signal_clicked(); } + Glib::SignalProxy0 signal_use_low_resolution() { return use_low_resolution-> signal_toggled(); } + +}; // END of class ResolutionDial + +}; // END of namespace studio + + +/* === E N D =============================================================== */ + +#endif