Browse Source

Panzoomer: Don't damage unless values actually change.

tags/v1.3.1000
Jonathan Moore Liles 12 years ago
parent
commit
2c1f7682a4
2 changed files with 73 additions and 49 deletions
  1. +2
    -30
      FL/Fl_Panzoomer.H
  2. +71
    -19
      src/Fl_Panzoomer.cxx

+ 2
- 30
FL/Fl_Panzoomer.H View File

@@ -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; }


+ 71
- 19
src/Fl_Panzoomer.cxx View File

@@ -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;


Loading…
Cancel
Save