Geometrize  1.0
An application for geometrizing images into geometric primitives
Classes | Public Member Functions | Protected Member Functions | Private Member Functions | Private Attributes | List of all members
geometrize::scene::ImageTaskGraphicsView Class Reference

The ImageTaskGraphicsView class models a graphics view for viewing the images and shapes used and/or produced by image tasks. More...

#include <imagetaskgraphicsview.h>

Inheritance diagram for geometrize::scene::ImageTaskGraphicsView:
Inheritance graph
[legend]
Collaboration diagram for geometrize::scene::ImageTaskGraphicsView:
Collaboration graph
[legend]

Classes

class  ImageTaskGraphicsViewImpl
 

Public Member Functions

 ImageTaskGraphicsView (QWidget *parent=nullptr)
 
virtual ~ImageTaskGraphicsView ()
 

Protected Member Functions

void changeEvent (QEvent *) override
 

Private Member Functions

void populateUi ()
 
bool viewportEvent (QEvent *event) override
 
void wheelEvent (QWheelEvent *event) override
 
void mousePressEvent (QMouseEvent *event) override
 
void mouseReleaseEvent (QMouseEvent *event) override
 
void mouseMoveEvent (QMouseEvent *event) override
 
void keyPressEvent (QKeyEvent *event) override
 
void keyReleaseEvent (QKeyEvent *event) override
 

Private Attributes

std::unique_ptr< ImageTaskGraphicsViewImpld
 

Detailed Description

The ImageTaskGraphicsView class models a graphics view for viewing the images and shapes used and/or produced by image tasks.

Constructor & Destructor Documentation

◆ ImageTaskGraphicsView()

geometrize::scene::ImageTaskGraphicsView::ImageTaskGraphicsView ( QWidget *  parent = nullptr)
explicit
113  : QGraphicsView(parent), d{std::make_unique<ImageTaskGraphicsViewImpl>(this)}
114 {
115  viewport()->setAttribute(Qt::WA_AcceptTouchEvents);
116  setInteractive(true);
117  setMouseTracking(true);
118  setTransformationAnchor(QGraphicsView::AnchorUnderMouse);
119  setDragMode(QGraphicsView::ScrollHandDrag);
120  setViewportUpdateMode(QGraphicsView::FullViewportUpdate);
121  setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
122  setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
123 
124  populateUi();
125 }

◆ ~ImageTaskGraphicsView()

geometrize::scene::ImageTaskGraphicsView::~ImageTaskGraphicsView ( )
virtual
128 {
129 }

Member Function Documentation

◆ changeEvent()

void geometrize::scene::ImageTaskGraphicsView::changeEvent ( QEvent *  event)
overrideprotected
254 {
255  if (event->type() == QEvent::LanguageChange) {
256  populateUi();
257  }
258  QGraphicsView::changeEvent(event);
259 }
Here is the call graph for this function:

◆ keyPressEvent()

void geometrize::scene::ImageTaskGraphicsView::keyPressEvent ( QKeyEvent *  event)
overrideprivate
244 {
245  QGraphicsView::keyPressEvent(event);
246 }

◆ keyReleaseEvent()

void geometrize::scene::ImageTaskGraphicsView::keyReleaseEvent ( QKeyEvent *  event)
overrideprivate
249 {
250  QGraphicsView::keyReleaseEvent(event);
251 }

◆ mouseMoveEvent()

void geometrize::scene::ImageTaskGraphicsView::mouseMoveEvent ( QMouseEvent *  event)
overrideprivate
239 {
240  QGraphicsView::mouseMoveEvent(event);
241 }

◆ mousePressEvent()

void geometrize::scene::ImageTaskGraphicsView::mousePressEvent ( QMouseEvent *  event)
overrideprivate
229 {
230  QGraphicsView::mousePressEvent(event);
231 }

◆ mouseReleaseEvent()

void geometrize::scene::ImageTaskGraphicsView::mouseReleaseEvent ( QMouseEvent *  event)
overrideprivate
234 {
235  QGraphicsView::mouseReleaseEvent(event);
236 }

◆ populateUi()

void geometrize::scene::ImageTaskGraphicsView::populateUi ( )
private
262 {
263 
264 }
Here is the caller graph for this function:

◆ viewportEvent()

