+ QPainter davinci(this);
+ davinci.drawImage(m_scopeRect.topLeft(), m_imgBackground);
+ davinci.drawImage(m_scopeRect.topLeft(), m_imgScope);
+ davinci.drawImage(m_scopeRect.topLeft(), m_imgHUD);
+}
+
+void AbstractScopeWidget::mousePressEvent(QMouseEvent *event)
+{
+ if (event->button() == Qt::LeftButton) {
+ // Rescaling mode starts
+ m_rescaleActive = true;
+ m_rescalePropertiesLocked = false;
+ m_rescaleFirstRescaleDone = false;
+ m_rescaleStartPoint = event->pos();
+ m_rescaleModifiers = event->modifiers();
+ }
+}
+void AbstractScopeWidget::mouseReleaseEvent(QMouseEvent *event)
+{
+ m_rescaleActive = false;
+ m_rescalePropertiesLocked = false;
+
+ if (!m_aAutoRefresh->isChecked()) {
+ m_requestForcedUpdate = true;
+ }
+ prodHUDThread();
+ prodScopeThread();
+ prodBackgroundThread();
+ QWidget::mouseReleaseEvent(event);
+}
+void AbstractScopeWidget::mouseMoveEvent(QMouseEvent *event)
+{
+ m_mousePos = event->pos();
+ m_mouseWithinWidget = true;
+ emit signalMousePositionChanged();
+
+ QPoint movement = event->pos()-m_rescaleStartPoint;
+
+ if (m_rescaleActive) {
+ if (m_rescalePropertiesLocked) {
+ // Direction is known, now adjust parameters
+
+ // Reset the starting point to make the next moveEvent relative to the current one
+ m_rescaleStartPoint = event->pos();
+
+
+ if (!m_rescaleFirstRescaleDone) {
+ // We have just learned the desired direction; Normalize the movement to one pixel
+ // to avoid a jump by m_rescaleMinDist
+
+ if (movement.x() != 0) {
+ movement.setX(movement.x() / abs(movement.x()));
+ }
+ if (movement.y() != 0) {
+ movement.setY(movement.y() / abs(movement.y()));
+ }
+
+ m_rescaleFirstRescaleDone = true;
+ }
+
+ handleMouseDrag(movement, m_rescaleDirection, m_rescaleModifiers);
+
+
+
+ } else {
+ // Detect the movement direction here.
+ // This algorithm relies on the aspect ratio of dy/dx (size and signum).
+ if (movement.manhattanLength() > m_rescaleMinDist) {
+ float diff = ((float) movement.y())/movement.x();
+
+ if (abs(diff) > m_rescaleVerticalThreshold || movement.x() == 0) {
+ m_rescaleDirection = North;
+ } else if (abs(diff) < 1/m_rescaleVerticalThreshold) {
+ m_rescaleDirection = East;
+ } else if (diff < 0) {
+ m_rescaleDirection = Northeast;
+ } else {
+ m_rescaleDirection = Southeast;
+ }
+#ifdef DEBUG_ASW
+ qDebug() << "Diff is " << diff << "; chose " << directions[m_rescaleDirection] << " as direction";
+#endif
+ m_rescalePropertiesLocked = true;
+ }
+ }