From 409abe442823b6d0ed437733e31c65d59284e984 Mon Sep 17 00:00:00 2001 From: Jim Evins Date: Mon, 7 Sep 2015 16:19:35 -0400 Subject: [PATCH] Improved approach to honor aspect ratio during size changes. --- glabels/LabelModelObject.cpp | 10 +++++++--- glabels/ObjectEditor.cpp | 16 +++++++++++++--- glabels/View.cpp | 15 ++++++++++++++- 3 files changed, 34 insertions(+), 7 deletions(-) diff --git a/glabels/LabelModelObject.cpp b/glabels/LabelModelObject.cpp index e71d02f..b85e2fc 100644 --- a/glabels/LabelModelObject.cpp +++ b/glabels/LabelModelObject.cpp @@ -778,14 +778,18 @@ namespace glabels /// void LabelModelObject::setSizeHonorAspect( double w, double h ) { - if ( fabs(w - mW) > fabs(h - mH) ) + double aspectRatio = mH / mW; + + if ( h > (w*aspectRatio) ) { - setWHonorAspect( w ); + h = w*aspectRatio; } else { - setHHonorAspect( h ); + w = h/aspectRatio; } + + setSize( w, h ); } diff --git a/glabels/ObjectEditor.cpp b/glabels/ObjectEditor.cpp index 5889780..ffc6c7a 100644 --- a/glabels/ObjectEditor.cpp +++ b/glabels/ObjectEditor.cpp @@ -278,9 +278,19 @@ namespace glabels if ( sizeAspectCheck->isChecked() ) { - mObject->setSizeHonorAspect( sizeWSpin->value(), sizeHSpin->value() ); - sizeWSpin->setValue( mObject->w() ); - sizeHSpin->setValue( mObject->h() ); + double spinW = sizeWSpin->value(); + double spinH = sizeHSpin->value(); + + if ( fabs(spinW - mObject->w()) > fabs(spinH - mObject->h()) ) + { + mObject->setWHonorAspect( spinW ); + sizeHSpin->setValue( mObject->h() ); + } + else + { + mObject->setHHonorAspect( spinH ); + sizeWSpin->setValue( mObject->w() ); + } } else { diff --git a/glabels/View.cpp b/glabels/View.cpp index 38d932b..c73af0d 100644 --- a/glabels/View.cpp +++ b/glabels/View.cpp @@ -810,7 +810,20 @@ glabels::View::handleResizeMotion( double xWorld, double yWorld ) { if ( mResizeHonorAspect ) { - mResizeObject->setSizeHonorAspect( w, h ); + switch ( location ) + { + case Handle::E: + case Handle::W: + mResizeObject->setWHonorAspect( w ); + break; + case Handle::N: + case Handle::S: + mResizeObject->setHHonorAspect( h ); + break; + default: + mResizeObject->setSizeHonorAspect( w, h ); + break; + } } else {