⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 presentationwidget.cpp.svn-base

📁 okular
💻 SVN-BASE
📖 第 1 页 / 共 4 页
字号:
    pixmapPainter.setFont( f );    pixmapPainter.setPen( 0xFF );    // use a little offset to prettify output    pixmapPainter.drawText( 2, 2, side, side, Qt::AlignCenter, QString::number( m_frameIndex + 1 ) );    // end drawing pixmap and halve image    pixmapPainter.end();    QImage image( doublePixmap.toImage().scaled( side / 2, side / 2, Qt::IgnoreAspectRatio, Qt::SmoothTransformation ) );    image = image.convertToFormat( QImage::Format_ARGB32 );    // draw circular shadow using the same technique    doublePixmap.fill( Qt::black );    pixmapPainter.begin( &doublePixmap );    pixmapPainter.setPen( 0x40 );    pixmapPainter.setBrush( QColor( 0x80 ) );    pixmapPainter.drawEllipse( 0, 0, side, side );    pixmapPainter.end();    QImage shadow( doublePixmap.toImage().scaled( side / 2, side / 2, Qt::IgnoreAspectRatio, Qt::SmoothTransformation ) );    // generate a 2 colors pixmap using mixing shadow (made with highlight color)    // and image (made with highlightedText color)    QPalette pal = palette();    QColor color = pal.color( QPalette::Active, QPalette::HighlightedText );    int red = color.red(), green = color.green(), blue = color.blue();    color = pal.color( QPalette::Active, QPalette::Highlight );    int sRed = color.red(), sGreen = color.green(), sBlue = color.blue();    // pointers    unsigned int * data = (unsigned int *)image.bits(),                 * shadowData = (unsigned int *)shadow.bits(),                 pixels = image.width() * image.height();    // cache data (reduce computation time to 26%!)    int c1 = -1, c2 = -1, cR = 0, cG = 0, cB = 0, cA = 0;    // foreach pixel    for( unsigned int i = 0; i < pixels; ++i )    {        // alpha for shadow and image        int shadowAlpha = shadowData[i] & 0xFF,            srcAlpha = data[i] & 0xFF;        // cache values        if ( srcAlpha != c1 || shadowAlpha != c2 )        {            c1 = srcAlpha;            c2 = shadowAlpha;            // fuse color components and alpha value of image over shadow            data[i] = qRgba(                cR = qt_div255( srcAlpha * red   + (255 - srcAlpha) * sRed ),                cG = qt_div255( srcAlpha * green + (255 - srcAlpha) * sGreen ),                cB = qt_div255( srcAlpha * blue  + (255 - srcAlpha) * sBlue ),                cA = qt_div255( srcAlpha * srcAlpha + (255 - srcAlpha) * shadowAlpha )            );        }        else            data[i] = qRgba( cR, cG, cB, cA );    }    m_lastRenderedOverlay = QPixmap::fromImage( image );    // start the autohide timer    repaint( m_overlayGeometry ); // toggle with next line    //update( m_overlayGeometry );    m_overlayHideTimer->start( 2500 );#endif}void PresentationWidget::slotNextPage(){    // loop when configured    if ( m_frameIndex == (int)m_frames.count() - 1 && KpdfSettings::slidesLoop() )        m_frameIndex = -1;    if ( m_frameIndex < (int)m_frames.count() - 1 )    {        // go to next page        changePage( m_frameIndex + 1 );        // auto advance to the next page if set        if ( KpdfSettings::slidesAdvance() )            QTimer::singleShot( KpdfSettings::slidesAdvanceTime() * 1000, this, SLOT( slotNextPage() ) );    }    else    {#ifdef ENABLE_PROGRESS_OVERLAY        if ( KpdfSettings::slidesShowProgress() )            generateOverlay();#endif        if ( m_transitionTimer->isActive() )        {            m_transitionTimer->stop();            update();        }    }    // we need the setFocus() call here to let KCursor::autoHide() work correctly    setFocus();}void PresentationWidget::slotPrevPage(){    if ( m_frameIndex > 0 )    {        // go to previous page        changePage( m_frameIndex - 1 );        // auto advance to the next page if set        if ( KpdfSettings::slidesAdvance() )            QTimer::singleShot( KpdfSettings::slidesAdvanceTime() * 1000, this, SLOT( slotNextPage() ) );    }    else    {#ifdef ENABLE_PROGRESS_OVERLAY        if ( KpdfSettings::slidesShowProgress() )            generateOverlay();#endif        if ( m_transitionTimer->isActive() )        {            m_transitionTimer->stop();            update();        }    }}void PresentationWidget::slotFirstPage(){    changePage( 0 );}void PresentationWidget::slotLastPage(){    changePage( (int)m_frames.count() - 1 );}void PresentationWidget::slotHideOverlay(){    QRect geom( m_overlayGeometry );    m_overlayGeometry.setCoords( 0, 0, -1, -1 );    update( geom );}void PresentationWidget::slotTransitionStep(){    if ( m_transitionRects.empty() )    {        // it's better to fix the transition to cover the whole screen than        // enabling the following line that wastes cpu for nothing        //update();        return;    }    for ( int i = 0; i < m_transitionMul && !m_transitionRects.empty(); i++ )    {        update( m_transitionRects.first() );        m_transitionRects.pop_front();    }    m_transitionTimer->start( m_transitionDelay );}void PresentationWidget::slotDelayedEvents(){  // inform user on how to exit from presentation mode  KMessageBox::information( this, i18n("There are two ways of exiting presentation mode, you can press either ESC key or click with the quit button that appears when placing the mouse in the top-right corner. Of course you can cycle windows (Alt+TAB by default)"), QString::null, "presentationInfo" );}void PresentationWidget::slotPageChanged(){    bool ok = true;    int p = m_pagesEdit->text().toInt( &ok );    if ( !ok )        return;    changePage( p - 1 );}const KPDFPageTransition PresentationWidget::defaultTransition() const{    return defaultTransition( KpdfSettings::slidesTransition() );}const KPDFPageTransition PresentationWidget::defaultTransition( int type ) const{    switch ( type )    {        case KpdfSettings::EnumSlidesTransition::BlindsHorizontal:        {            KPDFPageTransition transition( KPDFPageTransition::Blinds );            transition.setAlignment( KPDFPageTransition::Horizontal );            return transition;            break;        }        case KpdfSettings::EnumSlidesTransition::BlindsVertical:        {            KPDFPageTransition transition( KPDFPageTransition::Blinds );            transition.setAlignment( KPDFPageTransition::Vertical );            return transition;            break;        }        case KpdfSettings::EnumSlidesTransition::BoxIn:        {            KPDFPageTransition transition( KPDFPageTransition::Box );            transition.setDirection( KPDFPageTransition::Inward );            return transition;            break;        }        case KpdfSettings::EnumSlidesTransition::BoxOut:        {            KPDFPageTransition transition( KPDFPageTransition::Box );            transition.setDirection( KPDFPageTransition::Outward );            return transition;            break;        }        case KpdfSettings::EnumSlidesTransition::Dissolve:        {            return KPDFPageTransition( KPDFPageTransition::Dissolve );            break;        }        case KpdfSettings::EnumSlidesTransition::GlitterDown:        {            KPDFPageTransition transition( KPDFPageTransition::Glitter );            transition.setAngle( 270 );            return transition;            break;        }        case KpdfSettings::EnumSlidesTransition::GlitterRight:        {            KPDFPageTransition transition( KPDFPageTransition::Glitter );            transition.setAngle( 0 );            return transition;            break;        }        case KpdfSettings::EnumSlidesTransition::GlitterRightDown:        {            KPDFPageTransition transition( KPDFPageTransition::Glitter );            transition.setAngle( 315 );            return transition;            break;        }        case KpdfSettings::EnumSlidesTransition::Random:        {            return defaultTransition( KRandom::random() % 18 );            break;        }        case KpdfSettings::EnumSlidesTransition::SplitHorizontalIn:        {            KPDFPageTransition transition( KPDFPageTransition::Split );            transition.setAlignment( KPDFPageTransition::Horizontal );            transition.setDirection( KPDFPageTransition::Inward );            return transition;            break;        }        case KpdfSettings::EnumSlidesTransition::SplitHorizontalOut:        {            KPDFPageTransition transition( KPDFPageTransition::Split );            transition.setAlignment( KPDFPageTransition::Horizontal );            transition.setDirection( KPDFPageTransition::Outward );            return transition;            break;        }        case KpdfSettings::EnumSlidesTransition::SplitVerticalIn:        {            KPDFPageTransition transition( KPDFPageTransition::Split );            transition.setAlignment( KPDFPageTransition::Vertical );            transition.setDirection( KPDFPageTransition::Inward );            return transition;            break;        }        case KpdfSettings::EnumSlidesTransition::SplitVerticalOut:        {            KPDFPageTransition transition( KPDFPageTransition::Split );            transition.setAlignment( KPDFPageTransition::Vertical );            transition.setDirection( KPDFPageTransition::Outward );            return transition;            break;        }        case KpdfSettings::EnumSlidesTransition::WipeDown:        {            KPDFPageTransition transition( KPDFPageTransition::Wipe );            transition.setAngle( 270 );            return transition;            break;        }        case KpdfSettings::EnumSlidesTransition::WipeRight:        {            KPDFPageTransition transition( KPDFPageTransition::Wipe );            transition.setAngle( 0 );            return transition;            break;        }        case KpdfSettings::EnumSlidesTransition::WipeLeft:        {            KPDFPageTransition transition( KPDFPageTransition::Wipe );            transition.setAngle( 180 );            return transition;            break;        }        case KpdfSettings::EnumSlidesTransition::WipeUp:        {            KPDFPageTransition transition( KPDFPageTransition::Wipe );            transition.setAngle( 90 );            return transition;            break;        }        case KpdfSettings::EnumSlidesTransition::Replace:        default:            return KPDFPageTransition( KPDFPageTransition::Replace );            break;    }    // should not happen, just make gcc happy    return KPDFPageTransition();}/** ONLY the TRANSITIONS GENERATION function from here on **/void PresentationWidget::initTransition( const KPDFPageTransition *transition ){    // if it's just a 'replace' transition, repaint the screen    if ( transition->type() == KPDFPageTransition::Replace )    {        update();        return;    }    const bool isInward = transition->direction() == KPDFPageTransition::Inward;    const bool isHorizontal = transition->alignment() == KPDFPageTransition::Horizontal;    const float totalTime = transition->duration();    m_transitionRects.clear();    switch( transition->type() )    {            // split: horizontal / vertical and inward / outward        case KPDFPageTransition::Split:        {            const int steps = isHorizontal ? 100 : 75;            if ( isHorizontal )            {                if ( isInward )                {                    int xPosition = 0;                    for ( int i = 0; i < steps; i++ )                    {                        int xNext = ((i + 1) * m_width) / (2 * steps);                        m_transitionRects.push_back( QRect( xPosition, 0, xNext - xPosition, m_height ) );                        m_transitionRects.push_back( QRect( m_width - xNext, 0, xNext - xPosition, m_height ) );

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -