summaryrefslogtreecommitdiffstats
path: root/src/pixeltool
diff options
context:
space:
mode:
authorLiang Qi <liang.qi@qt.io>2016-11-24 19:37:17 +0100
committerLiang Qi <liang.qi@qt.io>2016-11-24 19:37:17 +0100
commit6f8bb3d4c5b2f19cbf161f9dfff81e86cd0e17ab (patch)
treeb5eb3f0b7ef53eb15fc86f7e79e94a5288242c92 /src/pixeltool
parent3ca53a2257f0fb4eae48e47095f6c01bd2471c06 (diff)
parent0e735daf4530f6f7972f2368535dd3cff2eeb3e3 (diff)
Merge remote-tracking branch 'origin/5.6' into 5.75.7
Diffstat (limited to 'src/pixeltool')
-rw-r--r--src/pixeltool/qpixeltool.cpp27
1 files changed, 21 insertions, 6 deletions
diff --git a/src/pixeltool/qpixeltool.cpp b/src/pixeltool/qpixeltool.cpp
index cd39bdde4..e02fa0eb8 100644
--- a/src/pixeltool/qpixeltool.cpp
+++ b/src/pixeltool/qpixeltool.cpp
@@ -51,6 +51,18 @@
QT_BEGIN_NAMESPACE
+static QPoint initialPos(const QSettings &settings, const QSize &initialSize)
+{
+ const QDesktopWidget *desktopWidget = QApplication::desktop();
+ const QPoint defaultPos = desktopWidget->availableGeometry().topLeft();
+ const QPoint savedPos =
+ settings.value(QLatin1String("position"), QVariant(defaultPos)).toPoint();
+ const int savedScreen = desktopWidget->screenNumber(savedPos);
+ return savedScreen >= 0
+ && desktopWidget->availableGeometry(savedScreen).intersects(QRect(savedPos, initialSize))
+ ? savedPos : defaultPos;
+}
+
QPixelTool::QPixelTool(QWidget *parent)
: QWidget(parent)
, m_freeze(false)
@@ -70,7 +82,7 @@ QPixelTool::QPixelTool(QWidget *parent)
m_zoom = settings.value(QLatin1String("zoom"), 4).toInt();
m_initialSize = settings.value(QLatin1String("initialSize"), QSize(250, 200)).toSize();
- move(settings.value(QLatin1String("position")).toPoint());
+ move(initialPos(settings, m_initialSize));
setMouseTracking(true);
setAttribute(Qt::WA_NoBackground);
@@ -426,11 +438,14 @@ void QPixelTool::grabScreen()
int x = mousePos.x() - w/2;
int y = mousePos.y() - h/2;
+ const QBrush darkBrush = palette().color(QPalette::Dark);
const QDesktopWidget *desktopWidget = QApplication::desktop();
-
- QScreen *screen = QGuiApplication::screens().at(desktopWidget->screenNumber(this));
- m_buffer = screen->grabWindow(desktopWidget->winId(), x, y, w, h);
-
+ if (QScreen *screen = QGuiApplication::screens().value(desktopWidget->screenNumber(this), Q_NULLPTR)) {
+ m_buffer = screen->grabWindow(desktopWidget->winId(), x, y, w, h);
+ } else {
+ m_buffer = QPixmap(w, h);
+ m_buffer.fill(darkBrush.color());
+ }
QRegion geom(x, y, w, h);
QRect screenRect;
for (int i = 0; i < desktopWidget->numScreens(); ++i)
@@ -441,7 +456,7 @@ void QPixelTool::grabScreen()
QPainter p(&m_buffer);
p.translate(-x, -y);
p.setPen(Qt::NoPen);
- p.setBrush(palette().color(QPalette::Dark));
+ p.setBrush(darkBrush);
p.drawRects(rects);
}