18from krita
import Krita
20 from PyQt6.QtGui import QPolygon, QPainter, QPen, QBrush, QImage, QPixmap, QDrag, QPalette
21 from PyQt6.QtCore import Qt, QPoint, QMimeData, QUrl, QSize, pyqtSignal
24 from PyQt5.QtGui import QPolygon, QPainter, QPen, QBrush, QImage, QPixmap, QDrag, QPalette
25 from PyQt5.QtCore import Qt, QPoint, QMimeData, QUrl, QSize, pyqtSignal
31FAVOURITE_TRIANGLE = QPolygon([
33 QPoint(0, TRIANGLE_SIZE),
34 QPoint(TRIANGLE_SIZE, 0)
38 painter = QPainter(instance)
39 painter.setRenderHint(QPainter.RenderHint.Antialiasing,
True)
40 painter.setPen(QPen(Qt.GlobalColor.black, 2, Qt.PenStyle.SolidLine))
41 painter.setBrush(QBrush(Qt.GlobalColor.white, Qt.BrushStyle.SolidPattern))
44 total_width = event.rect().width()
45 total_height = event.rect().height()
46 image_width = instance.qimage.width()
47 image_height = instance.qimage.height()
50 var_w = total_width / image_width
51 var_h = total_height / image_height
63 wt2 = total_width * 0.5
64 ht2 = total_height * 0.5
66 instance.scaled_width = image_width * size
67 instance.scaled_height = image_height * size
69 offset_x = wt2 - (instance.scaled_width * 0.5)
70 offset_y = ht2 - (instance.scaled_height * 0.5)
74 painter.translate(offset_x, offset_y)
75 painter.scale(size, size)
76 painter.drawImage(0,0,instance.qimage)
78 if hasattr(instance,
'isFavourite'):
79 if instance.isFavourite:
81 painter.scale(1/size, 1/size)
82 painter.drawPolygon(FAVOURITE_TRIANGLE)
88 instance.qimage = QImage()
if image
is None else image
89 instance.pixmap = QPixmap(50, 50).fromImage(instance.qimage)
94 if event.modifiers() != Qt.KeyboardModifier.ShiftModifier
and event.modifiers() != Qt.KeyboardModifier.AltModifier:
95 self.PREVIOUS_DRAG_X =
None
99 if self.PREVIOUS_DRAG_X
and event.modifiers() == Qt.KeyboardModifier.AltModifier:
100 if self.PREVIOUS_DRAG_X < event.x() - DRAG_DELTA:
101 self.SIGNAL_WUP.emit(0)
102 self.PREVIOUS_DRAG_X = event.x()
103 elif self.PREVIOUS_DRAG_X > event.x() + DRAG_DELTA:
104 self.SIGNAL_WDN.emit(0)
105 self.PREVIOUS_DRAG_X = event.x()
110 mimedata = QMimeData()
111 url = QUrl().fromLocalFile(self.path)
112 mimedata.setUrls([url])
121 scale = self.scale / 100
124 if self.fitCanvasChecked
and not doc
is None:
125 fullImage = QImage(self.path).scaled(doc.width() * scale, doc.height() * scale, Qt.AspectRatioMode.KeepAspectRatio, Qt.TransformationMode.SmoothTransformation)
127 fullImage = QImage(self.path)
129 fullImage = fullImage.scaled(fullImage.width() * scale, fullImage.height() * scale, Qt.AspectRatioMode.KeepAspectRatio, Qt.TransformationMode.SmoothTransformation)
131 fullPixmap = QPixmap(50, 50).fromImage(fullImage)
132 mimedata.setImageData(fullPixmap)
135 QApplication.clipboard().setImage(self.qimage)
139 drag.setMimeData(mimedata)
140 drag.setPixmap(self.pixmap)
141 drag.setHotSpot(QPoint(self.qimage.width() / 2, self.qimage.height() / 2))
142 drag.exec(Qt.DropAction.CopyAction)
145 SIGNAL_HOVER = pyqtSignal(str)
146 SIGNAL_CLOSE = pyqtSignal(int)
147 fitCanvasChecked =
False
151 super(Photobash_Display, self).
__init__(parent)
155 return QSize(5000,5000)
164 if (event.modifiers() == Qt.KeyboardModifier.NoModifier
and event.buttons() == Qt.MouseButton.LeftButton):
184 SIGNAL_HOVER = pyqtSignal(str)
185 SIGNAL_LMB = pyqtSignal(int)
186 SIGNAL_WUP = pyqtSignal(int)
187 SIGNAL_WDN = pyqtSignal(int)
188 SIGNAL_PREVIEW = pyqtSignal(str)
189 SIGNAL_FAVOURITE = pyqtSignal(str)
190 SIGNAL_UN_FAVOURITE = pyqtSignal(str)
191 SIGNAL_OPEN_NEW = pyqtSignal(str)
192 SIGNAL_REFERENCE = pyqtSignal(str)
193 SIGNAL_DRAG = pyqtSignal(int)
194 PREVIOUS_DRAG_X =
None
195 fitCanvasChecked =
False
200 super(Photobash_Button, self).
__init__(parent)
222 return QSize(2000,2000)
231 if event.modifiers() == Qt.KeyboardModifier.NoModifier
and event.buttons() == Qt.MouseButton.LeftButton:
233 if event.modifiers() == Qt.KeyboardModifier.AltModifier:
244 delta = event.angleDelta()
247 elif delta.y() < -20:
254 cmenuDisplay = cmenu.addAction(
"Preview in Docker")
256 cmenuFavourite = cmenu.addAction(favouriteString)
257 cmenuOpenNew = cmenu.addAction(
"Open as New Document")
258 cmenuReference = cmenu.addAction(
"Place as Reference")
260 background = QApplication().
instance().
palette().color(QPalette.ColorRole.Window).name().split(
"#")[1]
261 cmenuStyleSheet = f
"""QMenu {{ background-color: #AA{background}; border: 1px solid #{background}; }}"""
262 cmenu.setStyleSheet(cmenuStyleSheet)
264 action = cmenu.exec(self.mapToGlobal(event.pos()))
265 if action == cmenuDisplay:
267 if action == cmenuFavourite:
272 if action == cmenuOpenNew:
274 if action == cmenuReference:
PythonPluginManager * instance
static Krita * instance()
instance retrieve the singleton instance of the Application object.
setFitCanvas(self, newFit)
mouseMoveEvent(self, event)
setImageScale(self, newScale)
setImage(self, path, image)
mousePressEvent(self, event)
customSetImage(instance, image)
customPaintEvent(instance, event)
customMouseMoveEvent(self, event)
rgba palette[MAX_PALETTE]