diff --git a/FL/Fl_Panzoomer.H b/FL/Fl_Panzoomer.H index c068781..650bbad 100644 --- a/FL/Fl_Panzoomer.H +++ b/FL/Fl_Panzoomer.H @@ -55,39 +55,11 @@ public: Fl_Panzoomer ( int X, int Y, int W, int H, const char *L=0 ); virtual ~Fl_Panzoomer ( ) { } - /* these behave like Fl_Scrollbar::value() */ /* first and total are the bounds, size is the size of the window, * and pos is the leftmost edge. */ - int x_value ( int pos, int size, int first, int total ) - { - if ( pos + size > first + total ) - total = pos+size-first; - - _xmin = first; - _xmax = total; - _xpos = pos; - _xsize = size; - - damage( FL_DAMAGE_USER1 ); - - return pos; - } - - int y_value ( int pos, int size, int first, int total ) - { - if ( pos + size > first + total ) - total = pos+size-first; - - _ymin = first; - _ymax = total; - _ypos = pos; - _ysize = size; - - damage( FL_DAMAGE_USER1 ); - - return pos; - } + int x_value ( int pos, int size, int first, int total ); + int y_value ( int pos, int size, int first, int total ); double x_value ( void ) const { return _xpos; } double y_value ( void ) const { return _ypos; } diff --git a/src/Fl_Panzoomer.cxx b/src/Fl_Panzoomer.cxx index 808826e..9ee18a9 100644 --- a/src/Fl_Panzoomer.cxx +++ b/src/Fl_Panzoomer.cxx @@ -35,34 +35,80 @@ Fl_Panzoomer::Fl_Panzoomer ( int X, int Y, int W, int H, const char *L ) : step( 1 ); } +int +Fl_Panzoomer::x_value ( int pos, int size, int first, int total ) +{ + if ( pos + size > first + total ) + total = pos+size-first; + + if ( (int)_xmin == first && + (int)_xmax == total && + (int)_xpos == pos && + (int)_xsize == size ) + return pos; + + damage( FL_DAMAGE_USER1 ); + + _xmin = first; + _xmax = total; + _xpos = pos; + _xsize = size; + + return pos; +} + +int +Fl_Panzoomer::y_value ( int pos, int size, int first, int total ) +{ + if ( pos + size > first + total ) + total = pos+size-first; + + if ( (int)_ymin == first && + (int)_ymax == total && + (int)_ypos == pos && + (int)_ysize == size ) + return pos; + + damage( FL_DAMAGE_USER1 ); + + _ymin = first; + _ymax = total; + _ypos = pos; + _ysize = size; + + return pos; +} + void -Fl_Panzoomer::x_value ( double v ) { +Fl_Panzoomer::x_value ( double v ) +{ if ( _xpos == v ) return; _xpos = v; - if ( _xpos < _xmin ) - _xpos = _xmin; - else if ( _xpos > _xmax - _xsize) - _xpos = _xmax - _xsize; - - damage( FL_DAMAGE_USER1 ); - } + if ( _xpos < _xmin ) + _xpos = _xmin; + else if ( _xpos > _xmax - _xsize) + _xpos = _xmax - _xsize; + + damage( FL_DAMAGE_USER1 ); +} void -Fl_Panzoomer::y_value ( double v ) { - if ( _ypos == v ) - return; +Fl_Panzoomer::y_value ( double v ) +{ + if ( _ypos == v ) + return; - _ypos = v; + _ypos = v; - if ( _ypos < _ymin ) - _ypos = _ymin; - else if ( _ypos > _ymax - _ysize ) - _ypos = _ymax - _ysize; + if ( _ypos < _ymin ) + _ypos = _ymin; + else if ( _ypos > _ymax - _ysize ) + _ypos = _ymax - _ysize; - damage( FL_DAMAGE_USER1 ); - } + damage( FL_DAMAGE_USER1 ); +} void Fl_Panzoomer::zoom ( int v ) @@ -226,7 +272,9 @@ Fl_Panzoomer::handle ( int m, int X, int Y, int W, int H ) if ( when() & FL_WHEN_CHANGED ) do_callback(); } - + + damage( FL_DAMAGE_USER1 ); + return 1; break; } @@ -238,6 +286,8 @@ Fl_Panzoomer::handle ( int m, int X, int Y, int W, int H ) { zoom( _zoom + d ); + damage( FL_DAMAGE_USER1 ); + return 1; } else if (!Fl::event_alt() && !Fl::event_shift()) @@ -247,6 +297,8 @@ Fl_Panzoomer::handle ( int m, int X, int Y, int W, int H ) if ( when() & FL_WHEN_CHANGED ) do_callback(); + damage( FL_DAMAGE_USER1 ); + return 1; } return 0;