Improved approach to honor aspect ratio during size changes.

This commit is contained in:
Jim Evins
2015-09-07 16:19:35 -04:00
parent 360d85bbbc
commit 409abe4428
3 changed files with 34 additions and 7 deletions
+7 -3
View File
@@ -778,14 +778,18 @@ namespace glabels
/// ///
void LabelModelObject::setSizeHonorAspect( double w, double h ) 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 else
{ {
setHHonorAspect( h ); w = h/aspectRatio;
} }
setSize( w, h );
} }
+13 -3
View File
@@ -278,9 +278,19 @@ namespace glabels
if ( sizeAspectCheck->isChecked() ) if ( sizeAspectCheck->isChecked() )
{ {
mObject->setSizeHonorAspect( sizeWSpin->value(), sizeHSpin->value() ); double spinW = sizeWSpin->value();
sizeWSpin->setValue( mObject->w() ); double spinH = sizeHSpin->value();
sizeHSpin->setValue( mObject->h() );
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 else
{ {
+14 -1
View File
@@ -810,7 +810,20 @@ glabels::View::handleResizeMotion( double xWorld, double yWorld )
{ {
if ( mResizeHonorAspect ) 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 else
{ {