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();
}
}
{
if (new_zoom != GlTracks::zoom()) {
GlTracks::setZoom(new_zoom);
+ emit viewportChanged();
update();
}
}
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);