void EmergencyWindowManager::addWindow(Window* win) { if (win->type() != Window::Type_Emergency) return; if (m_emergencyWindow) { luna_critical(s_logChannel, "Only one emergency window is allowed at a time"); WebAppMgrProxy::instance()->closeWindow(win); return; } setVisible(true); m_emergencyWindow = win; static_cast<CardWindow*>(win)->focusEvent(true); IMEController::instance()->setClient(static_cast<HostWindow*>(win)); m_emergencyWindow->setParentItem(this); m_emergencyWindow->stackBefore(m_cornerContainer); m_emergencyWindow->setOpacity(kFadedOpacity); m_emergencyWindow->setVisible(true); static_cast<CardWindow*>(m_emergencyWindow)->setPaintCompositionMode(QPainter::CompositionMode_SourceOver); static_cast<CardWindow*>(m_emergencyWindow)->setBoundingRect(m_winRect.width(), m_winRect.height()); setPosTopLeft(win, m_winRect.x(), m_winRect.y()); positionCornerWindows(); showCornerWindows(); SystemUiController::instance()->setEmergencyMode(true); if (static_cast<CardWindow*>(m_emergencyWindow)->fullScreen()) SystemUiController::instance()->hideStatusBarAndNotificationArea(); else { SystemUiController::instance()->showStatusBarAndNotificationArea(); } m_opacityAnimPtr = new QPropertyAnimation(); m_opacityAnimPtr->setPropertyName("opacity"); m_opacityAnimPtr->setEasingCurve(QEasingCurve::Linear); m_opacityAnimPtr->setTargetObject(m_emergencyWindow); m_opacityAnimPtr->setDuration(kFadeAnimDuration); m_opacityAnimPtr->setEndValue(1.0); connect(m_opacityAnimPtr, SIGNAL(finished()), SLOT(fadeAnimationFinished())); m_opacityAnimPtr->start(QAbstractAnimation::DeleteWhenStopped); update(); }
void MenuWindowManager::slotPositiveSpaceChanged(const QRect& r) { m_positiveSpace = r; positionCornerWindows(r); Q_FOREACH(Window* w, m_winArray) { if (w) setPosTopLeft(w, r.x(), r.y()); } if (m_statusBar) { setPosTopLeft(m_statusBar, 0, r.y() - m_statusBar->boundingRect().height()); } update(); }
void MenuWindowManager::init() { if(m_statusBar) { m_statusBar->init(); m_statusBar->setParentItem(this); m_statusBar->setPos(0, m_boundingRect.y() + m_statusBar->boundingRect().height() / 2); m_statusBar->setZValue(100); } if(m_statusBar && m_sysMenu) { int offset = 0; m_sysMenu->init(); offset = m_sysMenu->getRightEdgeOffset(); m_statusBar->setSystemMenuObject(m_sysMenu); m_sysMenu->setPos(boundingRect().x() + boundingRect().width() - m_sysMenu->boundingRect().width()/2 + offset, boundingRect().y() + m_statusBar->boundingRect().height() + m_sysMenu->boundingRect().height()/2); } if(!Settings::LunaSettings()->tabletUi) { m_cornerContainer = new GraphicsItemContainer(m_boundingRect.width(), m_boundingRect.height()); QSize dims = RoundedCorners::topLeft().size(); m_corners[kTopLeftWindowIndex] = new QGraphicsPixmapItem(RoundedCorners::topLeft(), m_cornerContainer); m_corners[kTopRightWindowIndex] = new QGraphicsPixmapItem(RoundedCorners::topRight(), m_cornerContainer); m_corners[kBottomLeftWindowIndex] = new QGraphicsPixmapItem(RoundedCorners::bottomLeft(), m_cornerContainer); m_corners[kBottomRightWindowIndex] = new QGraphicsPixmapItem(RoundedCorners::bottomRight(), m_cornerContainer); for (int i=kTopLeftWindowIndex; i <= kBottomRightWindowIndex; i++) { m_corners[i]->setOffset(-dims.width()/2, -dims.height()/2); // disable mouse events for the corners m_corners[i]->setAcceptedMouseButtons(0); } m_cornerContainer->setParentItem(this); positionCornerWindows(m_positiveSpace); } }
void EmergencyWindowManager::slotPositiveSpaceChanged(const QRect& r) { // The emergency window manager always covers the whole display but limits // the size of the active emergency window to be either full screen or // screen height - top positive space int positiveSpaceTopPadding = Settings::LunaSettings()->positiveSpaceTopPadding; int y = qMin(r.y(), positiveSpaceTopPadding); int w = SystemUiController::instance()->currentUiWidth() - r.x(); int h = SystemUiController::instance()->currentUiHeight() - y; m_winRect.setX(qMin(0, r.x())); m_winRect.setY(y); m_winRect.setHeight(h); m_winRect.setWidth(w); positionCornerWindows(); if (m_emergencyWindow) { setPosTopLeft(m_emergencyWindow, m_winRect.x(), m_winRect.y()); static_cast<CardWindow*>(m_emergencyWindow)->resizeEvent(w, h); } }