bool geometrize::scene::ImageTaskGraphicsView::viewportEvent ( QEvent *  event)
overrideprivate
132 {
133  switch(event->type()) {
134  case QEvent::TabletMove:
135  case QEvent::TabletPress:
136  case QEvent::TabletRelease:
137  case QEvent::TabletEnterProximity:
138  case QEvent::TabletLeaveProximity:
139  {
140  // Forward an event containing relevant tablet event data to the graphics scene
141  const auto customEventData = makeCustomTabletEventData(static_cast<QTabletEvent&>(*event), *this);
142  geometrize::scene::CustomTabletEvent customEvent(customEventData, this);
143  QCoreApplication::sendEvent(dynamic_cast<geometrize::scene::ImageTaskScene*>(scene()), &customEvent);
144  event->accept();
145  return true;
146  }
147  // TODO implement pinch-to-zoom
148  /*
149  case QEvent::TouchBegin:
150  case QEvent::TouchUpdate:
151  case QEvent::TouchEnd:
152  {
153  QTouchEvent *touchEvent = static_cast<QTouchEvent *>(event);
154  QList<QTouchEvent::TouchPoint> touchPoints = touchEvent->touchPoints();
155  if (touchPoints.count() == 2) {
156  // determine scale factor
157  const QTouchEvent::TouchPoint &touchPoint0 = touchPoints.first();
158  const QTouchEvent::TouchPoint &touchPoint1 = touchPoints.last();
159  qreal currentScaleFactor =
160  QLineF(touchPoint0.pos(), touchPoint1.pos()).length()
161  / QLineF(touchPoint0.startPos(), touchPoint1.startPos()).length();
162  if (touchEvent->touchPointStates() & Qt::TouchPointReleased) {
163  // if one of the fingers is released, remember the current scale
164  // factor so that adding another finger later will continue zooming
165  // by adding new scale factor to the existing remembered value.
166  d->m_totalScaleFactor *= currentScaleFactor;
167  currentScaleFactor = 1;
168  }
169  setTransform(QTransform().scale(d->m_totalScaleFactor * currentScaleFactor,
170  d->m_totalScaleFactor * currentScaleFactor));
171  }
172  event->accept();
173  return true;
174  }
175  */
176  default:
177  break;
178  }
179  return QGraphicsView::viewportEvent(event);
180 }

◆ wheelEvent()

void geometrize::scene::ImageTaskGraphicsView::wheelEvent ( QWheelEvent *  event)
overrideprivate
183 {
184  if(e->modifiers() & Qt::ControlModifier) {
185  // Pass down to scene/children in scene if control is pressed
186  QGraphicsView::wheelEvent(e);
187  return;
188  }
189 
190  // Handle zooming
191  if (e->angleDelta().x() == 0) {
192  #if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0))
193  const QPointF pos{e->position()};
194  const QPointF posf{mapToScene(pos.toPoint())};
195  const QPointF newPos{mapToScene(pos.toPoint())};
196  #else
197  const QPoint pos{e->pos()};
198  const QPointF posf{mapToScene(pos)};
199  const QPointF newPos{mapToScene(pos)};
200  #endif
201 
202  const double angle{static_cast<double>(e->angleDelta().y())};
203  double by{0.0};
204  if(angle > 0) {
205  by = 1 + (angle / 360 * 0.1);
206  } else if (angle < 0) {
207  by = 1 - (-angle / 360 * 0.1);
208  } else {
209  by = 1;
210  }
211 
212  scale(by, by);
213 
214  const int w{viewport()->width()};
215  const int h{viewport()->height()};
216  const double wf{mapToScene(QPoint(w - 1, 0)).x() - mapToScene(QPoint(0,0)).x()};
217  const double hf{mapToScene(QPoint(0, h - 1)).y() - mapToScene(QPoint(0,0)).y()};
218  const double lf{posf.x() - pos.x() * wf / w};
219  const double tf{posf.y() - pos.y() * hf / h};
220 
221  ensureVisible(lf, tf, wf, hf, 0, 0);
222  ensureVisible(QRectF(QPointF(lf, tf) - newPos + posf, QSizeF(wf, hf)), 0, 0);
223 
224  e->accept();
225  }
226 }

Member Data Documentation

◆ d

std::unique_ptr<ImageTaskGraphicsViewImpl> geometrize::scene::ImageTaskGraphicsView::d
private

The documentation for this class was generated from the following files:
geometrize::scene::ImageTaskGraphicsView::populateUi
void populateUi()
Definition: imagetaskgraphicsview.cpp:261
geometrize::scene::ImageTaskGraphicsView::d
std::unique_ptr< ImageTaskGraphicsViewImpl > d
Definition: imagetaskgraphicsview.h:43
geometrize::scene::CustomTabletEvent
The CustomTabletEvent class represents a tablet event (specifically from a Wacom Pro pen) that can be...
Definition: customtabletevent.h:88
geometrize::scene::ImageTaskScene
The ImageTaskScene class models a graphics scene for viewing the results of image tasks.
Definition: imagetaskscene.h:25