summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--grapher/Graph.cxx2
-rw-r--r--grapher/Graph.hxx2
-rw-r--r--grapher/GraphWidget.cxx16
3 files changed, 14 insertions, 6 deletions
diff --git a/grapher/Graph.cxx b/grapher/Graph.cxx
index 4d697ae6..079cd63e 100644
--- a/grapher/Graph.cxx
+++ b/grapher/Graph.cxx
@@ -44,7 +44,7 @@ void Graph::draw(Cairo::RefPtr<Cairo::Context> cr)
// Find latest time.
_right = _currentTime / 1000;
// Assume 1 pixel = 5 milliseconds
- _left = _right - 5000;
+ _left = _right - static_cast<int64_t>(5000 / _zoomFactor);
}
cr->save();
double horizScale = getHorizontalScale();
diff --git a/grapher/Graph.hxx b/grapher/Graph.hxx
index 0853d988..7037efa9 100644
--- a/grapher/Graph.hxx
+++ b/grapher/Graph.hxx
@@ -57,7 +57,7 @@ public:
*/
double getHorizontalScale()
{
- return _zoomFactor * _graphWidth / static_cast<double>(_right - _left);
+ return _graphWidth / static_cast<double>(_right - _left);
}
protected:
GraphDataList _datasets;
diff --git a/grapher/GraphWidget.cxx b/grapher/GraphWidget.cxx
index be1ebdcd..ce2f934f 100644
--- a/grapher/GraphWidget.cxx
+++ b/grapher/GraphWidget.cxx
@@ -241,8 +241,10 @@ bool GraphWidget::on_motion_notify_event(GdkEventMotion* event)
const int width = allocation.get_width();
double motion = (_mouseX - _dragOriginX) / (double) width;
double increment = motion * (_dragOrigLeft - _dragOrigRight);
- _activeGraph->_left = _dragOrigLeft + increment;
- _activeGraph->_right = _dragOrigRight + increment;
+ _activeGraph->_left
+ = _dragOrigLeft + increment / _activeGraph->_zoomFactor;
+ _activeGraph->_right
+ = _dragOrigRight + increment / _activeGraph->_zoomFactor;
queue_draw();
}
if (_hoverText && _hoverText->isVisible())
@@ -263,10 +265,16 @@ bool GraphWidget::on_scroll_event(GdkEventScroll* event)
{
if ((*gitr)->containsPoint(event->x, event->y))
{
+ double oldZoom = (*gitr)->_zoomFactor;
if (event->direction == GDK_SCROLL_UP)
- (*gitr)->_zoomFactor += .1;
+ (*gitr)->_zoomFactor *= 1.1;
else if (event->direction == GDK_SCROLL_DOWN)
- (*gitr)->_zoomFactor -= .1;
+ (*gitr)->_zoomFactor /= 1.1;
+ int64_t left, right;
+ double top, bottom;
+ (*gitr)->getExtents(left, right, top, bottom);
+ right = left - (left - right) * (oldZoom / (*gitr)->_zoomFactor);
+ (*gitr)->setExtents(left, right, top, bottom);
queue_draw();
break;
}