/* * Copyright 2008 Arthur Renato Mello * Copyright 2008 Gustavo Pichorim Boiko * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * */ #include #include #include #include #include #include #include "themesettings.h" #include "mainwidget.h" #include #include MainWidget::MainWidget(QString theme, QRect p_screenGeometry, QWidget *parent) :QWidget(parent) { setCursor(Qt::BlankCursor); setWindowFlags(Qt::SplashScreen | Qt::X11BypassWindowManagerHint | Qt::WindowStaysOnTopHint); //TODO: Check if this work with multiples monitors setGeometry(p_screenGeometry); setWindowState(Qt::WindowFullScreen); m_settings = new ThemeSettings(theme, size()); m_bg = m_settings->getBackground(); initAnimatedItems(); m_statusMap = m_settings->getStatusTexts(); statusInfo info = m_settings->getStatusInfo(); m_status = new AnimatedStatus(info.rect.topLeft(), info.rect.size(), info.font, info.color, this); XClassHint class_hint; Window win[1]; win[0] = winId(); //Make the window override redirect XSetWindowAttributes attrs; attrs.override_redirect = True; XChangeWindowAttributes(QX11Info::display(), win[0], CWOverrideRedirect, &attrs); class_hint.res_name = const_cast("ksplashx"); class_hint.res_class = const_cast("ksplashx"); XSetWMProperties(QX11Info::display(), win[0], NULL, NULL, NULL, NULL, NULL, NULL, &class_hint); show(); XSelectInput(QX11Info::display(), QX11Info::appRootWindow(), SubstructureNotifyMask); } MainWidget::~MainWidget() { } void MainWidget::initAnimatedItems() { itemsList list = m_settings->getItemsList(); for(int i = 0; i < list.count(); i++) { loadedItem item = list.at(i); m_itemsMap[item.step] = new AnimatedItem(item.pixmap.pos, item.pixmap.pixmap, this); } } void MainWidget::mouseReleaseEvent(QMouseEvent *e) { kapp->quit(); } void MainWidget::paintEvent(QPaintEvent *e) { QPainter p(this); p.drawPixmap(QPoint(0, 0), m_bg); } void MainWidget::activateState(const QString &state) { if(m_itemsMap.contains(state)) m_itemsMap[state]->startAnimation(); if(m_statusMap.contains(state)) m_status->setText(m_statusMap[state]); }