From b176f98f0e9d10e1849cb29dda9281fbc4967dd9 Mon Sep 17 00:00:00 2001 From: Luis Lucas Date: Sun, 22 Feb 2015 22:50:03 +0000 Subject: [PATCH] Use integer precision for zoom percentage value. This fixes alignment of zoommed pixels between two tiled images. --- app/ViewArea.cpp | 24 +++++++++++++++--------- app/plaYUVerApp.cpp | 1 + 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/app/ViewArea.cpp b/app/ViewArea.cpp index 478b13e..0322c08 100644 --- a/app/ViewArea.cpp +++ b/app/ViewArea.cpp @@ -114,7 +114,18 @@ Double ViewArea::scaleZoomFactor( Double scale, QPoint center, QSize minimumSize Double maxZoom = 100.0; Double minZoom = 0.01; //( 1.0 / m_pixmap.width() ); Double new_scale = 1.0; - Double zoomFactor = m_zoomFactor * scale; + + if( ( m_zoomFactor == minZoom ) && ( scale < 1 ) ) + return new_scale; + + if( ( m_zoomFactor == maxZoom ) && ( scale > 1 ) ) + return new_scale; + + Double zoomFactor = m_zoomFactor * scale * 100.0; + zoomFactor=round(zoomFactor); + zoomFactor=zoomFactor/100.0; + scale = zoomFactor/m_zoomFactor; + if(!minimumSize.isNull()) { @@ -140,18 +151,13 @@ Double ViewArea::scaleZoomFactor( Double scale, QPoint center, QSize minimumSize else scale = hfactor; - zoomFactor = zoomFactor * scale; + zoomFactor = zoomFactor * scale * 100.0; + zoomFactor=round(zoomFactor); + zoomFactor=zoomFactor/100.0; scale = zoomFactor/m_zoomFactor; } } - if( ( m_zoomFactor == minZoom ) && ( scale < 1 ) ) - return new_scale; - - if( ( m_zoomFactor == maxZoom ) && ( scale > 1 ) ) - return new_scale; - - new_scale = scale; if( zoomFactor < minZoom ) diff --git a/app/plaYUVerApp.cpp b/app/plaYUVerApp.cpp index 2e003bf..c958294 100644 --- a/app/plaYUVerApp.cpp +++ b/app/plaYUVerApp.cpp @@ -779,6 +779,7 @@ Void plaYUVerApp::createToolBars() m_arrayToolBars[VIEW_TOOLBAR] = new QToolBar( tr( "View" ) ); m_pcZoomFactorSBox = new QDoubleSpinBox; m_pcZoomFactorSBox->setRange( 1.0, 10000.0 ); + m_pcZoomFactorSBox->setDecimals(0); m_pcZoomFactorSBox->setSingleStep( 10.0 ); m_pcZoomFactorSBox->setValue( 100.0 ); m_pcZoomFactorSBox->setSuffix( "%" );