Snapshot/SnapshotRegionGrabber.py

Wed, 02 Jan 2013 10:31:48 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Wed, 02 Jan 2013 10:31:48 +0100
changeset 2302
f29e9405c851
parent 2194
0fce40af66b8
child 2525
8b507a9a2d40
child 2993
4933ac9daa80
child 3163
9f50365a0870
permissions
-rw-r--r--

Updated copyright for 2013.

1770
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
2
2302
f29e9405c851 Updated copyright for 2013.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2194
diff changeset
3 # Copyright (c) 2012 - 2013 Detlev Offenbach <detlev@die-offenbachs.de>
1770
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
4 #
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
5
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
6 """
1772
f325dfdc8f6b Extended the snapshot tool to allow for the selection of a screen (for multi screen systems), elliptical selection and a freehand selection.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1770
diff changeset
7 Module implementing a grabber widget for a rectangular snapshot region.
1770
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
8 """
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
9
2106
cca04724bff8 Made the eighth set of Qt5 compatibility changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1965
diff changeset
10 from PyQt4.QtCore import pyqtSignal, Qt, QRect, QPoint, QTimer, qVersion
1770
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
11 from PyQt4.QtGui import QWidget, QPixmap, QColor, QRegion, QApplication, QPainter, \
1772
f325dfdc8f6b Extended the snapshot tool to allow for the selection of a screen (for multi screen systems), elliptical selection and a freehand selection.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1770
diff changeset
12 QPalette, QToolTip, QPaintEngine, QPen, QBrush
1770
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
13
2194
0fce40af66b8 Fixed a few PEP-8 related issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2131
diff changeset
14
1770
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
15 def drawRect(painter, rect, outline, fill=QColor()):
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
16 """
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
17 Module function to draw a rectangle with the given parameters.
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
18
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
19 @param painter reference to the painter to be used (QPainter)
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
20 @param rect rectangle to be drawn (QRect)
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
21 @param outline color of the outline (QColor)
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
22 @param fill fill color (QColor)
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
23 """
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
24 clip = QRegion(rect)
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
25 clip = clip.subtracted(QRegion(rect.adjusted(1, 1, -1, -1)))
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
26
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
27 painter.save()
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
28 painter.setClipRegion(clip)
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
29 painter.setPen(Qt.NoPen)
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
30 painter.setBrush(outline)
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
31 painter.drawRect(rect)
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
32 if fill.isValid():
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
33 painter.setClipping(False)
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
34 painter.setBrush(fill)
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
35 painter.drawRect(rect.adjusted(1, 1, -1, -1))
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
36 painter.restore()
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
37
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
38
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
39 class SnapshotRegionGrabber(QWidget):
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
40 """
1772
f325dfdc8f6b Extended the snapshot tool to allow for the selection of a screen (for multi screen systems), elliptical selection and a freehand selection.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1770
diff changeset
41 Class implementing a grabber widget for a rectangular snapshot region.
1770
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
42
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
43 @signal grabbed(QPixmap) emitted after the region was grabbed
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
44 """
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
45 grabbed = pyqtSignal(QPixmap)
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
46
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
47 StrokeMask = 0
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
48 FillMask = 1
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
49
1772
f325dfdc8f6b Extended the snapshot tool to allow for the selection of a screen (for multi screen systems), elliptical selection and a freehand selection.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1770
diff changeset
50 Rectangle = 0
f325dfdc8f6b Extended the snapshot tool to allow for the selection of a screen (for multi screen systems), elliptical selection and a freehand selection.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1770
diff changeset
51 Ellipse = 1
1770
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
52
1772
f325dfdc8f6b Extended the snapshot tool to allow for the selection of a screen (for multi screen systems), elliptical selection and a freehand selection.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1770
diff changeset
53 def __init__(self, mode=Rectangle):
1770
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
54 """
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
55 Constructor
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
56
1772
f325dfdc8f6b Extended the snapshot tool to allow for the selection of a screen (for multi screen systems), elliptical selection and a freehand selection.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1770
diff changeset
57 @param mode region grabber mode (SnapshotRegionGrabber.Rectangle or
f325dfdc8f6b Extended the snapshot tool to allow for the selection of a screen (for multi screen systems), elliptical selection and a freehand selection.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1770
diff changeset
58 SnapshotRegionGrabber.Ellipse)
1770
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
59 """
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
60 super().__init__(None,
1965
96f5a76e1845 Fixed some PEP-8 related issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1778
diff changeset
61 Qt.X11BypassWindowManagerHint | Qt.WindowStaysOnTopHint |
1770
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
62 Qt.FramelessWindowHint | Qt.Tool)
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
63
1772
f325dfdc8f6b Extended the snapshot tool to allow for the selection of a screen (for multi screen systems), elliptical selection and a freehand selection.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1770
diff changeset
64 assert mode in [SnapshotRegionGrabber.Rectangle,
f325dfdc8f6b Extended the snapshot tool to allow for the selection of a screen (for multi screen systems), elliptical selection and a freehand selection.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1770
diff changeset
65 SnapshotRegionGrabber.Ellipse]
1770
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
66 self.__mode = mode
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
67
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
68 self.__selection = QRect()
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
69 self.__mouseDown = False
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
70 self.__newSelection = False
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
71 self.__handleSize = 10
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
72 self.__mouseOverHandle = None
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
73 self.__showHelp = True
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
74 self.__grabbing = False
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
75 self.__dragStartPoint = QPoint()
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
76 self.__selectionBeforeDrag = QRect()
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
77
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
78 # naming conventions for handles
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
79 # T top, B bottom, R Right, L left
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
80 # 2 letters: a corner
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
81 # 1 letter: the handle on the middle of the corresponding side
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
82 self.__TLHandle = QRect(0, 0, self.__handleSize, self.__handleSize)
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
83 self.__TRHandle = QRect(0, 0, self.__handleSize, self.__handleSize)
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
84 self.__BLHandle = QRect(0, 0, self.__handleSize, self.__handleSize)
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
85 self.__BRHandle = QRect(0, 0, self.__handleSize, self.__handleSize)
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
86 self.__LHandle = QRect(0, 0, self.__handleSize, self.__handleSize)
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
87 self.__THandle = QRect(0, 0, self.__handleSize, self.__handleSize)
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
88 self.__RHandle = QRect(0, 0, self.__handleSize, self.__handleSize)
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
89 self.__BHandle = QRect(0, 0, self.__handleSize, self.__handleSize)
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
90 self.__handles = [self.__TLHandle, self.__TRHandle, self.__BLHandle,
1965
96f5a76e1845 Fixed some PEP-8 related issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1778
diff changeset
91 self.__BRHandle, self.__LHandle, self.__THandle,
1770
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
92 self.__RHandle, self.__BHandle]
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
93 self.__helpTextRect = QRect()
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
94 self.__helpText = self.trUtf8(
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
95 "Select a region using the mouse. To take the snapshot, press the Enter key"
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
96 " or double click. Press Esc to quit.")
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
97
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
98 self.__pixmap = QPixmap()
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
99
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
100 self.setMouseTracking(True)
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
101
1772
f325dfdc8f6b Extended the snapshot tool to allow for the selection of a screen (for multi screen systems), elliptical selection and a freehand selection.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1770
diff changeset
102 QTimer.singleShot(200, self.__initialize)
1770
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
103
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
104 def __initialize(self):
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
105 """
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
106 Private slot to initialize the rest of the widget.
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
107 """
1778
31e70a6f8e7f Implemented a fix for dual screen config on Windows.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1772
diff changeset
108 self.__desktop = QApplication.desktop()
31e70a6f8e7f Implemented a fix for dual screen config on Windows.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1772
diff changeset
109 x = self.__desktop.x()
31e70a6f8e7f Implemented a fix for dual screen config on Windows.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1772
diff changeset
110 y = self.__desktop.y()
2106
cca04724bff8 Made the eighth set of Qt5 compatibility changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1965
diff changeset
111 if qVersion() >= "5.0.0":
2131
e79d0610347a Corrected the screen grabbing code for Qt5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2106
diff changeset
112 self.__pixmap = QApplication.screens()[0].grabWindow(
e79d0610347a Corrected the screen grabbing code for Qt5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2106
diff changeset
113 self.__desktop.winId(), x, y,
2106
cca04724bff8 Made the eighth set of Qt5 compatibility changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1965
diff changeset
114 self.__desktop.width(), self.__desktop.height())
cca04724bff8 Made the eighth set of Qt5 compatibility changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1965
diff changeset
115 else:
cca04724bff8 Made the eighth set of Qt5 compatibility changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1965
diff changeset
116 self.__pixmap = QPixmap.grabWindow(self.__desktop.winId(), x, y,
cca04724bff8 Made the eighth set of Qt5 compatibility changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1965
diff changeset
117 self.__desktop.width(), self.__desktop.height())
1772
f325dfdc8f6b Extended the snapshot tool to allow for the selection of a screen (for multi screen systems), elliptical selection and a freehand selection.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1770
diff changeset
118 self.resize(self.__pixmap.size())
1778
31e70a6f8e7f Implemented a fix for dual screen config on Windows.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1772
diff changeset
119 self.move(x, y)
1772
f325dfdc8f6b Extended the snapshot tool to allow for the selection of a screen (for multi screen systems), elliptical selection and a freehand selection.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1770
diff changeset
120 self.setCursor(Qt.CrossCursor)
f325dfdc8f6b Extended the snapshot tool to allow for the selection of a screen (for multi screen systems), elliptical selection and a freehand selection.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1770
diff changeset
121 self.show()
1770
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
122
1772
f325dfdc8f6b Extended the snapshot tool to allow for the selection of a screen (for multi screen systems), elliptical selection and a freehand selection.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1770
diff changeset
123 self.grabMouse()
f325dfdc8f6b Extended the snapshot tool to allow for the selection of a screen (for multi screen systems), elliptical selection and a freehand selection.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1770
diff changeset
124 self.grabKeyboard()
1770
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
125
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
126 def paintEvent(self, evt):
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
127 """
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
128 Protected method handling paint events.
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
129
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
130 @param evt paint event (QPaintEvent)
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
131 """
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
132 if self.__grabbing: # grabWindow() should just get the background
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
133 return
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
134
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
135 painter = QPainter(self)
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
136 pal = QPalette(QToolTip.palette())
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
137 font = QToolTip.font()
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
138
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
139 handleColor = pal.color(QPalette.Active, QPalette.Highlight)
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
140 handleColor.setAlpha(160)
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
141 overlayColor = QColor(0, 0, 0, 160)
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
142 textColor = pal.color(QPalette.Active, QPalette.Text)
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
143 textBackgroundColor = pal.color(QPalette.Active, QPalette.Base)
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
144 painter.drawPixmap(0, 0, self.__pixmap)
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
145 painter.setFont(font)
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
146
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
147 r = QRect(self.__selection)
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
148 if not self.__selection.isNull():
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
149 grey = QRegion(self.rect())
1772
f325dfdc8f6b Extended the snapshot tool to allow for the selection of a screen (for multi screen systems), elliptical selection and a freehand selection.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1770
diff changeset
150 if self.__mode == SnapshotRegionGrabber.Ellipse:
f325dfdc8f6b Extended the snapshot tool to allow for the selection of a screen (for multi screen systems), elliptical selection and a freehand selection.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1770
diff changeset
151 reg = QRegion(r, QRegion.Ellipse)
f325dfdc8f6b Extended the snapshot tool to allow for the selection of a screen (for multi screen systems), elliptical selection and a freehand selection.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1770
diff changeset
152 else:
f325dfdc8f6b Extended the snapshot tool to allow for the selection of a screen (for multi screen systems), elliptical selection and a freehand selection.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1770
diff changeset
153 reg = QRegion(r)
f325dfdc8f6b Extended the snapshot tool to allow for the selection of a screen (for multi screen systems), elliptical selection and a freehand selection.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1770
diff changeset
154 grey = grey.subtracted(reg)
1770
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
155 painter.setClipRegion(grey)
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
156 painter.setPen(Qt.NoPen)
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
157 painter.setBrush(overlayColor)
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
158 painter.drawRect(self.rect())
1772
f325dfdc8f6b Extended the snapshot tool to allow for the selection of a screen (for multi screen systems), elliptical selection and a freehand selection.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1770
diff changeset
159 painter.setClipRect(self.rect())
1770
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
160 drawRect(painter, r, handleColor)
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
161
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
162 if self.__showHelp:
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
163 painter.setPen(textColor)
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
164 painter.setBrush(textBackgroundColor)
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
165 self.__helpTextRect = painter.boundingRect(self.rect().adjusted(2, 2, -2, -2),
1778
31e70a6f8e7f Implemented a fix for dual screen config on Windows.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1772
diff changeset
166 Qt.TextWordWrap, self.__helpText).translated(
31e70a6f8e7f Implemented a fix for dual screen config on Windows.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1772
diff changeset
167 -self.__desktop.x(), -self.__desktop.y())
1770
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
168 self.__helpTextRect.adjust(-2, -2, 4, 2)
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
169 drawRect(painter, self.__helpTextRect, textColor, textBackgroundColor)
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
170 painter.drawText(self.__helpTextRect.adjusted(3, 3, -3, -3),
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
171 Qt.TextWordWrap, self.__helpText)
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
172
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
173 if self.__selection.isNull():
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
174 return
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
175
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
176 # The grabbed region is everything which is covered by the drawn
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
177 # rectangles (border included). This means that there is no 0px
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
178 # selection, since a 0px wide rectangle will always be drawn as a line.
1772
f325dfdc8f6b Extended the snapshot tool to allow for the selection of a screen (for multi screen systems), elliptical selection and a freehand selection.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1770
diff changeset
179 txt = "{0:n}, {1:n} ({2:n} x {3:n})".format(
1770
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
180 self.__selection.x(), self.__selection.y(),
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
181 self.__selection.width(), self.__selection.height())
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
182 textRect = painter.boundingRect(self.rect(), Qt.AlignLeft, txt)
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
183 boundingRect = textRect.adjusted(-4, 0, 0, 0)
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
184
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
185 if textRect.width() < r.width() - 2 * self.__handleSize and \
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
186 textRect.height() < r.height() - 2 * self.__handleSize and \
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
187 r.width() > 100 and \
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
188 r.height() > 100:
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
189 # center, unsuitable for small selections
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
190 boundingRect.moveCenter(r.center())
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
191 textRect.moveCenter(r.center())
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
192 elif r.y() - 3 > textRect.height() and \
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
193 r.x() + textRect.width() < self.rect().width():
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
194 # on top, left aligned
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
195 boundingRect.moveBottomLeft(QPoint(r.x(), r.y() - 3))
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
196 textRect.moveBottomLeft(QPoint(r.x() + 2, r.y() - 3))
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
197 elif r.x() - 3 > textRect.width():
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
198 # left, top aligned
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
199 boundingRect.moveTopRight(QPoint(r.x() - 3, r.y()))
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
200 textRect.moveTopRight(QPoint(r.x() - 5, r.y()))
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
201 elif r.bottom() + 3 + textRect.height() < self.rect().bottom() and \
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
202 r.right() > textRect.width():
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
203 # at bottom, right aligned
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
204 boundingRect.moveTopRight(QPoint(r.right(), r.bottom() + 3))
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
205 textRect.moveTopRight(QPoint(r.right() - 2, r.bottom() + 3))
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
206 elif r.right() + textRect.width() + 3 < self.rect().width():
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
207 # right, bottom aligned
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
208 boundingRect.moveBottomLeft(QPoint(r.right() + 3, r.bottom()))
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
209 textRect.moveBottomLeft(QPoint(r.right() + 5, r.bottom()))
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
210
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
211 # If the above didn't catch it, you are running on a very tiny screen...
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
212 drawRect(painter, boundingRect, textColor, textBackgroundColor)
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
213 painter.drawText(textRect, Qt.AlignHCenter, txt)
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
214
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
215 if (r.height() > self.__handleSize * 2 and \
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
216 r.width() > self.__handleSize * 2) or \
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
217 not self.__mouseDown:
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
218 self.__updateHandles()
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
219 painter.setPen(Qt.NoPen)
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
220 painter.setBrush(handleColor)
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
221 painter.setClipRegion(self.__handleMask(SnapshotRegionGrabber.StrokeMask))
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
222 painter.drawRect(self.rect())
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
223 handleColor.setAlpha(60)
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
224 painter.setBrush(handleColor)
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
225 painter.setClipRegion(self.__handleMask(SnapshotRegionGrabber.FillMask))
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
226 painter.drawRect(self.rect())
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
227
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
228 def resizeEvent(self, evt):
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
229 """
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
230 Protected method to handle resize events.
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
231
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
232 @param evt resize event (QResizeEvent)
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
233 """
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
234 if self.__selection.isNull():
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
235 return
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
236
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
237 r = QRect(self.__selection)
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
238 r.setTopLeft(self.__limitPointToRect(r.topLeft(), self.rect()))
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
239 r.setBottomRight(self.__limitPointToRect(r.bottomRight(), self.rect()))
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
240 if r.width() <= 1 or r.height() <= 1:
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
241 # This just results in ugly drawing...
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
242 self.__selection = QRect()
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
243 else:
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
244 self.__selection = self.__normalizeSelection(r)
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
245
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
246 def mousePressEvent(self, evt):
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
247 """
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
248 Protected method to handle mouse button presses.
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
249
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
250 @param evt mouse press event (QMouseEvent)
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
251 """
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
252 self.__showHelp = not self.__helpTextRect.contains(evt.pos())
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
253 if evt.button() == Qt.LeftButton:
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
254 self.__mouseDown = True
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
255 self.__dragStartPoint = evt.pos()
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
256 self.__selectionBeforeDrag = QRect(self.__selection)
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
257 if not self.__selection.contains(evt.pos()):
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
258 self.__newSelection = True
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
259 self.__selection = QRect()
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
260 else:
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
261 self.setCursor(Qt.ClosedHandCursor)
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
262 elif evt.button() == Qt.RightButton:
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
263 self.__newSelection = False
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
264 self.__selection = QRect()
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
265 self.setCursor(Qt.CrossCursor)
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
266 self.update()
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
267
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
268 def mouseMoveEvent(self, evt):
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
269 """
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
270 Protected method to handle mouse movements.
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
271
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
272 @param evt mouse move event (QMouseEvent)
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
273 """
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
274 shouldShowHelp = not self.__helpTextRect.contains(evt.pos())
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
275 if shouldShowHelp != self.__showHelp:
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
276 self.__showHelp = shouldShowHelp
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
277 self.update()
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
278
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
279 if self.__mouseDown:
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
280 if self.__newSelection:
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
281 p = evt.pos()
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
282 r = self.rect()
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
283 self.__selection = self.__normalizeSelection(
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
284 QRect(self.__dragStartPoint, self.__limitPointToRect(p, r)))
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
285 elif self.__mouseOverHandle is None:
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
286 # moving the whole selection
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
287 r = self.rect().normalized()
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
288 s = self.__selectionBeforeDrag.normalized()
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
289 p = s.topLeft() + evt.pos() - self.__dragStartPoint
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
290 r.setBottomRight(
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
291 r.bottomRight() - QPoint(s.width(), s.height()) + QPoint(1, 1))
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
292 if not r.isNull() and r.isValid():
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
293 self.__selection.moveTo(self.__limitPointToRect(p, r))
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
294 else:
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
295 # dragging a handle
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
296 r = QRect(self.__selectionBeforeDrag)
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
297 offset = evt.pos() - self.__dragStartPoint
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
298
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
299 if self.__mouseOverHandle in \
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
300 [self.__TLHandle, self.__THandle, self.__TRHandle]:
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
301 r.setTop(r.top() + offset.y())
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
302
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
303 if self.__mouseOverHandle in \
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
304 [self.__TLHandle, self.__LHandle, self.__BLHandle]:
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
305 r.setLeft(r.left() + offset.x())
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
306
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
307 if self.__mouseOverHandle in \
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
308 [self.__BLHandle, self.__BHandle, self.__BRHandle]:
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
309 r.setBottom(r.bottom() + offset.y())
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
310
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
311 if self.__mouseOverHandle in \
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
312 [self.__TRHandle, self.__RHandle, self.__BRHandle]:
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
313 r.setRight(r.right() + offset.x())
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
314
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
315 r.setTopLeft(self.__limitPointToRect(r.topLeft(), self.rect()))
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
316 r.setBottomRight(self.__limitPointToRect(r.bottomRight(), self.rect()))
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
317 self.__selection = self.__normalizeSelection(r)
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
318
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
319 self.update()
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
320 else:
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
321 if self.__selection.isNull():
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
322 return
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
323
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
324 found = False
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
325 for r in self.__handles:
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
326 if r.contains(evt.pos()):
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
327 self.__mouseOverHandle = r
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
328 found = True
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
329 break
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
330
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
331 if not found:
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
332 self.__mouseOverHandle = None
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
333 if self.__selection.contains(evt.pos()):
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
334 self.setCursor(Qt.OpenHandCursor)
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
335 else:
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
336 self.setCursor(Qt.CrossCursor)
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
337 else:
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
338 if self.__mouseOverHandle in [self.__TLHandle, self.__BRHandle]:
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
339 self.setCursor(Qt.SizeFDiagCursor)
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
340 elif self.__mouseOverHandle in [self.__TRHandle, self.__BLHandle]:
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
341 self.setCursor(Qt.SizeBDiagCursor)
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
342 elif self.__mouseOverHandle in [self.__LHandle, self.__RHandle]:
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
343 self.setCursor(Qt.SizeHorCursor)
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
344 elif self.__mouseOverHandle in [self.__THandle, self.__BHandle]:
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
345 self.setCursor(Qt.SizeVerCursor)
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
346
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
347 def mouseReleaseEvent(self, evt):
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
348 """
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
349 Protected method to handle mouse button releases.
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
350
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
351 @param evt mouse release event (QMouseEvent)
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
352 """
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
353 self.__mouseDown = False
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
354 self.__newSelection = False
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
355 if self.__mouseOverHandle is None and \
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
356 self.__selection.contains(evt.pos()):
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
357 self.setCursor(Qt.OpenHandCursor)
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
358 self.update()
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
359
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
360 def mouseDoubleClickEvent(self, evt):
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
361 """
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
362 Protected method to handle mouse double clicks.
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
363
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
364 @param evt mouse double click event (QMouseEvent)
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
365 """
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
366 self.__grabRect()
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
367
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
368 def keyPressEvent(self, evt):
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
369 """
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
370 Protected method to handle key presses.
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
371
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
372 @param evt key press event (QKeyEvent)
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
373 """
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
374 if evt.key() == Qt.Key_Escape:
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
375 self.grabbed.emit(QPixmap())
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
376 elif evt.key() in [Qt.Key_Enter, Qt.Key_Return]:
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
377 self.__grabRect()
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
378 else:
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
379 evt.ignore()
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
380
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
381 def __updateHandles(self):
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
382 """
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
383 Private method to update the handles.
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
384 """
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
385 r = QRect(self.__selection)
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
386 s2 = self.__handleSize // 2
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
387
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
388 self.__TLHandle.moveTopLeft(r.topLeft())
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
389 self.__TRHandle.moveTopRight(r.topRight())
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
390 self.__BLHandle.moveBottomLeft(r.bottomLeft())
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
391 self.__BRHandle.moveBottomRight(r.bottomRight())
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
392
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
393 self.__LHandle.moveTopLeft(QPoint(r.x(), r.y() + r.height() // 2 - s2))
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
394 self.__THandle.moveTopLeft(QPoint(r.x() + r.width() // 2 - s2, r.y()))
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
395 self.__RHandle.moveTopRight(QPoint(r.right(), r.y() + r.height() // 2 - s2))
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
396 self.__BHandle.moveBottomLeft(QPoint(r.x() + r.width() // 2 - s2, r.bottom()))
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
397
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
398 def __handleMask(self, maskType):
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
399 """
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
400 Private method to calculate the handle mask.
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
401
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
402 @param maskType type of the mask to be used (SnapshotRegionGrabber.FillMask or
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
403 SnapshotRegionGrabber.StrokeMask)
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
404 @return calculated mask (QRegion)
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
405 """
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
406 mask = QRegion()
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
407 for rect in self.__handles:
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
408 if maskType == SnapshotRegionGrabber.StrokeMask:
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
409 r = QRegion(rect)
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
410 mask += r.subtracted(QRegion(rect.adjusted(1, 1, -1, -1)))
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
411 else:
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
412 mask += QRegion(rect.adjusted(1, 1, -1, -1))
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
413 return mask
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
414
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
415 def __limitPointToRect(self, point, rect):
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
416 """
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
417 Private method to limit the given point to the given rectangle.
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
418
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
419 @param point point to be limited (QPoint)
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
420 @param rect rectangle the point shall be limited to (QRect)
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
421 @return limited point (QPoint)
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
422 """
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
423 q = QPoint()
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
424 if point.x() < rect.x():
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
425 q.setX(rect.x())
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
426 elif point.x() < rect.right():
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
427 q.setX(point.x())
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
428 else:
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
429 q.setX(rect.right())
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
430 if point.y() < rect.y():
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
431 q.setY(rect.y())
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
432 elif point.y() < rect.bottom():
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
433 q.setY(point.y())
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
434 else:
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
435 q.setY(rect.bottom())
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
436 return q
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
437
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
438 def __normalizeSelection(self, sel):
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
439 """
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
440 Private method to normalize the given selection.
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
441
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
442 @param sel selection to be normalized (QRect)
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
443 @return normalized selection (QRect)
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
444 """
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
445 r = QRect(sel)
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
446 if r.width() <= 0:
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
447 l = r.left()
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
448 w = r.width()
1965
96f5a76e1845 Fixed some PEP-8 related issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1778
diff changeset
449 r.setLeft(l + w - 1)
1770
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
450 r.setRight(l)
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
451 if r.height() <= 0:
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
452 t = r.top()
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
453 h = r.height()
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
454 r.setTop(t + h - 1)
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
455 r.setBottom(t)
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
456 return r
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
457
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
458 def __grabRect(self):
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
459 """
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
460 Private method to grab the selected rectangle (i.e. do the snapshot).
c17e67e69ef5 Added a tool to take screenshots (fullscreen or rectangular selection).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
461 """
1772
f325dfdc8f6b Extended the snapshot tool to allow for the selection of a screen (for multi screen systems), elliptical selection and a freehand selection.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1770
diff changeset
462 if self.__mode == SnapshotRegionGrabber.Ellipse:
f325dfdc8f6b Extended the snapshot tool to allow for the selection of a screen (for multi screen systems), elliptical selection and a freehand selection.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1770
diff changeset
463 ell = QRegion(self.__selection, QRegion.Ellipse)
f325dfdc8f6b Extended the snapshot tool to allow for the selection of a screen (for multi screen systems), elliptical selection and a freehand selection.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1770
diff changeset
464 if not ell.isEmpty():
f325dfdc8f6b Extended the snapshot tool to allow for the selection of a screen (for multi screen systems), elliptical selection and a freehand selection.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1770
diff changeset
465 self.__grabbing = True
f325dfdc8f6b Extended the snapshot tool to allow for the selection of a screen (for multi screen systems), elliptical selection and a freehand selection.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1770
diff changeset
466
f325dfdc8f6b Extended the snapshot tool to allow for the selection of a screen (for multi screen systems), elliptical selection and a freehand selection.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1770
diff changeset
467 xOffset = self.__pixmap.rect().x() - ell.boundingRect().x()
f325dfdc8f6b Extended the snapshot tool to allow for the selection of a screen (for multi screen systems), elliptical selection and a freehand selection.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1770
diff changeset
468 yOffset = self.__pixmap.rect().y() - ell.boundingRect().y()
f325dfdc8f6b Extended the snapshot tool to allow for the selection of a screen (for multi screen systems), elliptical selection and a freehand selection.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1770
diff changeset
469 translatedEll = ell.translated(xOffset, yOffset)
f325dfdc8f6b Extended the snapshot tool to allow for the selection of a screen (for multi screen systems), elliptical selection and a freehand selection.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1770
diff changeset
470
f325dfdc8f6b Extended the snapshot tool to allow for the selection of a screen (for multi screen systems), elliptical selection and a freehand selection.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1770
diff changeset
471 pixmap2 = QPixmap(ell.boundingRect().size())
f325dfdc8f6b Extended the snapshot tool to allow for the selection of a screen (for multi screen systems), elliptical selection and a freehand selection.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1770
diff changeset
472 pixmap2.fill(Qt.transparent)
f325dfdc8f6b Extended the snapshot tool to allow for the selection of a screen (for multi screen systems), elliptical selection and a freehand selection.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1770
diff changeset
473
f325dfdc8f6b Extended the snapshot tool to allow for the selection of a screen (for multi screen systems), elliptical selection and a freehand selection.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1770
diff changeset
474 pt = QPainter()
f325dfdc8f6b Extended the snapshot tool to allow for the selection of a screen (for multi screen systems), elliptical selection and a freehand selection.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1770
diff changeset
475 pt.begin(pixmap2)
f325dfdc8f6b Extended the snapshot tool to allow for the selection of a screen (for multi screen systems), elliptical selection and a freehand selection.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1770
diff changeset
476 if pt.paintEngine().hasFeature(QPaintEngine.PorterDuff):
f325dfdc8f6b Extended the snapshot tool to allow for the selection of a screen (for multi screen systems), elliptical selection and a freehand selection.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1770
diff changeset
477 pt.setRenderHints(QPainter.Antialiasing | \
f325dfdc8f6b Extended the snapshot tool to allow for the selection of a screen (for multi screen systems), elliptical selection and a freehand selection.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1770
diff changeset
478 QPainter.HighQualityAntialiasing | QPainter.SmoothPixmapTransform,
f325dfdc8f6b Extended the snapshot tool to allow for the selection of a screen (for multi screen systems), elliptical selection and a freehand selection.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1770
diff changeset
479 True)
f325dfdc8f6b Extended the snapshot tool to allow for the selection of a screen (for multi screen systems), elliptical selection and a freehand selection.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1770
diff changeset
480 pt.setBrush(Qt.black)
f325dfdc8f6b Extended the snapshot tool to allow for the selection of a screen (for multi screen systems), elliptical selection and a freehand selection.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1770
diff changeset
481 pt.setPen(QPen(QBrush(Qt.black), 0.5))
f325dfdc8f6b Extended the snapshot tool to allow for the selection of a screen (for multi screen systems), elliptical selection and a freehand selection.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1770
diff changeset
482 pt.drawEllipse(translatedEll.boundingRect())
f325dfdc8f6b Extended the snapshot tool to allow for the selection of a screen (for multi screen systems), elliptical selection and a freehand selection.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1770
diff changeset
483 pt.setCompositionMode(QPainter.CompositionMode_SourceIn)
f325dfdc8f6b Extended the snapshot tool to allow for the selection of a screen (for multi screen systems), elliptical selection and a freehand selection.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1770
diff changeset
484 else:
f325dfdc8f6b Extended the snapshot tool to allow for the selection of a screen (for multi screen systems), elliptical selection and a freehand selection.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1770
diff changeset
485 pt.setClipRegion(translatedEll)
f325dfdc8f6b Extended the snapshot tool to allow for the selection of a screen (for multi screen systems), elliptical selection and a freehand selection.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1770
diff changeset
486 pt.setCompositionMode(QPainter.CompositionMode_Source)
f325dfdc8f6b Extended the snapshot tool to allow for the selection of a screen (for multi screen systems), elliptical selection and a freehand selection.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1770
diff changeset
487
f325dfdc8f6b Extended the snapshot tool to allow for the selection of a screen (for multi screen systems), elliptical selection and a freehand selection.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1770
diff changeset
488 pt.drawPixmap(pixmap2.rect(), self.__pixmap, ell.boundingRect())
f325dfdc8f6b Extended the snapshot tool to allow for the selection of a screen (for multi screen systems), elliptical selection and a freehand selection.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1770
diff changeset
489 pt.end()
f325dfdc8f6b Extended the snapshot tool to allow for the selection of a screen (for multi screen systems), elliptical selection and a freehand selection.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1770
diff changeset
490
f325dfdc8f6b Extended the snapshot tool to allow for the selection of a screen (for multi screen systems), elliptical selection and a freehand selection.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1770
diff changeset
491 self.grabbed.emit(pixmap2)
f325dfdc8f6b Extended the snapshot tool to allow for the selection of a screen (for multi screen systems), elliptical selection and a freehand selection.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1770
diff changeset
492 else:
f325dfdc8f6b Extended the snapshot tool to allow for the selection of a screen (for multi screen systems), elliptical selection and a freehand selection.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1770
diff changeset
493 r = QRect(self.__selection)
f325dfdc8f6b Extended the snapshot tool to allow for the selection of a screen (for multi screen systems), elliptical selection and a freehand selection.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1770
diff changeset
494 if not r.isNull() and r.isValid():
f325dfdc8f6b Extended the snapshot tool to allow for the selection of a screen (for multi screen systems), elliptical selection and a freehand selection.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1770
diff changeset
495 self.__grabbing = True
f325dfdc8f6b Extended the snapshot tool to allow for the selection of a screen (for multi screen systems), elliptical selection and a freehand selection.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1770
diff changeset
496 self.grabbed.emit(self.__pixmap.copy(r))

eric ide

mercurial