KineticScroll.h
00001 #ifndef KineticScroll_H_
00002 #define KineticScroll_H_
00003
00005
00006 #include <gtkmm.h>
00007
00029 class KineticScroll
00030 {
00031 public:
00032
00033 KineticScroll();
00034 ~KineticScroll();
00035
00036
00038 void set_target( int pos, double sliding=1.1, double start_kinetic=1.2 );
00039
00040 void set_orientation( Gtk::Orientation o );
00041
00042 void set_adjustment( Gtk::Adjustment* adj );
00043 void set_motion_event( Gtk::Widget* w );
00044
00045 inline Gtk::Adjustment* get_adjustment(){ return vadj; }
00046
00048 inline void set_min_kinetic( double s ){ min_kinetic = s; }
00049
00051 inline void set_max_kinetic( double s ){ max_kinetic = s; }
00052
00054 inline void set_k_sliding( double s ){ k_sliding = s; }
00055
00057 void set_k_timer( int msec );
00058
00059 enum KineticEventID
00060 {
00061 keBeginScroll,
00062 keEndScroll,
00063 keScroll
00064 };
00065 friend std::ostream& operator<<( std::ostream& os, KineticEventID i );
00066
00067 typedef sigc::signal<void,KineticEventID,int> KineticEvent_Signal;
00068
00069 KineticEvent_Signal signal_kinetic_event();
00070
00071 inline void set_kinetic_scroll( bool set ){ kinetic_on = set; }
00072 inline void set_scroll( bool set ){ scroll_on = set; }
00073
00074 protected:
00075
00076 bool on_motion_event(GdkEvent *event);
00077 bool kinetic_timer();
00078 bool target_kinetic_timer();
00079 void set_current_position( int pos );
00080
00081 Gtk::Orientation orient;
00082 Gtk::Adjustment* vadj;
00083 Gtk::Widget* widget;
00084 double prev_x;
00085 double prev_y;
00086 double prev_v;
00087 gint32 prev_t;
00088 double prev_dz;
00089 bool but_pressed;
00090 double kinetic;
00091 double min_kinetic;
00092 double max_kinetic;
00093 double k_sliding;
00094 sigc::connection k_timer;
00095 int k_timer_step;
00096 double k_const;
00098 double max_a;
00099 double min_dz;
00100 bool kinetic_on;
00101 bool scroll_on;
00102
00103 KineticEvent_Signal k_event;
00104
00105 sigc::connection k_target_timer;
00106 double k_target_sliding;
00107 double target_pos;
00108 int target_sign;
00109
00110 private:
00111
00112 };
00113
00114 #endif // KineticScroll_H_
00115