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

📄 pageview.cpp.svn-base

📁 okular
💻 SVN-BASE
📖 第 1 页 / 共 5 页
字号:
{    // don't perform any mouse action when no document is shown    if ( d->items.isEmpty() )        return;    // don't perform any mouse action when viewport is autoscrolling    if ( d->viewportMoveActive )        return;    // if holding mouse mid button, perform zoom    if ( d->mouseMidZooming && (e->state() & Qt::MidButton) )    {        int mouseY = e->globalPos().y();        int deltaY = d->mouseMidLastY - mouseY;        // wrap mouse from top to bottom        QRect mouseContainer = KGlobalSettings::desktopGeometry( this );        if ( mouseY <= mouseContainer.top() + 4 &&             d->zoomFactor < 3.99 )        {            mouseY = mouseContainer.bottom() - 5;            QCursor::setPos( e->globalPos().x(), mouseY );        }        // wrap mouse from bottom to top        else if ( mouseY >= mouseContainer.bottom() - 4 &&                  d->zoomFactor > 0.11 )        {            mouseY = mouseContainer.top() + 5;            QCursor::setPos( e->globalPos().x(), mouseY );        }        // remember last position        d->mouseMidLastY = mouseY;        // update zoom level, perform zoom and redraw        if ( deltaY )        {            d->zoomFactor *= ( 1.0 + ( (double)deltaY / 500.0 ) );            updateZoom( ZoomRefreshCurrent );            viewport()->repaint();        }        return;    }    // if we're editing an annotation, dispatch event to it    if ( d->annotator && d->annotator->routeEvents() )    {        PageViewItem * pageItem = pickItemOnPoint( e->x(), e->y() );        d->annotator->routeEvent( e, pageItem );        return;    }    bool leftButton = e->state() & Qt::LeftButton,         rightButton = e->state() & Qt::RightButton;    switch ( d->mouseMode )    {        case MouseNormal:            if ( leftButton )            {                // drag page                if ( !d->mouseGrabPos.isNull() )                {                    QPoint mousePos = e->globalPos();                    QPoint delta = d->mouseGrabPos - mousePos;                    // wrap mouse from top to bottom                    QRect mouseContainer = KGlobalSettings::desktopGeometry( this );                    if ( mousePos.y() <= mouseContainer.top() + 4 &&                         verticalScrollBar()->value() < verticalScrollBar()->maximum() - 10 )                    {                        mousePos.setY( mouseContainer.bottom() - 5 );                        QCursor::setPos( mousePos );                    }                    // wrap mouse from bottom to top                    else if ( mousePos.y() >= mouseContainer.bottom() - 4 &&                              verticalScrollBar()->value() > 10 )                    {                        mousePos.setY( mouseContainer.top() + 5 );                        QCursor::setPos( mousePos );                    }                    // remember last position                    d->mouseGrabPos = mousePos;                    // scroll page by position increment                    scrollBy( delta.x(), delta.y() );                }            }            else if ( rightButton && !d->mousePressPos.isNull() )            {                // if mouse moves 5 px away from the press point, do 'textselection'                int deltaX = e->x() - d->mouseSelectPos.x(),                  deltaY = e->y() - d->mouseSelectPos.y();                if ( d->document->supportsSearching() && ( deltaX > 5 || deltaX < -5 || deltaY > 5 || deltaY < -5 ) )                {                    PageViewItem * currentItem = d->items[ qMax( 0, (int)d->document->currentPage() ) ];//                     PageViewItem* item=pickItemOnPoint(e->x(),e->y());                    const KPDFPage * kpdfPage = currentItem->page();                    // build a proper rectangle (make sure left/top is to the left of right/bottom)//                     QRect rect (d->mouseSelectPos,e->pos());//                     rect=rect.normalize();//                                         QRect vRect = currentItem->geometry();//                     kDebug() << "viewport " << vRect << endl;//                     kDebug() << "selection (UN) " << rect << endl;//                     // move selection area over to relevant viewport//                     rect.moveBy(-vRect.left(),-vRect.top()); //                     kDebug() << "selection (MV) " << rect << endl;                    // clip to viewport//                     rect &= vRect;//                     kDebug() << "selection (CL) " << rect << endl;//                     FIXME: width and height are greater by 1 then the selection.//                     rect.addCoords(1,1,-1,-1);                                                            if ( !kpdfPage->hasSearchPage() )                    	 d->document->requestTextPage( kpdfPage->number() );                    NormalizedPoint startCursor(d->mouseSelectPos.x()-vRect.left(),d->mouseSelectPos.y()-vRect.top(),                                vRect.width(), vRect.height());                    NormalizedPoint endCursor(e->x()-vRect.left(),e->y()-vRect.top(),vRect.width(), vRect.height());                    if ( ! d->mouseTextSelectionInfo )                      d->mouseTextSelectionInfo=new TextSelection(startCursor,endCursor);                    else                      d->mouseTextSelectionInfo->end(endCursor);		    RegularAreaRect * selectionArea=kpdfPage->getTextArea(d->mouseTextSelectionInfo);                    kWarning () << "text areas: " << selectionArea->count() << endl;                    if ( selectionArea->count() > 0 )                    {                       QColor selColor = palette().color( QPalette::Active, QPalette::Highlight );                      textSelection(selectionArea->geometry(vRect.width(),vRect.height(),vRect.left(),vRect.top())                          ,selColor);                    }                                        delete selectionArea;                    break;                }            }            else            {                // only hovering the page, so update the cursor                updateCursor( e->pos() );            }            break;        case MouseZoom:        case MouseSelect:            // set second corner of selection            // TODO: does this condition make sense?            if ( d->mouseSelecting || (d->mouseSelecting && d->aPrevAction) )                selectionEndPoint( e->x(), e->y() );            break;    }}}void PageView::contentsMousePressEvent( QMouseEvent * e ){if ( d->document->handleEvent( e ) ){    // don't perform any mouse action when no document is shown    if ( d->items.isEmpty() )        return;    // if performing a selection or dyn zooming, disable mouse press    if ( d->mouseSelecting || d->mouseMidZooming || d->viewportMoveActive )        return;    // if the page is scrolling, stop it    if ( d->autoScrollTimer )    {        d->scrollIncrement = 0;        d->autoScrollTimer->stop();    }    // if pressing mid mouse button while not doing other things, begin 'continuous zoom' mode    if ( e->button() == Qt::MidButton )    {        d->mouseMidZooming = true;        d->mouseMidLastY = e->globalPos().y();        setCursor( Qt::SizeVerCursor );        return;    }    // if we're editing an annotation, dispatch event to it    if ( d->annotator && d->annotator->routeEvents() )    {        PageViewItem * pageItem = pickItemOnPoint( e->x(), e->y() );        d->annotator->routeEvent( e, pageItem );        return;    }    // update press / 'start drag' mouse position    d->mousePressPos = e->globalPos();    // handle mode dependant mouse press actions    bool leftButton = e->button() & Qt::LeftButton,         rightButton = e->button() & Qt::RightButton;        //   Not sure we should erase the selection when clicking with left.     if ( !(rightButton && d->mouseMode==MouseNormal) && d->mouseTextSelectionPainted )       textSelectionClear();        switch ( d->mouseMode )    {        case MouseNormal:   // drag start / click / link following            if ( leftButton )            {                d->mouseGrabPos = d->mouseOnRect ? QPoint() : d->mousePressPos;                if ( !d->mouseOnRect )                    setCursor( Qt::SizeAllCursor );            }            else if (rightButton)              d->mouseSelectPos=e->pos() ; // just check            break;        case MouseZoom:     // set first corner of the zoom rect            if ( leftButton )                selectionStart( e->x(), e->y(), palette().color( QPalette::Active, QPalette::Highlight ), false );            else if ( rightButton )                updateZoom( ZoomOut );            break;        case MouseSelect:   // set first corner of the selection rect//             if ( leftButton )//             {                QColor selColor = palette().color( QPalette::Active, QPalette::Highlight ).light( 120 );                selectionStart( e->x(), e->y(), selColor, false );//             }            break;    }}}void PageView::contentsMouseReleaseEvent( QMouseEvent * e ){if (d->document->handleEvent( e ) ){    // don't perform any mouse action when no document is shown..    if ( d->items.isEmpty() )    {        // ..except for right Clicks (emitted even it viewport is empty)        if ( e->button() == Qt::RightButton )            emit rightClick( 0, e->globalPos() );        return;    }    // don't perform any mouse action when viewport is autoscrolling    if ( d->viewportMoveActive )        return;    // handle mode indepent mid buttom zoom    if ( d->mouseMidZooming && (e->button() == Qt::MidButton) )    {        d->mouseMidZooming = false;        // request pixmaps since it was disabled during drag        slotRequestVisiblePixmaps();        // the cursor may now be over a link.. update it        updateCursor( e->pos() );        return;    }    //specially, if rightClick on exist annotation,popup a menu    if(e->button() == Qt::RightButton && d->mouseMode != MouseZoom)    {        PageViewItem * pageItem = pickItemOnPoint( e->x(), e->y() );        // find out normalized mouse coords inside current item        const QRect & itemRect = pageItem->geometry();        double nX = (double)(e->x() - itemRect.left()) / itemRect.width();        double nY = (double)(e->y() - itemRect.top()) / itemRect.height();        Annotation * ann=PageViewAnnotator::getAnnotationbyPos(pageItem->page(),nX,nY);        if(ann)        {            KMenu menu( this );            QAction *popoutWindow=0, *deleteNote=0, *showProperties=0;            menu.addTitle( i18n("Annotation"));        //    if(ann->window.flags & Annotation::Hidden)                popoutWindow = menu.addAction( SmallIconSet("comment"), i18n( "&Open Pop-up Note" ) );        //    else        //        popoutWindow = menu.addAction( SmallIconSet("comment"), i18n( "&Close Pop-up Note" ) );            deleteNote = menu.addAction( SmallIconSet("remove"), i18n( "&Delete" ) );            showProperties = menu.addAction( SmallIconSet("thumbnail"), i18n( "&Properties..." ) );            QAction *choice = menu.exec( e->globalPos() );        // check if the user really selected an action            if ( choice )            {                if ( choice == popoutWindow)                {                 //   ann->window.flags ^= Annotation::Hidden;                    this->setAnnotsWindow(ann);                }                if(choice==deleteNote)                {                    kDebug()<<"astario: select deleteNote"<<endl;                    //find and close the annotwindow                    foreach(AnnotWindow* annwnd, d->m_annowindows)                    {                        if(ann==annwnd->m_annot)                        {                            delete annwnd;                            break;                        }                    }                    d->document->removePageAnnotation(pageItem->page()->number(),ann);                    kDebug()<<"astario: deleted Note"<<endl;                }                if(choice==showProperties)                {                    kDebug()<<"astario: select showProperties"<<endl;                    AnnotsPropertiesDialog propdialog( this, ann );                    propdialog.exec();                }            }        return;        }    }    // if we're editing an annotation, dispatch event to it    if ( d->annotator && d->annotator->routeEvents() )    {        PageViewItem * pageItem = pickItemOnPoint( e->x(), e->y() );        d->annotator->routeEvent( e, pageItem );        return;    }    bool leftButton = e->buttons() & Qt::LeftButton,         rightButton = e->buttons() & Qt::RightButton;    switch ( d->mouseMode )    {        case MouseNormal:{            // return the cursor to its normal state after dragging

⌨️ 快捷键说明

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