- const pair<Cursor, Cursor> &c = _view.cursors();
- const float x1 = (c.first.time() - _view.offset()) / _view.scale();
- const float x2 = (c.second.time() - _view.offset()) / _view.scale();
- const int l = (int)max(min(x1, x2), 0.0f);
- const int r = (int)min(max(x1, x2), (float)width());
+ double w = touchPoint1.pos().x() - touchPoint0.pos().x();
+ if (abs(w) >= 1.0) {
+ double scale = (pinch_offset1_ - pinch_offset0_) / w;
+ if (scale < 0)
+ scale = -scale;
+ double offset = pinch_offset0_ - touchPoint0.pos().x() * scale;
+ if (scale > 0)
+ view_.set_scale_offset(scale, offset);
+ }
+
+ if (event->touchPointStates() & Qt::TouchPointReleased) {
+ pinch_zoom_active_ = false;
+
+ if (touchPoint0.state() & Qt::TouchPointReleased) {
+ // Primary touch released
+ mouse_down_valid_ = false;
+ } else {
+ // Update the mouse down fields so that continued
+ // dragging with the primary touch will work correctly
+ mouse_down_point_ = touchPoint0.pos().toPoint();
+ mouse_down_offset_ = view_.offset();
+ mouse_down_valid_ = true;
+ }
+ }