📄 pageview.cpp.svn-base
字号:
{ // 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 + -