diff options
author | Liang Qi <liang.qi@qt.io> | 2016-11-24 19:37:17 +0100 |
---|---|---|
committer | Liang Qi <liang.qi@qt.io> | 2016-11-24 19:37:17 +0100 |
commit | 6f8bb3d4c5b2f19cbf161f9dfff81e86cd0e17ab (patch) | |
tree | b5eb3f0b7ef53eb15fc86f7e79e94a5288242c92 /src/pixeltool | |
parent | 3ca53a2257f0fb4eae48e47095f6c01bd2471c06 (diff) | |
parent | 0e735daf4530f6f7972f2368535dd3cff2eeb3e3 (diff) |
Merge remote-tracking branch 'origin/5.6' into 5.75.7
Change-Id: Ia29a9aa855aa3bfab1a26fc3671b6c5436c176c1
Diffstat (limited to 'src/pixeltool')
-rw-r--r-- | src/pixeltool/qpixeltool.cpp | 27 |
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); } |