drawable.h

00001 /***************************************************************************
00002  *   Copyright (C) 2004 by Rick L. Vinyard, Jr.                            *
00003  *   rvinyard@cs.nmsu.edu                                                  *
00004  *                                                                         *
00005  *   This program is free software; you can redistribute it and/or modify  *
00006  *   it under the terms of the GNU Lesser General Public License as        *
00007  *   published by the Free Software Foundation version 2.1.                *
00008  *                                                                         *
00009  *   This program is distributed in the hope that it will be useful,       *
00010  *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
00011  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
00012  *   GNU General Public License for more details.                          *
00013  *                                                                         *
00014  *   You should have received a copy of the GNU Lesser General Public      *
00015  *   License along with this library; if not, write to the                 *
00016  *   Free Software Foundation, Inc.,                                       *
00017  *   51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA              *
00018  ***************************************************************************/
00019 #ifndef PAPYRUSDRAWABLE_H
00020 #define PAPYRUSDRAWABLE_H
00021 
00022 #include <papyrus/smart_pointer.h>
00023 #include <papyrus/utility.h>
00024 
00025 #include <papyrus/renderable.h>
00026 #include <papyrus/region.h>
00027 #include <papyrus/viewbox.h>
00028 
00029 namespace Papyrus
00030   {
00031 
00032   class Group;
00033 
00066   class Drawable : public Renderable
00067     {
00068     public:
00069       typedef PapyrusSmartPointer<Drawable> pointer;
00070 
00079       Drawable( double tx = 0.0, double ty = 0.0, double sx = 1.0, double sy = 1.0, double r = 0.0 );
00080 
00081       virtual ~Drawable();
00082 
00084       double get_translate_x();
00085 
00087       double get_translate_y();
00088 
00090       void get_translate( double& tx, double& ty );
00091 
00097       void set_translate_x( double tx );
00098 
00104       void set_translate_y( double ty );
00105 
00111       void set_translate( double tx, double ty );
00112 
00118       void translate_x( double tx );
00119 
00125       void translate_y( double ty );
00126 
00132       void translate( double tx, double ty );
00133 
00135       double get_scale_x();
00136 
00138       double get_scale_y();
00139 
00141       void get_scale( double& sx, double& sy );
00142 
00148       void set_scale_x( double sx );
00149 
00155       void set_scale_y( double sy );
00156 
00163       void set_scale( double scale_x, double scale_y );
00164 
00170       void set_scale( double s );
00171 
00177       void scale_x( double s );
00178 
00184       void scale_y( double s );
00185 
00191       void scale( double s );
00192 
00199       void scale( double scale_x, double scale_y );
00200 
00202       double get_rotate();
00203 
00205       void set_rotate( double r );
00206 
00212       void rotate( double r );
00213 
00219       double get_skew_x();
00220 
00226       void set_skew_x(double skewx);
00227 
00233       void skew_x(double skewx);
00234 
00240       double get_skew_y();
00241 
00247       void set_skew_y(double skewy);
00248 
00254       void skew_y(double skewy);
00255 
00257       void get_skew(double& skewx, double& skewy);
00258 
00260       void set_skew(double skewx, double skewy);
00261 
00263       void skew(double s);
00264 
00266       void skew(double skewx, double skewy);
00267 
00269       double get_centroid_x();
00270 
00272       void set_centroid_x(double centroid_x);
00273 
00275       double get_centroid_y();
00276 
00278       void set_centroid_y(double centroid_y);
00279 
00281       void get_centroid(double& centroid_x, double& centroid_y);
00282 
00284       void set_centroid(double centroid_x, double centroid_y);
00285 
00290       void reset_position();
00291 
00293       const Cairo::Matrix& matrix();
00294 
00296       Cairo::Matrix global_matrix();
00297 
00299       void global_to_local( double& x, double& y );
00300 
00302       void local_to_global( double& x, double& y );
00303 
00305       void distance_global_to_local( double& x, double& y );
00306 
00308       void distance_local_to_global( double& x, double& y );
00309 
00323       virtual void render( Cairo::RefPtr<Cairo::Context> cairo );
00324 
00331       virtual void draw( Cairo::RefPtr<Cairo::Context> cairo ) = 0;
00332 
00340       virtual Region& extents();
00341 
00342       virtual Region local_extents();
00343       
00353       virtual Region global_extents();
00354 
00366       virtual Region extents_transformed( Cairo::Matrix& globalmatrix );
00367 
00371       virtual bool inside( double x, double y );
00372 
00380       void set_selectable( bool selectable = true );
00381 
00386       bool is_selectable();
00387 
00389       virtual bool is_group();
00390 
00397       ViewBox::pointer viewbox();
00398 
00405       void set_viewbox(ViewBox::pointer viewbox = ViewBox::pointer() );
00406 
00408       sigc::signal<void, double, double, double, double> signal_redraw();
00409 
00411       sigc::signal<void> signal_xy();
00412 
00414       sigc::signal<void> signal_scale();
00415 
00417       sigc::signal<void> signal_rotation();
00418 
00420       sigc::signal<void> signal_skew();
00421 
00423       sigc::signal<void> signal_selectable();
00424 
00426       sigc::signal<void> signal_centroid();
00427 
00435       void need_redraw_proxy();
00436 
00437       virtual Drawable::pointer clone() const = 0;
00438 
00439       virtual Group* parent();
00440 
00441       PAPYRUS_CLASS_NAME("Drawable");
00442 
00443       protected:
00444       Group* m_parent;
00445 
00446       Group* m_drawing_parent;
00447 
00449       double m_tx;
00450 
00452       double m_ty;
00453 
00455       double m_sx;
00456 
00458       double m_sy;
00459 
00461       double m_r;
00462 
00464       double m_skewx;
00465 
00467       double m_skewy;
00468 
00470       bool m_selectable;
00471 
00473       double m_centroid_x;
00474 
00476       double m_centroid_y;
00477 
00481       ViewBox::pointer m_viewbox;
00482 
00483       sigc::connection m_viewbox_connection;
00484 
00489       bool m_regenerate_matrix;
00490 
00492       Cairo::Matrix m_matrix;
00493 
00499       void recalculate_matrix();
00500 
00504       sigc::signal<void, double, double, double, double> m_signal_redraw;
00505 
00507       sigc::signal<void> m_signal_xy;
00508 
00510       sigc::signal<void> m_signal_scale;
00511 
00513       sigc::signal<void> m_signal_rotation;
00514 
00516       sigc::signal<void> m_signal_skew;
00517 
00519       sigc::signal<void> m_signal_selectable;
00520 
00522       sigc::signal<void> m_signal_centroid;
00523 
00524       friend class Group;
00525 
00533       virtual void need_redraw( );
00534 
00541       virtual void set_extents( const Region& extents );
00542 
00543     private:
00548       Region m_extents, m_extentsold;
00549 
00550     };
00551 
00552 }
00553 
00554 #endif

Generated on Sun Jan 7 22:53:57 2007 by  doxygen 1.5.1