29 clip = QRegion(rect) |
29 clip = QRegion(rect) |
30 clip = clip.subtracted(QRegion(rect.adjusted(1, 1, -1, -1))) |
30 clip = clip.subtracted(QRegion(rect.adjusted(1, 1, -1, -1))) |
31 |
31 |
32 painter.save() |
32 painter.save() |
33 painter.setClipRegion(clip) |
33 painter.setClipRegion(clip) |
34 painter.setPen(Qt.NoPen) |
34 painter.setPen(Qt.PenStyle.NoPen) |
35 painter.setBrush(outline) |
35 painter.setBrush(outline) |
36 painter.drawRect(rect) |
36 painter.drawRect(rect) |
37 if fill is not None and fill.isValid(): |
37 if fill is not None and fill.isValid(): |
38 painter.setClipping(False) |
38 painter.setClipping(False) |
39 painter.setBrush(fill) |
39 painter.setBrush(fill) |
148 |
151 |
149 painter = QPainter(self) |
152 painter = QPainter(self) |
150 pal = QPalette(QToolTip.palette()) |
153 pal = QPalette(QToolTip.palette()) |
151 font = QToolTip.font() |
154 font = QToolTip.font() |
152 |
155 |
153 handleColor = pal.color(QPalette.Active, QPalette.Highlight) |
156 handleColor = pal.color(QPalette.ColorGroup.Active, |
|
157 QPalette.ColorRole.Highlight) |
154 handleColor.setAlpha(160) |
158 handleColor.setAlpha(160) |
155 overlayColor = QColor(0, 0, 0, 160) |
159 overlayColor = QColor(0, 0, 0, 160) |
156 textColor = pal.color(QPalette.Active, QPalette.Text) |
160 textColor = pal.color(QPalette.ColorGroup.Active, |
157 textBackgroundColor = pal.color(QPalette.Active, QPalette.Base) |
161 QPalette.ColorRole.Text) |
|
162 textBackgroundColor = pal.color(QPalette.ColorGroup.Active, |
|
163 QPalette.ColorRole.Base) |
158 painter.drawPixmap(0, 0, self.__pixmap) |
164 painter.drawPixmap(0, 0, self.__pixmap) |
159 painter.setFont(font) |
165 painter.setFont(font) |
160 |
166 |
161 r = QRect(self.__selection) |
167 r = QRect(self.__selection) |
162 if not self.__selection.isNull(): |
168 if not self.__selection.isNull(): |
163 grey = QRegion(self.rect()) |
169 grey = QRegion(self.rect()) |
164 if self.__mode == SnapshotRegionGrabber.Ellipse: |
170 if self.__mode == SnapshotRegionGrabber.Ellipse: |
165 reg = QRegion(r, QRegion.Ellipse) |
171 reg = QRegion(r, QRegion.RegionType.Ellipse) |
166 else: |
172 else: |
167 reg = QRegion(r) |
173 reg = QRegion(r) |
168 grey = grey.subtracted(reg) |
174 grey = grey.subtracted(reg) |
169 painter.setClipRegion(grey) |
175 painter.setClipRegion(grey) |
170 painter.setPen(Qt.NoPen) |
176 painter.setPen(Qt.PenStyle.NoPen) |
171 painter.setBrush(overlayColor) |
177 painter.setBrush(overlayColor) |
172 painter.drawRect(self.rect()) |
178 painter.drawRect(self.rect()) |
173 painter.setClipRect(self.rect()) |
179 painter.setClipRect(self.rect()) |
174 drawRect(painter, r, handleColor) |
180 drawRect(painter, r, handleColor) |
175 |
181 |
176 if self.__showHelp: |
182 if self.__showHelp: |
177 painter.setPen(textColor) |
183 painter.setPen(textColor) |
178 painter.setBrush(textBackgroundColor) |
184 painter.setBrush(textBackgroundColor) |
179 self.__helpTextRect = painter.boundingRect( |
185 self.__helpTextRect = painter.boundingRect( |
180 self.rect().adjusted(2, 2, -2, -2), |
186 self.rect().adjusted(2, 2, -2, -2), |
181 Qt.TextWordWrap, self.__helpText).translated(0, 0) |
187 Qt.TextFlag.TextWordWrap, self.__helpText).translated(0, 0) |
182 self.__helpTextRect.adjust(-2, -2, 4, 2) |
188 self.__helpTextRect.adjust(-2, -2, 4, 2) |
183 drawRect(painter, self.__helpTextRect, textColor, |
189 drawRect(painter, self.__helpTextRect, textColor, |
184 textBackgroundColor) |
190 textBackgroundColor) |
185 painter.drawText( |
191 painter.drawText( |
186 self.__helpTextRect.adjusted(3, 3, -3, -3), |
192 self.__helpTextRect.adjusted(3, 3, -3, -3), |
187 Qt.TextWordWrap, self.__helpText) |
193 Qt.TextFlag.TextWordWrap, self.__helpText) |
188 |
194 |
189 if self.__selection.isNull(): |
195 if self.__selection.isNull(): |
190 return |
196 return |
191 |
197 |
192 # The grabbed region is everything which is covered by the drawn |
198 # The grabbed region is everything which is covered by the drawn |
196 self.__locale.toString(self.__selection.x()), |
202 self.__locale.toString(self.__selection.x()), |
197 self.__locale.toString(self.__selection.y()), |
203 self.__locale.toString(self.__selection.y()), |
198 self.__locale.toString(self.__selection.width()), |
204 self.__locale.toString(self.__selection.width()), |
199 self.__locale.toString(self.__selection.height()) |
205 self.__locale.toString(self.__selection.height()) |
200 ) |
206 ) |
201 textRect = painter.boundingRect(self.rect(), Qt.AlignLeft, txt) |
207 textRect = painter.boundingRect(self.rect(), |
|
208 Qt.AlignmentFlag.AlignLeft, txt) |
202 boundingRect = textRect.adjusted(-4, 0, 0, 0) |
209 boundingRect = textRect.adjusted(-4, 0, 0, 0) |
203 |
210 |
204 if ( |
211 if ( |
205 textRect.width() < r.width() - 2 * self.__handleSize and |
212 textRect.width() < r.width() - 2 * self.__handleSize and |
206 textRect.height() < r.height() - 2 * self.__handleSize and |
213 textRect.height() < r.height() - 2 * self.__handleSize and |
234 textRect.moveBottomLeft(QPoint(r.right() + 5, r.bottom())) |
241 textRect.moveBottomLeft(QPoint(r.right() + 5, r.bottom())) |
235 |
242 |
236 # If the above didn't catch it, you are running on a very |
243 # If the above didn't catch it, you are running on a very |
237 # tiny screen... |
244 # tiny screen... |
238 drawRect(painter, boundingRect, textColor, textBackgroundColor) |
245 drawRect(painter, boundingRect, textColor, textBackgroundColor) |
239 painter.drawText(textRect, Qt.AlignHCenter, txt) |
246 painter.drawText(textRect, Qt.AlignmentFlag.AlignHCenter, txt) |
240 |
247 |
241 if ( |
248 if ( |
242 (r.height() > self.__handleSize * 2 and |
249 (r.height() > self.__handleSize * 2 and |
243 r.width() > self.__handleSize * 2) or |
250 r.width() > self.__handleSize * 2) or |
244 not self.__mouseDown |
251 not self.__mouseDown |
245 ): |
252 ): |
246 self.__updateHandles() |
253 self.__updateHandles() |
247 painter.setPen(Qt.NoPen) |
254 painter.setPen(Qt.PenStyle.NoPen) |
248 painter.setBrush(handleColor) |
255 painter.setBrush(handleColor) |
249 painter.setClipRegion( |
256 painter.setClipRegion( |
250 self.__handleMask(SnapshotRegionGrabber.StrokeMask)) |
257 self.__handleMask(SnapshotRegionGrabber.StrokeMask)) |
251 painter.drawRect(self.rect()) |
258 painter.drawRect(self.rect()) |
252 handleColor.setAlpha(60) |
259 handleColor.setAlpha(60) |
278 Protected method to handle mouse button presses. |
285 Protected method to handle mouse button presses. |
279 |
286 |
280 @param evt mouse press event (QMouseEvent) |
287 @param evt mouse press event (QMouseEvent) |
281 """ |
288 """ |
282 self.__showHelp = not self.__helpTextRect.contains(evt.pos()) |
289 self.__showHelp = not self.__helpTextRect.contains(evt.pos()) |
283 if evt.button() == Qt.LeftButton: |
290 if evt.button() == Qt.MouseButton.LeftButton: |
284 self.__mouseDown = True |
291 self.__mouseDown = True |
285 self.__dragStartPoint = evt.pos() |
292 self.__dragStartPoint = evt.pos() |
286 self.__selectionBeforeDrag = QRect(self.__selection) |
293 self.__selectionBeforeDrag = QRect(self.__selection) |
287 if not self.__selection.contains(evt.pos()): |
294 if not self.__selection.contains(evt.pos()): |
288 self.__newSelection = True |
295 self.__newSelection = True |
289 self.__selection = QRect() |
296 self.__selection = QRect() |
290 else: |
297 else: |
291 self.setCursor(Qt.ClosedHandCursor) |
298 self.setCursor(Qt.CursorShape.ClosedHandCursor) |
292 elif evt.button() == Qt.RightButton: |
299 elif evt.button() == Qt.MouseButton.RightButton: |
293 self.__newSelection = False |
300 self.__newSelection = False |
294 self.__selection = QRect() |
301 self.__selection = QRect() |
295 self.setCursor(Qt.CrossCursor) |
302 self.setCursor(Qt.CursorShape.CrossCursor) |
296 self.update() |
303 self.update() |
297 |
304 |
298 def mouseMoveEvent(self, evt): |
305 def mouseMoveEvent(self, evt): |
299 """ |
306 """ |
300 Protected method to handle mouse movements. |
307 Protected method to handle mouse movements. |
362 break |
369 break |
363 |
370 |
364 if not found: |
371 if not found: |
365 self.__mouseOverHandle = None |
372 self.__mouseOverHandle = None |
366 if self.__selection.contains(evt.pos()): |
373 if self.__selection.contains(evt.pos()): |
367 self.setCursor(Qt.OpenHandCursor) |
374 self.setCursor(Qt.CursorShape.OpenHandCursor) |
368 else: |
375 else: |
369 self.setCursor(Qt.CrossCursor) |
376 self.setCursor(Qt.CursorShape.CrossCursor) |
370 else: |
377 else: |
371 if self.__mouseOverHandle in [self.__TLHandle, |
378 if self.__mouseOverHandle in [self.__TLHandle, |
372 self.__BRHandle]: |
379 self.__BRHandle]: |
373 self.setCursor(Qt.SizeFDiagCursor) |
380 self.setCursor(Qt.CursorShape.SizeFDiagCursor) |
374 elif self.__mouseOverHandle in [self.__TRHandle, |
381 elif self.__mouseOverHandle in [self.__TRHandle, |
375 self.__BLHandle]: |
382 self.__BLHandle]: |
376 self.setCursor(Qt.SizeBDiagCursor) |
383 self.setCursor(Qt.CursorShape.SizeBDiagCursor) |
377 elif self.__mouseOverHandle in [self.__LHandle, |
384 elif self.__mouseOverHandle in [self.__LHandle, |
378 self.__RHandle]: |
385 self.__RHandle]: |
379 self.setCursor(Qt.SizeHorCursor) |
386 self.setCursor(Qt.CursorShape.SizeHorCursor) |
380 elif self.__mouseOverHandle in [self.__THandle, |
387 elif self.__mouseOverHandle in [self.__THandle, |
381 self.__BHandle]: |
388 self.__BHandle]: |
382 self.setCursor(Qt.SizeVerCursor) |
389 self.setCursor(Qt.CursorShape.SizeVerCursor) |
383 |
390 |
384 def mouseReleaseEvent(self, evt): |
391 def mouseReleaseEvent(self, evt): |
385 """ |
392 """ |
386 Protected method to handle mouse button releases. |
393 Protected method to handle mouse button releases. |
387 |
394 |
502 def __grabRect(self): |
509 def __grabRect(self): |
503 """ |
510 """ |
504 Private method to grab the selected rectangle (i.e. do the snapshot). |
511 Private method to grab the selected rectangle (i.e. do the snapshot). |
505 """ |
512 """ |
506 if self.__mode == SnapshotRegionGrabber.Ellipse: |
513 if self.__mode == SnapshotRegionGrabber.Ellipse: |
507 ell = QRegion(self.__selection, QRegion.Ellipse) |
514 ell = QRegion(self.__selection, QRegion.RegionType.Ellipse) |
508 if not ell.isEmpty(): |
515 if not ell.isEmpty(): |
509 self.__grabbing = True |
516 self.__grabbing = True |
510 |
517 |
511 xOffset = self.__pixmap.rect().x() - ell.boundingRect().x() |
518 xOffset = self.__pixmap.rect().x() - ell.boundingRect().x() |
512 yOffset = self.__pixmap.rect().y() - ell.boundingRect().y() |
519 yOffset = self.__pixmap.rect().y() - ell.boundingRect().y() |
513 translatedEll = ell.translated(xOffset, yOffset) |
520 translatedEll = ell.translated(xOffset, yOffset) |
514 |
521 |
515 pixmap2 = QPixmap(ell.boundingRect().size()) |
522 pixmap2 = QPixmap(ell.boundingRect().size()) |
516 pixmap2.fill(Qt.transparent) |
523 pixmap2.fill(Qt.GlobalColor.transparent) |
517 |
524 |
518 pt = QPainter() |
525 pt = QPainter() |
519 pt.begin(pixmap2) |
526 pt.begin(pixmap2) |
520 if pt.paintEngine().hasFeature(QPaintEngine.PorterDuff): |
527 if pt.paintEngine().hasFeature( |
|
528 QPaintEngine.PaintEngineFeature.PorterDuff |
|
529 ): |
521 pt.setRenderHints( |
530 pt.setRenderHints( |
522 QPainter.Antialiasing | |
531 QPainter.RenderHint.Antialiasing | |
523 QPainter.HighQualityAntialiasing | |
532 QPainter.RenderHint.HighQualityAntialiasing | |
524 QPainter.SmoothPixmapTransform, |
533 QPainter.RenderHint.SmoothPixmapTransform, |
525 True) |
534 True) |
526 pt.setBrush(Qt.black) |
535 pt.setBrush(Qt.GlobalColor.black) |
527 pt.setPen(QPen(QBrush(Qt.black), 0.5)) |
536 pt.setPen(QPen(QBrush(Qt.GlobalColor.black), 0.5)) |
528 pt.drawEllipse(translatedEll.boundingRect()) |
537 pt.drawEllipse(translatedEll.boundingRect()) |
529 pt.setCompositionMode(QPainter.CompositionMode_SourceIn) |
538 pt.setCompositionMode( |
|
539 QPainter.CompositionMode.CompositionMode_SourceIn) |
530 else: |
540 else: |
531 pt.setClipRegion(translatedEll) |
541 pt.setClipRegion(translatedEll) |
532 pt.setCompositionMode(QPainter.CompositionMode_Source) |
542 pt.setCompositionMode( |
|
543 QPainter.CompositionMode.CompositionMode_Source) |
533 |
544 |
534 pt.drawPixmap(pixmap2.rect(), self.__pixmap, |
545 pt.drawPixmap(pixmap2.rect(), self.__pixmap, |
535 ell.boundingRect()) |
546 ell.boundingRect()) |
536 pt.end() |
547 pt.end() |
537 |
548 |