00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef PAPYRUSLINESTYLE_H
00020 #define PAPYRUSLINESTYLE_H
00021
00022 #include <cmath>
00023 #include <papyrus/renderable.h>
00024 #include <papyrus/drawable.h>
00025
00026 namespace Papyrus
00027 {
00028
00032 class LineStyle : public Renderable
00033 {
00034 public:
00035 LineStyle( Cairo::RefPtr<Cairo::Pattern> pattern = Cairo::RefPtr<Cairo::Pattern>(),
00036 double width = 1.0
00037 );
00038
00039 LineStyle( double width,
00040 Cairo::LineCap cap = Cairo::LINE_CAP_BUTT,
00041 Cairo::LineJoin join = Cairo::LINE_JOIN_MITER
00042 );
00043
00044 LineStyle( Cairo::RefPtr<Cairo::Pattern> pattern,
00045 double width,
00046 Cairo::LineCap cap,
00047 Cairo::LineJoin join
00048 );
00049
00050 ~LineStyle();
00051
00052 LineStyle& operator=( const LineStyle& other );
00053
00054 bool operator==( const LineStyle& other ) const;
00055
00056 bool operator!=( const LineStyle& other ) const;
00057
00058 const std::valarray< double >& dash_array();
00059
00060 double dash_offset();
00061
00062 void set_dash ( const std::valarray< double > dashes = std::valarray<double>(), double offset = 0.0 );
00063
00064 Cairo::LineCap cap();
00065
00066 void set_cap ( Cairo::LineCap cap = Cairo::LINE_CAP_BUTT );
00067
00068 Cairo::LineJoin join();
00069
00070 void set_join ( Cairo::LineJoin join = Cairo::LINE_JOIN_MITER );
00071
00072 double width();
00073
00074 void set_width ( double width = 1.0 );
00075
00076 double miter_limit();
00077
00078 void set_miter_limit ( double limit = INFINITY );
00079
00080 Cairo::RefPtr<Cairo::Pattern> pattern();
00081
00082 void set_pattern( Cairo::RefPtr<Cairo::Pattern> pattern = Cairo::RefPtr<Cairo::Pattern>() );
00083
00084 virtual void render( Cairo::RefPtr<Cairo::Context> cairo );
00085
00086 sigc::signal<void> signal_pattern();
00087 sigc::signal<void> signal_width();
00088 sigc::signal<void> signal_cap();
00089 sigc::signal<void> signal_join();
00090 sigc::signal<void> signal_miter_limit();
00091 sigc::signal<void> signal_dash();
00092
00093 protected:
00094 Cairo::RefPtr<Cairo::Pattern> m_pattern;
00095 double m_width;
00096 Cairo::LineCap m_cap;
00097 Cairo::LineJoin m_join;
00098 double m_miter_limit;
00099 std::valarray<double> m_dash_array;
00100 double m_dash_offset;
00101
00102 sigc::signal<void> m_signal_pattern;
00103 sigc::signal<void> m_signal_width;
00104 sigc::signal<void> m_signal_cap;
00105 sigc::signal<void> m_signal_join;
00106 sigc::signal<void> m_signal_miter_limit;
00107 sigc::signal<void> m_signal_dash;
00108
00109 };
00110
00111 }
00112
00113 #endif