Revision: 2347
http://synfig.svn.sourceforge.net/synfig/?rev=2347&view=rev
Author: gballintijn
Date: 2009-02-21 13:56:32 +0000 (Sat, 21 Feb 2009)
Log Message:
-----------
#2579838: Apply default fore- or background color to multiple layers
This patch implements the application of the "apply default color" popup
menu in the parameter panel in the case that multiple layers are selected.
Allowing the animator to change the color of multiple layers at once. It
also extends this ability to applying either the foreground color or the
background color.
Modified Paths:
--------------
synfig-studio/trunk/src/synfigapp/action.cpp
synfig-studio/trunk/src/synfigapp/actions/colorset.cpp
synfig-studio/trunk/src/synfigapp/actions/colorset.h
Modified: synfig-studio/trunk/src/synfigapp/action.cpp
===================================================================
--- synfig-studio/trunk/src/synfigapp/action.cpp 2009-02-21 00:14:52 UTC
(rev 2346)
+++ synfig-studio/trunk/src/synfigapp/action.cpp 2009-02-21 13:56:32 UTC
(rev 2347)
@@ -226,7 +226,8 @@
ADD_ACTION(Action::BLinePointTangentSplit);
ADD_ACTION(Action::GradientSet);
- ADD_ACTION(Action::ColorSet);
+ ADD_ACTION(Action::ColorSetFromFG);
+ ADD_ACTION(Action::ColorSetFromBG);
ADD_ACTION(Action::TimepointsMove);
ADD_ACTION(Action::TimepointsCopy);
Modified: synfig-studio/trunk/src/synfigapp/actions/colorset.cpp
===================================================================
--- synfig-studio/trunk/src/synfigapp/actions/colorset.cpp 2009-02-21
00:14:52 UTC (rev 2346)
+++ synfig-studio/trunk/src/synfigapp/actions/colorset.cpp 2009-02-21
13:56:32 UTC (rev 2347)
@@ -50,23 +50,32 @@
/* === M A C R O S ========================================================= */
-ACTION_INIT(Action::ColorSet);
-ACTION_SET_NAME(Action::ColorSet,"ColorSet");
-ACTION_SET_LOCAL_NAME(Action::ColorSet,N_("Apply Default Color"));
-ACTION_SET_TASK(Action::ColorSet,"set");
-ACTION_SET_CATEGORY(Action::ColorSet,Action::CATEGORY_VALUEDESC);
-ACTION_SET_PRIORITY(Action::ColorSet,0);
-ACTION_SET_VERSION(Action::ColorSet,"0.0");
-ACTION_SET_CVS_ID(Action::ColorSet,"$Id$");
+ACTION_INIT(Action::ColorSetFromFG);
+ACTION_SET_NAME(Action::ColorSetFromFG, "ColorSetFromFG");
+ACTION_SET_LOCAL_NAME(Action::ColorSetFromFG, N_("Apply Foreground Color"));
+ACTION_SET_TASK(Action::ColorSetFromFG, "set");
+ACTION_SET_CATEGORY(Action::ColorSetFromFG, Action::CATEGORY_VALUEDESC);
+ACTION_SET_PRIORITY(Action::ColorSetFromFG, 0);
+ACTION_SET_VERSION(Action::ColorSetFromFG, "0.0");
+ACTION_SET_CVS_ID(Action::ColorSetFromFG, "$Id$");
+ACTION_INIT(Action::ColorSetFromBG);
+ACTION_SET_NAME(Action::ColorSetFromBG, "ColorSetFromBG");
+ACTION_SET_LOCAL_NAME(Action::ColorSetFromBG, N_("Apply Background Color"));
+ACTION_SET_TASK(Action::ColorSetFromBG, "set");
+ACTION_SET_CATEGORY(Action::ColorSetFromBG, Action::CATEGORY_VALUEDESC);
+ACTION_SET_PRIORITY(Action::ColorSetFromBG, 0);
+ACTION_SET_VERSION(Action::ColorSetFromBG, "0.0");
+ACTION_SET_CVS_ID(Action::ColorSetFromBG, "$Id$");
+
/* === G L O B A L S ======================================================= */
/* === P R O C E D U R E S ================================================= */
/* === M E T H O D S ======================================================= */
-Action::ColorSet::ColorSet():
- time(0)
+Action::ColorSet::ColorSet(bool use_fg_color):
+ time(0), use_fg_color(use_fg_color)
{
}
@@ -77,6 +86,7 @@
ret.push_back(ParamDesc("value_desc",Param::TYPE_VALUEDESC)
.set_local_name(_("ValueDesc"))
+ .set_supports_multiple()
);
ret.push_back(ParamDesc("time",Param::TYPE_TIME)
@@ -90,40 +100,57 @@
bool
Action::ColorSet::is_candidate(const ParamList &x)
{
- if(!candidate_check(get_param_vocab(),x))
+ if (!candidate_check(get_param_vocab(), x))
return false;
- return
x.find("value_desc")->second.get_value_desc().get_value_type()==ValueBase::TYPE_COLOR;
+
+ std::multimap<synfig::String, Param>::const_iterator iter;
+ for (iter = x.begin(); iter != x.end(); ++iter)
+ {
+ if (iter->first == "value_desc" &&
+ iter->second.get_value_desc().get_value_type()
!= ValueBase::TYPE_COLOR)
+ return false;
+ }
+
+ return true;
}
bool
Action::ColorSet::set_param(const synfig::String& name, const Action::Param
¶m)
{
- if(name=="value_desc" && param.get_type()==Param::TYPE_VALUEDESC)
+ if (name == "value_desc" && param.get_type() == Param::TYPE_VALUEDESC)
{
// Grab the value_desc
- value_desc=param.get_value_desc();
+ ValueDesc value_desc = param.get_value_desc();
+ if (value_desc.get_value_type() != ValueBase::TYPE_COLOR)
+ return false;
- // Grab the current color
- color=synfigapp::Main::get_foreground_color();
+ value_desc_list.push_back(value_desc);
- return value_desc.get_value_type()==ValueBase::TYPE_COLOR;
+ // Grab the current fore- or background color
+ if (use_fg_color)
+ color = synfigapp::Main::get_foreground_color();
+ else
+ color = synfigapp::Main::get_background_color();
+
+ return true;
}
- if(name=="time" && param.get_type()==Param::TYPE_TIME)
+ if (name == "time" && param.get_type() == Param::TYPE_TIME)
{
- time=param.get_time();
+ time = param.get_time();
return true;
}
- return Action::CanvasSpecific::set_param(name,param);
+ return Action::CanvasSpecific::set_param(name, param);
}
bool
-Action::ColorSet::is_ready()const
+Action::ColorSet::is_ready() const
{
- if(!value_desc || value_desc.get_value_type()!=ValueBase::TYPE_COLOR)
+ if (value_desc_list.size() == 0)
return false;
+
return Action::CanvasSpecific::is_ready();
}
@@ -132,17 +159,21 @@
{
clear();
- Action::Handle action;
- action=Action::create("ValueDescSet");
+ std::list<ValueDesc>::iterator iter;
+ for (iter = value_desc_list.begin(); iter != value_desc_list.end();
++iter)
+ {
+ ValueDesc& value_desc(*iter);
- action->set_param("canvas",get_canvas());
- action->set_param("canvas_interface",get_canvas_interface());
- action->set_param("value_desc",value_desc);
- action->set_param("new_value",ValueBase(color));
- action->set_param("time",time);
+ Action::Handle action = Action::create("ValueDescSet");
+ action->set_param("canvas", get_canvas());
+ action->set_param("canvas_interface", get_canvas_interface());
+ action->set_param("value_desc", value_desc);
+ action->set_param("new_value", ValueBase(color));
+ action->set_param("time", time);
- if(!action->is_ready())
- throw Error(Error::TYPE_NOTREADY);
+ if (!action->is_ready())
+ throw Error(Error::TYPE_NOTREADY);
- add_action_front(action);
+ add_action_front(action);
+ }
}
Modified: synfig-studio/trunk/src/synfigapp/actions/colorset.h
===================================================================
--- synfig-studio/trunk/src/synfigapp/actions/colorset.h 2009-02-21
00:14:52 UTC (rev 2346)
+++ synfig-studio/trunk/src/synfigapp/actions/colorset.h 2009-02-21
13:56:32 UTC (rev 2347)
@@ -46,25 +46,44 @@
{
private:
- ValueDesc value_desc;
+ std::list<ValueDesc> value_desc_list;
synfig::Color color;
synfig::Time time;
+ bool use_fg_color;
public:
- ColorSet();
+ ColorSet(bool use_fg_color);
static ParamVocab get_param_vocab();
static bool is_candidate(const ParamList &x);
virtual bool set_param(const synfig::String& name, const Param &);
- virtual bool is_ready()const;
+ virtual bool is_ready() const;
virtual void prepare();
+};
+class ColorSetFromFG : public ColorSet
+{
+public:
+
+ ColorSetFromFG() : ColorSet(true) {}
+
ACTION_MODULE_EXT
+
};
+class ColorSetFromBG : public ColorSet
+{
+public:
+
+ ColorSetFromBG() : ColorSet(false) {}
+
+ ACTION_MODULE_EXT
+
+};
+
}; // END of namespace action
}; // END of namespace studio
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
------------------------------------------------------------------------------
Open Source Business Conference (OSBC), March 24-25, 2009, San Francisco, CA
-OSBC tackles the biggest issue in open source: Open Sourcing the Enterprise
-Strategies to boost innovation and cut costs with open source participation
-Receive a $600 discount off the registration fee with the source code: SFAD
http://p.sf.net/sfu/XcvMzF8H
_______________________________________________
Synfig-devl mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/synfig-devl