X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-studio%2Ftrunk%2Fsrc%2Fgtkmm%2Fduckmatic.h;h=42282e0fb454ca0fcd3d7ddea25b96069da93c9b;hb=9459638ad6797b8139f1e9f0715c96076dbf0890;hp=d7680db66bd24d03c156ddf9e29a66b4e3a1f98e;hpb=02252941b29de64037116f4d37991a38d9ff0d94;p=synfig.git diff --git a/synfig-studio/trunk/src/gtkmm/duckmatic.h b/synfig-studio/trunk/src/gtkmm/duckmatic.h index d7680db..42282e0 100644 --- a/synfig-studio/trunk/src/gtkmm/duckmatic.h +++ b/synfig-studio/trunk/src/gtkmm/duckmatic.h @@ -2,19 +2,21 @@ /*! \file duckmatic.h ** \brief Template Header ** -** $Id: duckmatic.h,v 1.1.1.1 2005/01/07 03:34:36 darco Exp $ +** $Id$ ** ** \legal -** Copyright (c) 2002 Robert B. Quattlebaum Jr. +** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley +** Copyright (c) 2007, 2008 Chris Moore ** -** This software and associated documentation -** are CONFIDENTIAL and PROPRIETARY property of -** the above-mentioned copyright holder. +** 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. ** -** You may not copy, print, publish, or in any -** other way distribute this software without -** a prior written agreement with -** the copyright holder. +** 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 */ /* ========================================================================= */ @@ -48,19 +50,27 @@ /* === M A C R O S ========================================================= */ -#define HASH_MAP_H - #ifdef HASH_MAP_H #include HASH_MAP_H +#include FUNCTIONAL_H + #ifndef __STRING_HASH__ #define __STRING_HASH__ class StringHash { - __gnu_cxx::hash hasher_; +# ifdef FUNCTIONAL_HASH_ON_STRING + HASH_MAP_NAMESPACE::hash hasher_; +# else // FUNCTIONAL_HASH_ON_STRING + HASH_MAP_NAMESPACE::hash hasher_; +# endif // FUNCTIONAL_HASH_ON_STRING public: size_t operator()(const synfig::String& x)const { +# ifdef FUNCTIONAL_HASH_ON_STRING + return hasher_(x); +# else // FUNCTIONAL_HASH_ON_STRING return hasher_(x.c_str()); +# endif // FUNCTIONAL_HASH_ON_STRING } }; #endif @@ -80,7 +90,7 @@ namespace studio class CanvasView; class Duckmatic; - + class DuckDrag_Base : public etl::shared_object { public: @@ -114,15 +124,15 @@ class Duckmatic { friend class DuckDrag_Base; friend class DuckDrag_Translate; - + /* -- ** -- P U B L I C T Y P E S --------------------------------------------- */ - + public: #ifdef HASH_MAP_H -typedef __gnu_cxx::hash_map,synfig::GUIDHash> DuckDataMap; +typedef HASH_MAP_CLASS,synfig::GUIDHash> DuckDataMap; #else typedef std::map > DuckDataMap; #endif @@ -136,13 +146,13 @@ typedef std::map > DuckDataMap; struct Bezier; class Push; - + friend class Push; - + typedef Duck::Type Type; - + typedef std::list GuideList; - + /* -- ** -- P R I V A T E D A T A --------------------------------------------- */ @@ -157,13 +167,13 @@ private: std::list > stroke_list_; - std::list > persistant_stroke_list_; + std::list > persistent_stroke_list_; synfig::GUIDSet selected_ducks; synfig::GUID last_duck_guid; - std::list > bezier_list_; + std::list > bezier_list_; //! I cannot recall what this is for //synfig::Vector snap; @@ -177,12 +187,12 @@ private: sigc::signal signal_grid_changed_; mutable sigc::signal signal_sketch_saved_; - + GuideList guide_list_x_; GuideList guide_list_y_; mutable synfig::String sketch_filename_; - + /* -- ** -- P R O T E C T E D D A T A ----------------------------------------- */ @@ -204,19 +214,19 @@ protected: /*! \see grid_snap, show_grid */ synfig::Vector grid_size; - bool show_persistant_strokes; + bool show_persistent_strokes; bool axis_lock; - + /* -- ** -- P R I V A T E M E T H O D S --------------------------------------- */ private: - + synfig::Vector last_translate_; synfig::Vector drag_offset_; - + //etl::handle selected_duck; @@ -225,7 +235,7 @@ private: */ public: - + Duckmatic(); virtual ~Duckmatic(); @@ -242,13 +252,13 @@ public: void set_guide_snap(bool x=true); bool get_guide_snap()const { return guide_snap; } void toggle_guide_snap() { set_guide_snap(!get_guide_snap()); } - + //! Sets the state of the grid snap flag void set_grid_snap(bool x=true); - + //! Gets the state of the grid snap flag bool get_grid_snap()const { return grid_snap; } - + void enable_grid_snap() { set_grid_snap(true); } void disable_grid_snap() { set_grid_snap(false); } @@ -256,48 +266,48 @@ public: void toggle_grid_snap() { set_grid_snap(!grid_snap); } synfig::Point snap_point_to_grid(const synfig::Point& x, float radius=0.1)const; - - bool get_show_persistant_strokes()const { return show_persistant_strokes; } - void set_show_persistant_strokes(bool x); + + bool get_show_persistent_strokes()const { return show_persistent_strokes; } + void set_show_persistent_strokes(bool x); //! Sets the size of the grid void set_grid_size(const synfig::Vector &s); - + //! Returns the size of the grid const synfig::Vector &get_grid_size()const { return grid_size; } - - + + const synfig::Time &get_time()const { return cur_time; } bool get_axis_lock()const { return axis_lock; } void set_axis_lock(bool x) { axis_lock=x; } - + void set_time(synfig::Time x) { cur_time=x; } bool is_duck_group_selectable(const etl::handle& x)const; - - //const DuckMap& duck_map()const { return duck_map; } + + //const DuckMap& duck_map()const { return duck_map; } DuckList get_duck_list()const; - - const std::list >& bezier_list()const { return bezier_list_; } + + const std::list >& bezier_list()const { return bezier_list_; } const std::list >& stroke_list()const { return stroke_list_; } - const std::list >& persistant_stroke_list()const { return persistant_stroke_list_; } + const std::list >& persistent_stroke_list()const { return persistent_stroke_list_; } - std::list >& persistant_stroke_list() { return persistant_stroke_list_; } + std::list >& persistent_stroke_list() { return persistent_stroke_list_; } //! \todo We should modify this to support multiple selections etl::handle get_selected_duck()const; DuckList get_selected_ducks()const; - + //! Returns \a true if the given duck is currently selected bool duck_is_selected(const etl::handle &duck)const; void refresh_selected_ducks(); - + void clear_selected_ducks(); int count_selected_ducks()const; @@ -305,28 +315,30 @@ public: void toggle_select_duck(const etl::handle &duck); void select_duck(const etl::handle &duck); - + + void toggle_select_ducks_in_box(const synfig::Vector& tl,const synfig::Vector& br); + void select_ducks_in_box(const synfig::Vector& tl,const synfig::Vector& br); void unselect_duck(const etl::handle &duck); void start_duck_drag(const synfig::Vector& offset); - void translate_selected_ducks(const synfig::Vector& vector); + void translate_selected_ducks(const synfig::Vector& vector); bool end_duck_drag(); - void signal_edited_selected_ducks(); + void signal_edited_selected_ducks(); + + void signal_user_click_selected_ducks(int button); - void signal_user_click_selected_ducks(int button); - etl::handle find_similar_duck(etl::handle duck); etl::handle add_similar_duck(etl::handle duck); - + void add_stroke(etl::smart_ptr > stroke_point_list, const synfig::Color& color=synfig::Color(0,0,0)); - void add_persistant_stroke(etl::smart_ptr > stroke_point_list, const synfig::Color& color=synfig::Color(0,0,0)); + void add_persistent_stroke(etl::smart_ptr > stroke_point_list, const synfig::Color& color=synfig::Color(0,0,0)); - void clear_persistant_strokes(); + void clear_persistent_strokes(); void add_duck(const etl::handle &duck); @@ -340,7 +352,7 @@ public: etl::handle last_duck()const; etl::handle last_bezier()const; - + //! \note parameter is in canvas coordinates /*! A radius of "zero" will have an unlimited radius */ etl::handle find_duck(synfig::Point pos, synfig::Real radius=0, Duck::Type type=Duck::TYPE_DEFAULT); @@ -349,7 +361,7 @@ public: GuideList::iterator find_guide_y(synfig::Point pos, float radius=0.1); GuideList::const_iterator find_guide_x(synfig::Point pos, float radius=0.1)const { return const_cast(this)->find_guide_x(pos,radius); } GuideList::const_iterator find_guide_y(synfig::Point pos, float radius=0.1)const { return const_cast(this)->find_guide_y(pos,radius); } - + //! \note parameter is in canvas coordinates /*! A radius of "zero" will have an unlimited radius */ //etl::handle find_bezier(synfig::Point pos, synfig::Real radius=0); @@ -357,9 +369,9 @@ public: //! \note parameter is in canvas coordinates /*! A radius of "zero" will have an unlimited radius */ etl::handle find_bezier(synfig::Point pos, synfig::Real radius=0, float* location=0); - + etl::handle find_bezier(synfig::Point pos, synfig::Real scale, synfig::Real radius, float* location=0); - + bool add_to_ducks(const synfigapp::ValueDesc& value_desc,etl::handle canvas_view, const synfig::TransformStack& transform_stack_, synfig::ParamDesc *param_desc=0, int multiple=0); //! \writeme @@ -369,9 +381,10 @@ public: Type get_type_mask()const { return type_mask; } void select_all_ducks(); + void unselect_all_ducks(); void clear_ducks(); - + bool save_sketch(const synfig::String& filename)const; bool load_sketch(const synfig::String& filename); const synfig::String& get_sketch_filename()const { return sketch_filename_; } @@ -387,14 +400,14 @@ public: class Duckmatic::Push { Duckmatic *duckmatic_; - DuckMap duck_map; + DuckMap duck_map; std::list > bezier_list_; std::list > stroke_list_; DuckDataMap duck_data_share_map; etl::handle duck_dragger_; - + bool needs_restore; - + public: Push(Duckmatic *duckmatic_); ~Push(); @@ -408,7 +421,7 @@ struct Duckmatic::Bezier : public etl::shared_object private: sigc::signal signal_user_click_[5]; public: - + etl::handle p1,p2,c1,c2; bool is_valid()const { return p1 && p2 && c1 && c2; } @@ -422,7 +435,7 @@ struct Duckmatic::Stroke : public etl::shared_object private: sigc::signal signal_user_click_[5]; public: - + etl::smart_ptr > stroke_data; synfig::Color color; @@ -430,7 +443,7 @@ public: bool is_valid()const { return (bool)stroke_data; } sigc::signal &signal_user_click(int i=0) { assert(i>=0); assert(i<5); return signal_user_click_[i]; } -}; // END of struct Duckmatic::Bezier +}; // END of struct Duckmatic::Stroke }; // END of namespace studio