From 0023106801b5defb8e55a72b2e4f52e7363922b7 Mon Sep 17 00:00:00 2001 From: Jim Evins Date: Fri, 15 Apr 2016 23:40:40 -0400 Subject: [PATCH] Handle change in product or orientation in View. --- glabels/View.cpp | 42 +++++++++++++++++++++++++++++++++--------- glabels/View.h | 1 - 2 files changed, 33 insertions(+), 10 deletions(-) diff --git a/glabels/View.cpp b/glabels/View.cpp index 21c0c6c..4d70a79 100644 --- a/glabels/View.cpp +++ b/glabels/View.cpp @@ -137,7 +137,7 @@ View::setModel( LabelModel* model ) connect( model, SIGNAL(changed()), this, SLOT(update()) ); connect( model, SIGNAL(selectionChanged()), this, SLOT(update()) ); - connect( model, SIGNAL(sizeChanged()), this, SLOT(update()) ); + connect( model, SIGNAL(sizeChanged()), this, SLOT(onModelSizeChanged()) ); update(); } @@ -1152,17 +1152,41 @@ void View::onSettingsChanged() } -/// -/// Model changed handler -/// -void View::onModelChanged() -{ -} - - /// /// Model size changed handler /// void View::onModelSizeChanged() { + using std::min; + using std::max; + + if (mZoomToFitFlag) + { + double wPixels = mScrollArea->maximumViewportSize().width(); + double hPixels = mScrollArea->maximumViewportSize().height(); + + double x_scale = ( wPixels - ZOOM_TO_FIT_PAD ) / mModel->w().pt(); + double y_scale = ( hPixels - ZOOM_TO_FIT_PAD ) / mModel->h().pt(); + double newZoom = min( x_scale, y_scale ) * PTS_PER_INCH / physicalDpiX(); + + // Limits + newZoom = min( newZoom, zoomLevels[0] ); + newZoom = max( newZoom, zoomLevels[nZoomLevels-1] ); + + mZoom = newZoom; + } + + /* Actual scale depends on DPI of display (assume DpiX == DpiY). */ + mScale = mZoom * physicalDpiX() / PTS_PER_INCH; + + setMinimumSize( mScale*mModel->w().pt() + ZOOM_TO_FIT_PAD, + mScale*mModel->h().pt() + ZOOM_TO_FIT_PAD ); + + /* Adjust origin to center label in widget. */ + mX0 = (width()/mScale - mModel->w()) / 2; + mY0 = (height()/mScale - mModel->h()) / 2; + + update(); + + emit zoomChanged(); } diff --git a/glabels/View.h b/glabels/View.h index 045c242..90a0afa 100644 --- a/glabels/View.h +++ b/glabels/View.h @@ -144,7 +144,6 @@ private: ///////////////////////////////////// private slots: void onSettingsChanged(); - void onModelChanged(); void onModelSizeChanged();