diff options
| author | Bent Bisballe Nyeng <deva@aasimon.org> | 2018-12-29 21:30:28 +0100 | 
|---|---|---|
| committer | Bent Bisballe Nyeng <deva@aasimon.org> | 2018-12-30 11:42:13 +0100 | 
| commit | 6f2c3b90ce29a20e14cc769841056d4b36c42d50 (patch) | |
| tree | 41c555a7363bdb248d3306698d83692a0c89262b | |
| parent | 58183c47c2b3235f8f56dc6492bb41b775dd6f26 (diff) | |
Implement drag'n'move.
| -rw-r--r-- | src/outputwindow.cc | 32 | ||||
| -rw-r--r-- | src/outputwindow.h | 8 | 
2 files changed, 39 insertions, 1 deletions
| diff --git a/src/outputwindow.cc b/src/outputwindow.cc index 8c4cb7b..95c3c7b 100644 --- a/src/outputwindow.cc +++ b/src/outputwindow.cc @@ -164,6 +164,34 @@ void OutputWindow::reset()  	}  } +void OutputWindow::mouseMoveEvent(QMouseEvent* event) +{ +	if(dragging) +	{ +		dragOffset = event->pos() - dragOffsetOrigo; +	} +} + +void OutputWindow::mousePressEvent(QMouseEvent* event) +{ +	if(event->buttons() & Qt::MiddleButton) +	{ +		dragging = true; +		dragOffsetOrigo = event->pos(); +		dragOffset = {}; +	} +} + +void OutputWindow::mouseReleaseEvent(QMouseEvent* event) +{ +	if(event->buttons() & Qt::MiddleButton) +	{ +		dragging = false; +		offset = dragOffsetOrigo - event->pos(); +		dragOffset = dragOffsetOrigo = {}; +	} +} +  void OutputWindow::wheelEvent(QWheelEvent* event)  {  	double delta = event->delta() / 120.0 * scale; @@ -178,7 +206,9 @@ void OutputWindow::paintEvent(QPaintEvent *)  {  	//sem.acquire();  	QPainter painter(this); -	paint(painter, {width() / 2.0, height() / 2.0}, true, scale); +	paint(painter, +	      { width() / 2.0 + offset.x() + dragOffset.x(), +	        height() / 2.0 + offset.y() + dragOffset.y() }, true, scale);  	sem.release();  } diff --git a/src/outputwindow.h b/src/outputwindow.h index bb7ef7b..182499a 100644 --- a/src/outputwindow.h +++ b/src/outputwindow.h @@ -65,6 +65,9 @@ public slots:  	void reset();  protected: +	void mouseMoveEvent(QMouseEvent* event); +	void mousePressEvent(QMouseEvent* event); +	void mouseReleaseEvent(QMouseEvent* event);  	void wheelEvent(QWheelEvent* event);  	void paintEvent(QPaintEvent* event); @@ -92,4 +95,9 @@ private:  	QString penfile;  	volatile float scale{2.0f}; + +	bool dragging{false}; +	QPoint dragOffsetOrigo{0, 0}; +	QPoint dragOffset{0, 0}; +	QPoint offset{0, 0};  }; | 
