diff --git a/libs/canvas.py b/libs/canvas.py index f7c7a4f2..b1cea058 100644 --- a/libs/canvas.py +++ b/libs/canvas.py @@ -551,6 +551,47 @@ class Canvas(QWidget): self.update() elif key == Qt.Key_Return and self.canCloseShape(): self.finalise() + elif key == Qt.Key_Left and self.selectedShape: + self.moveOnePixel('Left') + elif key == Qt.Key_Right and self.selectedShape: + self.moveOnePixel('Right') + elif key == Qt.Key_Up and self.selectedShape: + self.moveOnePixel('Up') + elif key == Qt.Key_Down and self.selectedShape: + self.moveOnePixel('Down') + + def moveOnePixel(self, direction): + # print(self.selectedShape.points) + if direction == 'Left' and not self.moveOutOfBound(QPointF(-1.0, 0)): + print("move Left one pixel") + self.selectedShape.points[0] += QPointF(-1.0, 0) + self.selectedShape.points[1] += QPointF(-1.0, 0) + self.selectedShape.points[2] += QPointF(-1.0, 0) + self.selectedShape.points[3] += QPointF(-1.0, 0) + elif direction == 'Right' and not self.moveOutOfBound(QPointF(1.0, 0)): + print("move Right one pixel") + self.selectedShape.points[0] += QPointF(1.0, 0) + self.selectedShape.points[1] += QPointF(1.0, 0) + self.selectedShape.points[2] += QPointF(1.0, 0) + self.selectedShape.points[3] += QPointF(1.0, 0) + elif direction == 'Up' and not self.moveOutOfBound(QPointF(0, -1.0)): + print("move Up one pixel") + self.selectedShape.points[0] += QPointF(0, -1.0) + self.selectedShape.points[1] += QPointF(0, -1.0) + self.selectedShape.points[2] += QPointF(0, -1.0) + self.selectedShape.points[3] += QPointF(0, -1.0) + elif direction == 'Down' and not self.moveOutOfBound(QPointF(0, 1.0)): + print("move Down one pixel") + self.selectedShape.points[0] += QPointF(0, 1.0) + self.selectedShape.points[1] += QPointF(0, 1.0) + self.selectedShape.points[2] += QPointF(0, 1.0) + self.selectedShape.points[3] += QPointF(0, 1.0) + self.shapeMoved.emit() + self.repaint() + + def moveOutOfBound(self, step): + points = [p1+p2 for p1, p2 in zip(self.selectedShape.points, [step]*4)] + return True in map(self.outOfPixmap, points) def setLastLabel(self, text): assert text