summaryrefslogtreecommitdiffstats
path: root/src/backdrop.cpp
blob: 4a907e83b3cdd1bba30186465c403375819d64ee (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include "backdrop.h"

#include <QApplication>
#include <QDesktopWidget>
#include <QPainter>
#include <QPaintEvent>
#include <QPixmap>
#include <QRgb>

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();
	}
}