diff options
author | Tomaž Vajngerl <quikee@gmail.com> | 2013-06-03 22:11:34 +0200 |
---|---|---|
committer | Tomaž Vajngerl <quikee@gmail.com> | 2013-06-03 23:44:59 +0200 |
commit | 870dd818999ac62c6722c208527d5fbf28c5daee (patch) | |
tree | 61166ee2405ec08a230d7ddf4cb8799a6109e2af /svx | |
parent | 30f2fa988fa9ed52bd2db693e099ab2c7f4efdf5 (diff) |
fdo#60120 Modify DialControl to store 100th degree angle.
DialControl internally stores the angle to a 100th of a degree
percision, but when SetRotation is called, the value was always
rounded to a 1 degree percision. This has now been modified to
round only on DialControl mouse interaction.
Additionally add add a parameter to SetLinkedField which states
the number of decimal places the NumericField is set to. This change
makes possible to set the NumericField to 100th of a Degree as the
internal angle is represented in. Default value is 0, so no change is
needed to existing DialControls.
Change-Id: I1f0c20092cdfccbd0878d7eb620bfdad7825b0fb
Diffstat (limited to 'svx')
-rw-r--r-- | svx/source/dialog/dialcontrol.cxx | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/svx/source/dialog/dialcontrol.cxx b/svx/source/dialog/dialcontrol.cxx index 080b0b3804db..4b2622280f45 100644 --- a/svx/source/dialog/dialcontrol.cxx +++ b/svx/source/dialog/dialcontrol.cxx @@ -388,8 +388,10 @@ void DialControl::SetRotation( sal_Int32 nAngle ) SetRotation( nAngle, false ); } -void DialControl::SetLinkedField( NumericField* pField ) +void DialControl::SetLinkedField( NumericField* pField, sal_Int32 nDecimalPlaces ) { + mpImpl->mnLinkedFieldValueMultiplyer = 100 / pow(10, nDecimalPlaces); + // remove modify handler from old linked field ImplSetFieldLink( Link() ); // remember the new linked field @@ -453,14 +455,15 @@ void DialControl::SetRotation( sal_Int32 nAngle, bool bBroadcast ) bool bOldSel = mpImpl->mbNoRot; mpImpl->mbNoRot = false; - while( nAngle < 0 ) nAngle += 36000; - nAngle = (((nAngle + 50) / 100) * 100) % 36000; + while( nAngle < 0 ) + nAngle += 36000; + if( !bOldSel || (mpImpl->mnAngle != nAngle) ) { mpImpl->mnAngle = nAngle; InvalidateControl(); if( mpImpl->mpLinkField ) - mpImpl->mpLinkField->SetValue( static_cast< long >( GetRotation() / 100 ) ); + mpImpl->mpLinkField->SetValue( static_cast< long >( GetRotation() / mpImpl->mnLinkedFieldValueMultiplyer ) ); if( bBroadcast ) mpImpl->maModifyHdl.Call( this ); } @@ -493,6 +496,8 @@ void DialControl::HandleMouseEvent( const Point& rPos, bool bInitial ) nAngle = 36000 - nAngle; if( bInitial ) // round to entire 15 degrees nAngle = ((nAngle + 750) / 1500) * 1500; + // Round up to 1 degree + nAngle = (((nAngle + 50) / 100) * 100) % 36000; SetRotation( nAngle, true ); } } @@ -511,7 +516,7 @@ void DialControl::HandleEscapeEvent() IMPL_LINK( DialControl, LinkedFieldModifyHdl, NumericField*, pField ) { if( pField ) - SetRotation( static_cast< sal_Int32 >( pField->GetValue() * 100 ), false ); + SetRotation( static_cast< sal_Int32 >( pField->GetValue() * mpImpl->mnLinkedFieldValueMultiplyer ), false ); return 0; } |