|
UniWidgets
1.0.0
|
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 // -------------------------------------------------------------------------
1.7.6.1