Changeset View
Changeset View
Standalone View
Standalone View
ui/pageview.cpp
Show First 20 Lines • Show All 1325 Lines • ▼ Show 20 Line(s) | 1325 | #ifdef PAGEVIEW_DEBUG | |||
---|---|---|---|---|---|
1326 | qCDebug(OkularUiDebug) << "document viewport changed"; | 1326 | qCDebug(OkularUiDebug) << "document viewport changed"; | ||
1327 | #endif | 1327 | #endif | ||
1328 | // relayout in "Single Pages" mode or if a relayout is pending | 1328 | // relayout in "Single Pages" mode or if a relayout is pending | ||
1329 | d->blockPixmapsRequest = true; | 1329 | d->blockPixmapsRequest = true; | ||
1330 | if ( !Okular::Settings::viewContinuous() || d->dirtyLayout ) | 1330 | if ( !Okular::Settings::viewContinuous() || d->dirtyLayout ) | ||
1331 | slotRelayoutPages(); | 1331 | slotRelayoutPages(); | ||
1332 | 1332 | | |||
1333 | // restore viewport center or use default {x-center,v-top} alignment | 1333 | // restore viewport center or use default {x-center,v-top} alignment | ||
1334 | const QRect & r = item->croppedGeometry(); | 1334 | const QPoint centerCoord = viewportToContentArea( vp ); | ||
aacid: const | |||||
1335 | int newCenterX = r.left(), | | |||
1336 | newCenterY = r.top(); | | |||
1337 | if ( vp.rePos.enabled ) | | |||
1338 | { | | |||
1339 | if ( vp.rePos.pos == Okular::DocumentViewport::Center ) | | |||
1340 | { | | |||
1341 | newCenterX += (int)( normClamp( vp.rePos.normalizedX, 0.5 ) * (double)r.width() ); | | |||
1342 | newCenterY += (int)( normClamp( vp.rePos.normalizedY, 0.0 ) * (double)r.height() ); | | |||
1343 | } | | |||
1344 | else | | |||
1345 | { | | |||
1346 | // TopLeft | | |||
1347 | newCenterX += (int)( normClamp( vp.rePos.normalizedX, 0.0 ) * (double)r.width() + viewport()->width() / 2 ); | | |||
1348 | newCenterY += (int)( normClamp( vp.rePos.normalizedY, 0.0 ) * (double)r.height() + viewport()->height() / 2 ); | | |||
1349 | } | | |||
1350 | } | | |||
1351 | else | | |||
1352 | { | | |||
1353 | newCenterX += r.width() / 2; | | |||
1354 | newCenterY += viewport()->height() / 2 - 10; | | |||
1355 | } | | |||
1356 | 1335 | | |||
1357 | // if smooth movement requested, setup parameters and start it | 1336 | // if smooth movement requested, setup parameters and start it | ||
1358 | if ( smoothMove ) | 1337 | if ( smoothMove ) | ||
1359 | { | 1338 | { | ||
1360 | d->viewportMoveActive = true; | 1339 | d->viewportMoveActive = true; | ||
1361 | d->viewportMoveTime.start(); | 1340 | d->viewportMoveTime.start(); | ||
1362 | d->viewportMoveDest.setX( newCenterX ); | 1341 | d->viewportMoveDest.setX( centerCoord.x() ); | ||
1363 | d->viewportMoveDest.setY( newCenterY ); | 1342 | d->viewportMoveDest.setY( centerCoord.y() ); | ||
1364 | if ( !d->viewportMoveTimer ) | 1343 | if ( !d->viewportMoveTimer ) | ||
1365 | { | 1344 | { | ||
1366 | d->viewportMoveTimer = new QTimer( this ); | 1345 | d->viewportMoveTimer = new QTimer( this ); | ||
1367 | connect( d->viewportMoveTimer, &QTimer::timeout, | 1346 | connect( d->viewportMoveTimer, &QTimer::timeout, | ||
1368 | this, &PageView::slotMoveViewport ); | 1347 | this, &PageView::slotMoveViewport ); | ||
1369 | } | 1348 | } | ||
1370 | d->viewportMoveTimer->start( 25 ); | 1349 | d->viewportMoveTimer->start( 25 ); | ||
1371 | verticalScrollBar()->setEnabled( false ); | 1350 | verticalScrollBar()->setEnabled( false ); | ||
1372 | horizontalScrollBar()->setEnabled( false ); | 1351 | horizontalScrollBar()->setEnabled( false ); | ||
1373 | } | 1352 | } | ||
1374 | else | 1353 | else | ||
1375 | center( newCenterX, newCenterY ); | 1354 | center( centerCoord.x(), centerCoord.y() ); | ||
1376 | d->blockPixmapsRequest = false; | 1355 | d->blockPixmapsRequest = false; | ||
1377 | 1356 | | |||
1378 | // request visible pixmaps in the current viewport and recompute it | 1357 | // request visible pixmaps in the current viewport and recompute it | ||
1379 | slotRequestVisiblePixmaps(); | 1358 | slotRequestVisiblePixmaps(); | ||
1380 | 1359 | | |||
1381 | // enable setViewport calls | 1360 | // enable setViewport calls | ||
1382 | d->blockViewport = false; | 1361 | d->blockViewport = false; | ||
1383 | 1362 | | |||
▲ Show 20 Lines • Show All 2416 Lines • ▼ Show 20 Line(s) | 3771 | { | |||
3800 | 3779 | | |||
3801 | if (d->dragScrollVector != QPoint(0, 0)) | 3780 | if (d->dragScrollVector != QPoint(0, 0)) | ||
3802 | { | 3781 | { | ||
3803 | if (!d->dragScrollTimer.isActive()) d->dragScrollTimer.start(100); | 3782 | if (!d->dragScrollTimer.isActive()) d->dragScrollTimer.start(100); | ||
3804 | } | 3783 | } | ||
3805 | else d->dragScrollTimer.stop(); | 3784 | else d->dragScrollTimer.stop(); | ||
3806 | } | 3785 | } | ||
3807 | 3786 | | |||
3787 | QPoint PageView::viewportToContentArea( const Okular::DocumentViewport & vp ) const { | ||||
3788 | Q_ASSERT( vp.pageNumber >= 0 ); | ||||
3789 | | ||||
3790 | const QRect & r = d->items[ vp.pageNumber ]->croppedGeometry(); | ||||
3791 | QPoint c { r.left(), r.top() }; | ||||
3792 | | ||||
3793 | if ( vp.rePos.enabled ) | ||||
3794 | { | ||||
3795 | if ( vp.rePos.pos == Okular::DocumentViewport::Center ) | ||||
3796 | { | ||||
3797 | c.rx() += qRound( normClamp( vp.rePos.normalizedX, 0.5 ) * (double)r.width() ); | ||||
3798 | c.ry() += qRound( normClamp( vp.rePos.normalizedY, 0.0 ) * (double)r.height() ); | ||||
3799 | } | ||||
3800 | else | ||||
3801 | { | ||||
3802 | // TopLeft | ||||
3803 | c.rx() += qRound( normClamp( vp.rePos.normalizedX, 0.0 ) * (double)r.width() + viewport()->width() / 2 ); | ||||
3804 | c.ry() += qRound( normClamp( vp.rePos.normalizedY, 0.0 ) * (double)r.height() + viewport()->height() / 2 ); | ||||
3805 | } | ||||
3806 | } | ||||
3807 | else | ||||
3808 | { | ||||
3809 | // exact repositioning disabled, align page top margin with viewport top border by default | ||||
3810 | c.rx() += r.width() / 2; | ||||
3811 | c.ry() += viewport()->height() / 2 - 10; | ||||
3812 | } | ||||
3813 | return c; | ||||
3814 | } | ||||
3815 | | ||||
3808 | void PageView::updateSelection( const QPoint & pos ) | 3816 | void PageView::updateSelection( const QPoint & pos ) | ||
3809 | { | 3817 | { | ||
3810 | if ( d->mouseSelecting ) | 3818 | if ( d->mouseSelecting ) | ||
3811 | { | 3819 | { | ||
3812 | scrollPosIntoView( pos ); | 3820 | scrollPosIntoView( pos ); | ||
3813 | // update the selection rect | 3821 | // update the selection rect | ||
3814 | QRect updateRect = d->mouseSelectionRect; | 3822 | QRect updateRect = d->mouseSelectionRect; | ||
3815 | d->mouseSelectionRect.setBottomLeft( pos ); | 3823 | d->mouseSelectionRect.setBottomLeft( pos ); | ||
▲ Show 20 Lines • Show All 823 Lines • ▼ Show 20 Line(s) | 4642 | { | |||
4639 | resizeContentArea( QSize( fullWidth, fullHeight ) ); | 4647 | resizeContentArea( QSize( fullWidth, fullHeight ) ); | ||
4640 | // restore previous viewport if defined and updates enabled | 4648 | // restore previous viewport if defined and updates enabled | ||
4641 | if ( wasUpdatesEnabled ) | 4649 | if ( wasUpdatesEnabled ) | ||
4642 | { | 4650 | { | ||
4643 | if ( vp.pageNumber >= 0 ) | 4651 | if ( vp.pageNumber >= 0 ) | ||
4644 | { | 4652 | { | ||
4645 | int prevX = horizontalScrollBar()->value(), | 4653 | int prevX = horizontalScrollBar()->value(), | ||
4646 | prevY = verticalScrollBar()->value(); | 4654 | prevY = verticalScrollBar()->value(); | ||
4647 | const QRect & geometry = d->items[ vp.pageNumber ]->croppedGeometry(); | 4655 | | ||
4648 | double nX = vp.rePos.enabled ? normClamp( vp.rePos.normalizedX, 0.5 ) : 0.5, | 4656 | const QPoint centerPos = viewportToContentArea( vp ); | ||
aacid: const | |||||
4649 | nY = vp.rePos.enabled ? normClamp( vp.rePos.normalizedY, 0.0 ) : 0.0; | 4657 | center( centerPos.x(), centerPos.y() ); | ||
4650 | center( geometry.left() + qRound( nX * (double)geometry.width() ), | 4658 | | ||
4651 | geometry.top() + qRound( nY * (double)geometry.height() ) ); | | |||
4652 | // center() usually moves the viewport, that requests pixmaps too. | 4659 | // center() usually moves the viewport, that requests pixmaps too. | ||
4653 | // if that doesn't happen we have to request them by hand | 4660 | // if that doesn't happen we have to request them by hand | ||
4654 | if ( prevX == horizontalScrollBar()->value() && prevY == verticalScrollBar()->value() ) | 4661 | if ( prevX == horizontalScrollBar()->value() && prevY == verticalScrollBar()->value() ) | ||
4655 | slotRequestVisiblePixmaps(); | 4662 | slotRequestVisiblePixmaps(); | ||
4656 | } | 4663 | } | ||
4657 | // or else go to center page | 4664 | // or else go to center page | ||
4658 | else | 4665 | else | ||
4659 | center( fullWidth / 2, 0 ); | 4666 | center( fullWidth / 2, 0 ); | ||
▲ Show 20 Lines • Show All 899 Lines • Show Last 20 Lines |
const