diff options
Diffstat (limited to 'Lib/defconQt/glyphView.py')
| -rw-r--r-- | Lib/defconQt/glyphView.py | 97 | 
1 files changed, 21 insertions, 76 deletions
| diff --git a/Lib/defconQt/glyphView.py b/Lib/defconQt/glyphView.py index 6eb9eee..850a216 100644 --- a/Lib/defconQt/glyphView.py +++ b/Lib/defconQt/glyphView.py @@ -6,6 +6,7 @@ import pickle  from defcon import Anchor, Component  from defconQt import icons_db  # noqa  from defconQt.objects.defcon import TContour, TGlyph +from defconQt.objects.sizeGripItem import ResizeHandleItem, SizeGripItem  from defconQt.pens.copySelectionPen import CopySelectionPen  from defconQt.util import platformSpecific  from fontTools.misc import bezierTools @@ -16,7 +17,7 @@ from PyQt5.QtGui import (  from PyQt5.QtWidgets import (      QAction, QActionGroup, QApplication, QColorDialog, QComboBox, QDialog,      QDialogButtonBox, QGraphicsEllipseItem, QGraphicsItem, QGraphicsLineItem, -    QGraphicsPathItem, QGraphicsPixmapItem, QGraphicsRectItem, QGraphicsScene, +    QGraphicsPathItem, QGraphicsPixmapItem, QGraphicsScene,      QGraphicsSimpleTextItem, QGraphicsView, QGridLayout, QLabel, QLineEdit,      QListWidget, QMainWindow, QMenu, QRadioButton, QSizePolicy, QStyle,      QStyleOptionGraphicsItem, QToolBar, QWidget) @@ -1186,86 +1187,32 @@ class VGuidelinesTextItem(QGraphicsSimpleTextItem):          self.setFont(font) -class ResizeHandleItem(QGraphicsRectItem): - -    def __init__(self, parent=None): -        super(QGraphicsRectItem, self).__init__(parent) -        self.setPointPath() -        self.setBrush(QBrush(QColor(60, 60, 60))) -        self.setPen(QPen(Qt.NoPen)) -        self.setFlag(QGraphicsItem.ItemIgnoresParentOpacity) -        self.setFlag(QGraphicsItem.ItemIsMovable) -        # self.setFlag(QGraphicsItem.ItemIsSelectable) -        self.setCursor(Qt.SizeFDiagCursor) - -        rect = self.parentItem().boundingRect() -        self.setPos(rect.width(), rect.height()) - -    def itemChange(self, change, value): -        if change == QGraphicsItem.ItemSelectedChange: -            if not value: -                self.setVisible(value) -        return value - -    def mouseMoveEvent(self, event): -        self.parentItem()._pixmapGeometryChanged(event) - -    def setPointPath(self, scale=None): -        if scale is None: -            scene = self.scene() -            if scene is not None: -                scale = scene.getViewScale() -            else: -                scale = 1 -        if scale > 4: -            scale = 4 -        self.prepareGeometryChange() -        self.setRect(-onHalf / scale, -onHalf / scale, -                     onWidth / scale, onHeight / scale) - -  class PixmapItem(QGraphicsPixmapItem): -    def __init__(self, x, y, pixmap, parent=None): +    def __init__(self, x, y, pixmap, scale, parent=None):          super(QGraphicsPixmapItem, self).__init__(pixmap, parent) -        self.setPos(x, y) -        self.setFlag(QGraphicsItem.ItemIsMovable) +        self._pixmap = pixmap +        self.setOffset(x, -y)          self.setFlag(QGraphicsItem.ItemIsSelectable) +        self.setShapeMode(QGraphicsPixmapItem.BoundingRectShape)          self.setTransform(QTransform().fromScale(1, -1)) -        self.setOpacity(.5) +        self.setOpacity(.6)          self.setZValue(-1) - -        rect = self.boundingRect() -        self._rWidth = rect.width() -        self._rHeight = rect.height() -        handle = ResizeHandleItem(self) -        handle.setVisible(False) - -    def _pixmapGeometryChanged(self, event): -        modifiers = event.modifiers() -        pos = event.scenePos() -        if modifiers & Qt.ControlModifier: -            # rotate -            refLine = QLineF(self.x(), self.y(), self.x() + -                             self._rWidth, self.y() - self._rHeight) -            curLine = QLineF(self.x(), self.y(), pos.x(), pos.y()) -            self.setRotation(refLine.angleTo(curLine)) -        else: -            # scale -            dy = (pos.y() - self.y()) / self._rHeight -            if modifiers & Qt.ShiftModifier: -                # keep original aspect ratio -                dx = -dy -            else: -                dx = (pos.x() - self.x()) / self._rWidth -            self.setTransform(QTransform().fromScale(dx, dy)) -        event.accept() +        sizeGripItem = SizeGripItem(scale, self) +        sizeGripItem.setVisible(False) + +    def setRect(self, rect): +        dTopLeft = rect.topLeft() - self.pos() +        if not dTopLeft.isNull(): +            self.setOffset(dTopLeft) +        self.setPixmap(self._pixmap.scaled( +            rect.size().toSize() +        ))      def itemChange(self, change, value):          if change == QGraphicsItem.ItemSelectedChange: -            children = self.childItems() -            if not children[0].isUnderMouse(): -                children[0].setVisible(value) +            sizeGripItem = self.childItems()[0] +            sizeGripItem.setVisible(value)          return value @@ -1329,8 +1276,8 @@ class GlyphScene(QGraphicsScene):          else:              return          pos = event.scenePos() -        newPix = PixmapItem(pos.x(), pos.y(), dragPix) -        self._addRegisterItem(newPix) +        pixmapItem = PixmapItem(pos.x(), pos.y(), dragPix, self.getViewScale()) +        self._addRegisterItem(pixmapItem)          event.acceptProposedAction()      def getItemForPoint(self, point): @@ -1371,8 +1318,6 @@ class GlyphScene(QGraphicsScene):                  elif isinstance(item, (AnchorItem, ComponentItem,                                         OffCurvePointItem)):                      item.delete() -                elif isinstance(item, PixmapItem): -                    self.removeItem(item)              self._blocked = False              self._glyphObject.dirty = True              event.accept() | 
