/* === C L A S S E S & S T R U C T S ======================================= */
-namespace synfigapp { class ValueDesc; }
+namespace synfigapp { class ValueDesc; class CanvasInterface; }
namespace synfig { class ParamDesc; }
namespace studio
** the work area that the user may want to interact with.
** This includes ducks, beziers, and strokes
**
-** \note At some point I'll probably rename this class to "DuckOMatic".
*/
class Duckmatic
{
private:
+ etl::loose_handle<synfigapp::CanvasInterface> canvas_interface;
+
Type type_mask;
DuckMap duck_map;
public:
- Duckmatic();
+ Duckmatic(etl::loose_handle<synfigapp::CanvasInterface> canvas_interface);
virtual ~Duckmatic();
sigc::signal<void>& signal_duck_selection_changed() { return signal_duck_selection_changed_; }
void unselect_duck(const etl::handle<Duck> &duck);
+ //! Begin dragging ducks
+ /*! \param offset Canvas coordinates of the mouse when the drag began */
void start_duck_drag(const synfig::Vector& offset);
+
+ //! Continue dragging the selected ducks
+ /*! The overall vector of the drag is vector-offset
+ * (where offset was given in start_duck_drag)
+ * \param vector Canvas coordinates of the mouse at this moment */
void translate_selected_ducks(const synfig::Vector& vector);
+
+ //! Update the coordinates of tangents and linked-to-bline ducks
void update_ducks();
- bool end_duck_drag();
- void signal_edited_selected_ducks();
+ //! Ends the duck drag
+ bool end_duck_drag();
+ //! Signals to each selected duck that it has been clicked
void signal_user_click_selected_ducks(int button);
+ //! Calls all of the ducks' edited signals
+ /*! Updates corresponding valuenodes after a drag */
+ void signal_edited_selected_ducks();
+
+ bool on_duck_changed(const synfig::Point &value,const synfigapp::ValueDesc& value_desc);
+ bool on_duck_angle_changed(const synfig::Angle &rotation,const synfigapp::ValueDesc& value_desc);
etl::handle<Duck> find_similar_duck(etl::handle<Duck> duck);
etl::handle<Duck> add_similar_duck(etl::handle<Duck> duck);
bool add_to_ducks(const synfigapp::ValueDesc& value_desc,etl::handle<CanvasView> canvas_view, const synfig::TransformStack& transform_stack_, synfig::ParamDesc *param_desc=0, int multiple=0);
- //! \writeme
+ //! Set the type mask, which determines what types of ducks are shown
void set_type_mask(Type x) { type_mask=x; }
- //! \writeme
+ //! Get the type mask, which determines what types of ducks are shown
Type get_type_mask()const { return type_mask; }
void select_all_ducks();