summaryrefslogtreecommitdiffstats
path: root/mainwidget.cpp
diff options
context:
space:
mode:
authorNicolas Lécureuil <nlecureuil@mandriva.com>2009-05-14 19:27:25 +0000
committerNicolas Lécureuil <nlecureuil@mandriva.com>2009-05-14 19:27:25 +0000
commit3f7a8b63cb4105d4ac64b5564afdcb6f00620453 (patch)
tree352c96e0b3a798275a69da50508353253077c5f0 /mainwidget.cpp
downloadsplash-3f7a8b63cb4105d4ac64b5564afdcb6f00620453.tar
splash-3f7a8b63cb4105d4ac64b5564afdcb6f00620453.tar.gz
splash-3f7a8b63cb4105d4ac64b5564afdcb6f00620453.tar.bz2
splash-3f7a8b63cb4105d4ac64b5564afdcb6f00620453.tar.xz
splash-3f7a8b63cb4105d4ac64b5564afdcb6f00620453.zip
Branch for 2009.1 and handle trunk
Diffstat (limited to 'mainwidget.cpp')
-rw-r--r--mainwidget.cpp122
1 files changed, 122 insertions, 0 deletions
diff --git a/mainwidget.cpp b/mainwidget.cpp
new file mode 100644
index 0000000..37e8094
--- /dev/null
+++ b/mainwidget.cpp
@@ -0,0 +1,122 @@
+/*
+ * Copyright 2008 Arthur Renato Mello <arthur@mandriva.com>
+ * Copyright 2008 Gustavo Pichorim Boiko <boiko@mandriva.com>
+ *
+ * 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 <QApplication>
+#include <QDesktopWidget>
+#include <QLabel>
+#include <QPainter>
+#include <QX11Info>
+
+#include <KApplication>
+
+#include "themesettings.h"
+
+#include "mainwidget.h"
+
+#include <X11/Xlib.h>
+#include <X11/Xutil.h>
+
+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<char*>("ksplashx");
+ class_hint.res_class = const_cast<char*>("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]);
+}