aboutsummaryrefslogtreecommitdiffstats
path: root/Lib/defconQt/glyphView.py
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/defconQt/glyphView.py')
-rw-r--r--Lib/defconQt/glyphView.py97
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()