/** * @RDE_HEADER@ * Background Widget that covers a monitor with the project image * $Id$ * $HeadURL$ * $Author$ * Created by Mike Wille, SLSE, 2016-05-05 */ #include "lts_background_widget.h" #include #include #include #ifdef Q_OS_WIN #include #endif namespace LtsWidgets { LtsBackgroundWidget::LtsBackgroundWidget(QWidget *parent) : QDialog(parent) , m_isUltraWide(false) { setMouseTracking(true); // register mouse movement setWindowFlags(windowFlags() | Qt::FramelessWindowHint /*| Qt::WindowStaysOnBottomHint*/); setWindowTitle(QStringLiteral("Splash")); setBackground(); } void LtsBackgroundWidget::setBackground() { static const auto backgroundFiles = { QStringLiteral(":/project/background.png"), QStringLiteral(":/project/background.jpg"), }; static const auto backgroundFilesWide = { QStringLiteral(":/project/background_wide.png"), QStringLiteral(":/project/background_wide.jpg"), }; m_pixmap = QPixmap(); for (const QString &f : m_isUltraWide ? backgroundFilesWide : backgroundFiles) { if (!QFile::exists(f)) continue; m_pixmap = QPixmap(f); if (m_pixmap.isNull()) continue; break; } if (m_pixmap.isNull()) { if (m_isUltraWide) { m_isUltraWide = false; setBackground(); } else { qWarning() << "BackgroundWidget::c_tor: file missing or is not a valid image ':/project/background.png'"; } } } void LtsBackgroundWidget::setUltraWide(bool set) { if (set == m_isUltraWide) // do not set / unset ultra wide if it's already set to specified state return; m_isUltraWide = set; setBackground(); update(); // force redraw on next event loop } void LtsBackgroundWidget::resizeEvent(QResizeEvent *e) { setUltraWide(width() > 3000); QDialog::resizeEvent(e); } void LtsBackgroundWidget::paintEvent(QPaintEvent *e) { if (!m_pixmap.isNull()) { QPainter painter(this); painter.setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform); painter.drawPixmap(0, 0, width(), height(), m_pixmap); // draw project background on login splash } QDialog::paintEvent(e); } bool LtsBackgroundWidget::event(QEvent *e) { if (e->type() == QEvent::KeyPress || // respect typing into textfields e->type() == QEvent::MouseButtonPress || e->type() == QEvent::MouseButtonRelease || e->type() == QEvent::MouseMove) { //qWarning() << "BGW operator action!"; emit signalOperatorAction(); e->ignore(); return true; } return QDialog::event(e); } void LtsBackgroundWidget::showFullScreen() { //qWarning() << "show fullscreen !"; #ifdef Q_OS_WIN winId(); // make sure windowHandle() is not a nullptr QWindowsWindowFunctions::setHasBorderInFullScreen(windowHandle(), true); #endif QDialog::showFullScreen(); raise(); // as this is a widget for the background, it has to be raised, but only once at startup } void LtsBackgroundWidget::closeEvent(QCloseEvent *e) { #ifdef DEVEL deleteLater(); #else e->ignore(); #endif } } // namespace LtsWidgets