#include "backdrop.h" #include #include #include #include #include #include Backdrop::Backdrop() : QWidget(NULL), screenshot(NULL), mainWindow(NULL) { QPixmap shot = QPixmap::grabWindow(QApplication::desktop()->winId()); if (!shot.isNull() && shot.height() > 0) { QImage img = shot.toImage(); if (img.format() != QImage::Format_RGB32) { img = img.convertToFormat(QImage::Format_RGB32); } for (int i = 0; i < img.height(); ++i) { uchar *line = img.scanLine(i); if (line == NULL) continue; QRgb *rgb = (QRgb*)line; for (int x = 0; x < img.width(); ++x) { const int val = (qRed(*rgb)*11 + qGreen(*rgb)*16 + qBlue(*rgb)*5) / 32; *rgb = qRgb(val, val, val); rgb++; } } shot = QPixmap::fromImage(img); } screenshot = new QPixmap(shot); this->resize(screenshot->width(), screenshot->height()); this->setWindowFlags(Qt::Tool | Qt::CustomizeWindowHint | Qt::FramelessWindowHint); } Backdrop::~Backdrop() { delete screenshot; } void Backdrop::paintEvent(QPaintEvent * event) { QPainter p(this); p.drawPixmap(event->rect(), *screenshot, event->rect()); } void Backdrop::mouseReleaseEvent(QMouseEvent * event) { if (mainWindow != NULL) { mainWindow->raise(); mainWindow->activateWindow(); } }