def __init__(self, amount=10.0): super(AutoPanController, self).__init__() self._enabled = False self._amount = amount self._auto_pan_delta = QVector2D(0.0, 0.0) self._been_outside = False
def update(self, rect, pos): if self._enabled: if pos.x() < 0: self._auto_pan_delta = QVector2D(-self._amount, 0.0) self._been_outside = True self._amount = mathlib.clamp(abs(pos.x()) * 0.3, 0.0, 25.0) if pos.x() > rect.width(): self._auto_pan_delta = QVector2D(self._amount, 0.0) self._been_outside = True self._amount = mathlib.clamp( abs(rect.width() - pos.x()) * 0.3, 0.0, 25.0) if pos.y() < 0: self._auto_pan_delta = QVector2D(0.0, -self._amount) self._been_outside = True self._amount = mathlib.clamp(abs(pos.y()) * 0.3, 0.0, 25.0) if pos.y() > rect.height(): self._auto_pan_delta = QVector2D(0.0, self._amount) self._been_outside = True self._amount = mathlib.clamp( abs(rect.height() - pos.y()) * 0.3, 0.0, 25.0) if self._been_outside and rect.contains(pos): self.reset()
def mousePressEvent(self, event): super(BaseGraphicsView, self).mousePressEvent(event) self._pressed_item = self.itemAt(event.pos()) self._mouse_pressed_pos = event.pos() modifiers = event.modifiers() if self._pressed_item and isinstance(self._pressed_item, QGraphicsItem): self._auto_pan_controller.start() if not self._pressed_item: if event.button() == Qt.LeftButton: self._is_rubber_rect_selection = True if event.button() == Qt.RightButton and modifiers == Qt.NoModifier: self._is_panning = True self._init_scrollbars_pos = QVector2D( self.horizontalScrollBar().value(), self.verticalScrollBar().value())
def __init__(self, min_scale=0.5, max_scale=2.0, parent=None, **kwargs): super(BaseGraphicsView, self).__init__(parent=parent) self._min_scale = min_scale self._max_scale = max_scale self._factor = 1.0 self._factor_diff = 0.0 self._scale = 1.0 self._pan_speed = 1.0 self._is_panning = False self._init_scrollbars_pos = QVector2D( self.horizontalScrollBar().value(), self.verticalScrollBar().value()) self._is_rubber_rect_selection = False self._use_opengl = kwargs.get('use_opengl', False) self.log = kwargs.get('log', LOGGER) self._mouse_pressed = False self._pressed_item = None self._released_item = None self._mouse_pressed_pos = QPoint(0, 0) self._mouse_release_pos = QPoint(0, 0) self._mouse_pos = QPoint(0, 0) self._last_mouse_pos = QPoint(0, 0) self._auto_pan_controller = AutoPanController() self._rubber_rect = RubberRect(name='RubberRect') self.initialize_scene_view() self.setInteractive(True) self.setMouseTracking(True) self.setRenderHint(QPainter.Antialiasing, True) self.setRenderHint(QPainter.TextAntialiasing, True) self.setRenderHint(QPainter.HighQualityAntialiasing, True) self.setRenderHint(QPainter.SmoothPixmapTransform, True) self.setRenderHint(QPainter.NonCosmeticDefaultPen, True) self.setAttribute(Qt.WA_AlwaysShowToolTips) self.setRubberBandSelectionMode(Qt.IntersectsItemShape)
def dot(self, vec): return QVector2D.dotProduct(self, vec)
def reset(self): self._been_outside = False self._auto_pan_delta = QVector2D(0.0, 0.0)