summaryrefslogblamecommitdiffstats
path: root/src/backdrop.cpp
blob: 4a907e83b3cdd1bba30186465c403375819d64ee (plain) (tree)























































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