void QModernProgressDialog::createWidgets() { setWindowTitle(tr("Progress")); setWindowIcon(QIcon()); m_wasCancel=false; label=new QLabel(this); longmessage=new QTextEdit(this); longmessage->setVisible(false); progress=new QModernProgressWidget(this); progress->setMinimumSize(QSize(48,48)); cancel=new QPushButton(tr("Cancel"), this); connect(cancel, SIGNAL(clicked()), this, SLOT(cancelClicked())); QVBoxLayout* vbl=new QVBoxLayout; setLayout(vbl); QHBoxLayout* hbl=new QHBoxLayout; hbl->addWidget(progress); hbl->addWidget(label); hbl->addStretch(); vbl->addLayout(hbl); vbl->addWidget(longmessage); hbl=new QHBoxLayout; hbl->addStretch(); hbl->addWidget(cancel); vbl->addLayout(hbl); connect(&timerDelay, SIGNAL(timeout()), this, SLOT(open())); QDesktopWidget desktopWidget; QRect desktopRect(desktopWidget.availableGeometry(desktopWidget.primaryScreen())); QRect widgetRect=rect(); move(desktopRect.center() - widgetRect.center()); }
void GLView::grabScreen( ){ if( parameterVerhalten.zustand == ParameterVerhalten::AUS ) { return; } // if( texture ) { // glDeleteTextures( 1, &texture ); // } QRect desktopRect( QGuiApplication::primaryScreen( )->availableGeometry( ) ); QPixmap pixmap_; QScreen *screen = QGuiApplication::primaryScreen( ); switch( parameterVerhalten.zustand ) { case ParameterVerhalten::AUS : { return; } case ParameterVerhalten::HORIZONTAL : { pixmap_ = screen->grabWindow( QApplication::desktop( )->winId( ), screenOnLowerSide * width( ), y( ), width( ), height( ) ); break; } case ParameterVerhalten::VERTIKAL : { pixmap_ = screen->grabWindow( QApplication::desktop( )->winId( ), x( ), desktopRect.y( ) + screenOnLowerSide * height( ), width( ), height( ) ); break; } } screenShotImage = pixmap_.toImage( ); GLView::convertToGLFormat( screenShotImage ); }
void SlideEffect::paintScreen( int mask, QRegion region, ScreenPaintData& data ) { if( mTimeLine.value() == 0 ) { effects->paintScreen( mask, region, data ); return; } /* Transformations are done by remembering starting position of the change and the progress of it, the destination is computed from the current desktop. Positions of desktops are done using their topleft corner. */ QPoint destPos = desktopRect( effects->currentDesktop() ).topLeft(); QPoint diffPos = destPos - slide_start_pos; int w = 0; int h = 0; if( effects->optionRollOverDesktops()) { w = effects->workspaceWidth(); h = effects->workspaceHeight(); // wrap around if shorter if( diffPos.x() > 0 && diffPos.x() > w / 2 ) diffPos.setX( diffPos.x() - w ); if( diffPos.x() < 0 && abs( diffPos.x()) > w / 2 ) diffPos.setX( diffPos.x() + w ); if( diffPos.y() > 0 && diffPos.y() > h / 2 ) diffPos.setY( diffPos.y() - h ); if( diffPos.y() < 0 && abs( diffPos.y()) > h / 2 ) diffPos.setY( diffPos.y() + h ); } QPoint currentPos = slide_start_pos + mTimeLine.value() * diffPos; QSize displaySize( displayWidth(), displayHeight()); QRegion currentRegion = QRect( currentPos, displaySize ); if( effects->optionRollOverDesktops()) { currentRegion |= ( currentRegion & QRect( -w, 0, w, h )).translated( w, 0 ); currentRegion |= ( currentRegion & QRect( 0, -h, w, h )).translated( 0, h ); currentRegion |= ( currentRegion & QRect( w, 0, w, h )).translated( -w, 0 ); currentRegion |= ( currentRegion & QRect( 0, h, w, h )).translated( 0, -h ); } bool do_sticky = true; for( int desktop = 1; desktop <= effects->numberOfDesktops(); ++desktop ) { QRect rect = desktopRect( desktop ); if( currentRegion.contains( rect )) // part of the desktop needs painting { painting_desktop = desktop; slide_painting_sticky = do_sticky; slide_painting_diff = rect.topLeft() - currentPos; if( effects->optionRollOverDesktops()) { if( slide_painting_diff.x() > displayWidth()) slide_painting_diff.setX( slide_painting_diff.x() - w ); if( slide_painting_diff.x() < -displayWidth()) slide_painting_diff.setX( slide_painting_diff.x() + w ); if( slide_painting_diff.y() > displayHeight()) slide_painting_diff.setY( slide_painting_diff.y() - h ); if( slide_painting_diff.y() < -displayHeight()) slide_painting_diff.setY( slide_painting_diff.y() + h ); } do_sticky = false; // paint on-all-desktop windows only once ScreenPaintData d = data; d.xTranslate += slide_painting_diff.x(); d.yTranslate += slide_painting_diff.y(); // TODO mask parts that are not visible? effects->paintScreen( mask, region, d ); } } }
void SlideEffect::desktopChanged( int old ) { if( effects->activeFullScreenEffect() && effects->activeFullScreenEffect() != this ) return; if( slide ) // old slide still in progress { QPoint diffPos = desktopRect( old ).topLeft() - slide_start_pos; int w = 0; int h = 0; if( effects->optionRollOverDesktops()) { w = effects->workspaceWidth(); h = effects->workspaceHeight(); // wrap around if shorter if( diffPos.x() > 0 && diffPos.x() > w / 2 ) diffPos.setX( diffPos.x() - w ); if( diffPos.x() < 0 && abs( diffPos.x()) > w / 2 ) diffPos.setX( diffPos.x() + w ); if( diffPos.y() > 0 && diffPos.y() > h / 2 ) diffPos.setY( diffPos.y() - h ); if( diffPos.y() < 0 && abs( diffPos.y()) > h / 2 ) diffPos.setY( diffPos.y() + h ); } QPoint currentPos = slide_start_pos + mTimeLine.value() * diffPos; QRegion currentRegion = QRect( currentPos, QSize( displayWidth(), displayHeight())); if( effects->optionRollOverDesktops()) { currentRegion |= ( currentRegion & QRect( -w, 0, w, h )).translated( w, 0 ); currentRegion |= ( currentRegion & QRect( 0, -h, w, h )).translated( 0, h ); currentRegion |= ( currentRegion & QRect( w, 0, w, h )).translated( -w, 0 ); currentRegion |= ( currentRegion & QRect( 0, h, w, h )).translated( 0, -h ); } QRect rect = desktopRect( effects->currentDesktop() ); if( currentRegion.contains( rect )) { // current position is in new current desktop (e.g. quickly changing back), // don't do full progress if( abs( currentPos.x() - rect.x()) > abs( currentPos.y() - rect.y())) mTimeLine.setProgress(1 - abs( currentPos.x() - rect.x()) / double( displayWidth())); else mTimeLine.setProgress(1 - abs( currentPos.y() - rect.y()) / double( displayHeight())); } else // current position is not on current desktop, do full progress mTimeLine.setProgress(0); diffPos = rect.topLeft() - currentPos; if( mTimeLine.value() <= 0 ) { // Compute starting point for this new move (given current and end positions) slide_start_pos = rect.topLeft() - diffPos * 1 / ( 1 - mTimeLine.value() ); } else { // at the end, stop slide = false; mTimeLine.setProgress(0); effects->setActiveFullScreenEffect( NULL ); } } else { if( effects->activeFullScreenEffect() && effects->activeFullScreenEffect() != this ) return; mTimeLine.setProgress(0); slide_start_pos = desktopRect( old ).topLeft(); slide = true; effects->setActiveFullScreenEffect( this ); } effects->addRepaintFull(); }