fix the scrollbar
authorDiane Trout <diane@caltech.edu>
Wed, 15 Mar 2006 22:05:24 +0000 (22:05 +0000)
committerDiane Trout <diane@caltech.edu>
Wed, 15 Mar 2006 22:05:24 +0000 (22:05 +0000)
reconnect all the signals so the scollbar works, and
fix my overly clever use of a floating point equality test when i should've
been using a not equal test.

qui/PathScene.cpp
qui/PathWidget.cpp

index 43195f6cd5bb8cb4435b0e4d046560d10f8b16b1..b9c3637dcb997ddeb1f329927768571b54043af2 100644 (file)
@@ -33,14 +33,19 @@ QSize PathScene::sizeHint() const
 void PathScene::setViewportCenter(float x)
 {
   const float epsilon = 1e-10;
-  float center = fabs(GlTracks::viewportCenter());
+  float center = GlTracks::viewportCenter();
+  float difference = fabsf(x - center);
   float abs_x = fabsf(x);
-  float difference = fabsf(abs_x - center);
+  center = fabsf(center);
 
-  //hopefully this calculates a sufficiently reasonable == for a float
-  if (difference < epsilon * abs_x or difference < epsilon * center)
+  // the difference < epsilon * val is one of the recommended tests
+  // for float equality.
+  // of course since we're looking for not equals, we need to toss a
+  // not at the beginning
+  if (not (difference < epsilon * abs_x or difference < epsilon * center))
   {
     GlTracks::setViewportCenter(x);
+    emit viewportChanged();
     update();
   }
 }
@@ -49,6 +54,7 @@ void PathScene::setZoom(int new_zoom)
 {
   if (new_zoom != GlTracks::zoom()) {
     GlTracks::setZoom(new_zoom);
+    emit viewportChanged();
     update();
   }
 }
index 03955a96b46d7e9b7a2f52c0070547af5ee6fbaf..88f886fc13949cb37eac64c134d3f9c5b53d7811 100644 (file)
@@ -22,7 +22,7 @@ PathWidget::PathWidget(QWidget *parent) :
   layout->addWidget(&viewportBar);
 
   connect(&viewportBar, SIGNAL(valueChanged(int)), 
-          this, SLOT(setViewportX(int)));
+          this, SLOT(setViewportCenter(int)));
   connect(&scene, SIGNAL(viewportChanged()), 
           this, SLOT(updateScrollBar()));
   setLayout(layout);