void Watcher::takeTemporarySnapshot() { QRect screenSize = QApplication::desktop()->screenGeometry(); if(lastScreenshotTimestamp.secsTo(QDateTime::currentDateTime()) > 2) { lastScreenshot = QPixmap(); #ifdef Q_OS_MAC CGRect screenRect; screenRect.origin.x = screenSize.x(); screenRect.origin.y = screenSize.y(); screenRect.size.width = screenSize.width(); screenRect.size.height = screenSize.height(); CGImageRef screenshotMac = CGWindowListCreateImage(screenRect, kCGWindowListOptionOnScreenOnly, kCGNullWindowID, kCGWindowImageDefault); #ifdef QT4 lastScreenshot = QPixmap::fromMacCGImageRef(screenshotMac); #endif CGImageRelease(screenshotMac); #endif if(lastScreenshot.isNull()) lastScreenshot = QPixmap::grabWindow(QApplication::desktop()->winId(), screenSize.x(), screenSize.y(), screenSize.width(), screenSize.height()); lastScreenshotTimestamp = QDateTime::currentDateTime(); } Global::temporaryScreenshot = lastScreenshot.toImage(); }
QPixmap OSXWindowCapture::Capture( int x, int y, int w, int h ) { CGRect captureRect = CGRectMake( x + Left(), y + Top(), w, h ); CGImageRef image = CGWindowListCreateImage( captureRect, kCGWindowListOptionIncludingWindow, mWinId, kCGWindowImageNominalResolution | kCGWindowImageBoundsIgnoreFraming ); QPixmap pixmap = QtMac::fromCGImageRef( image ); CGImageRelease( image ); return pixmap; }