tdf#161837 use double instead of Fraction class

replaced use of Fraction in SfxInPlaceClient::SetObjAreaAndScale and
related methods SetSizeScale, GetScaleWidth, GetScaleHeight;
replaced attributes m_aScaleWidth and m_aScaleHeight from
SfxInPlaceClient_Impl with m_fScaleWidth and m_fScaleHeight

Change-Id: I9019c7fde9a75880ad8b01b1f0b643d4932b116e
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/201310
Tested-by: Jenkins
Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
This commit is contained in:
Jesus Solis
2026-03-10 07:51:08 +01:00
committed by Mike Kaganski
parent 356e1beec2
commit 0adeec4451
9 changed files with 55 additions and 64 deletions
+4 -4
View File
@@ -72,10 +72,10 @@ public:
bool SetObjArea( const tools::Rectangle & );
const tools::Rectangle& GetObjArea() const;
tools::Rectangle GetScaledObjArea() const;
void SetSizeScale( const Fraction & rScaleWidth, const Fraction & rScaleHeight );
void SetObjAreaAndScale( const tools::Rectangle&, const Fraction&, const Fraction& );
const Fraction& GetScaleWidth() const;
const Fraction& GetScaleHeight() const;
void SetSizeScale( const double fScaleWidth, const double fScaleHeight );
void SetObjAreaAndScale( const tools::Rectangle&, const double, const double );
double GetScaleWidth() const;
double GetScaleHeight() const;
void Invalidate();
static SfxInPlaceClient* GetClient( SfxObjectShell const * pDoc, const css::uno::Reference < css::embed::XEmbeddedObject >& xObject );
sal_Int64 GetAspect() const;
+3 -3
View File
@@ -211,9 +211,9 @@ void ScClient::ViewChanged()
}
tools::Rectangle aLogicRect = pDrawObj->GetLogicRect();
Fraction aFractX = GetScaleWidth() * aVisSize.Width();
Fraction aFractY = GetScaleHeight() * aVisSize.Height();
aVisSize = Size( static_cast<tools::Long>(aFractX), static_cast<tools::Long>(aFractY) ); // Scaled for Draw model
double fX = GetScaleWidth() * aVisSize.Width();
double fY = GetScaleHeight() * aVisSize.Height();
aVisSize = Size( static_cast<tools::Long>(fX), static_cast<tools::Long>(fY) ); // Scaled for Draw model
// pClientData->SetObjArea before pDrawObj->SetLogicRect, so that we don't
// calculate wrong scalings:
+7 -12
View File
@@ -98,11 +98,9 @@ void ScTabViewShell::ConnectObject( const SdrOle2Obj* pObj )
Size aOleSize = pObj->GetOrigObjSize();
Fraction aScaleWidth (aDrawSize.Width(), aOleSize.Width() );
Fraction aScaleHeight(aDrawSize.Height(), aOleSize.Height() );
aScaleWidth.ReduceInaccurate(10); // compatible with SdrOle2Obj
aScaleHeight.ReduceInaccurate(10);
pClient->SetSizeScale(aScaleWidth,aScaleHeight);
double fScaleWidth = static_cast<double>(aDrawSize.Width()) / aOleSize.Width();
double fScaleHeight = static_cast<double>(aDrawSize.Height()) / aOleSize.Height();
pClient->SetSizeScale(fScaleWidth,fScaleHeight);
// visible section is only changed inplace!
// the object area must be set after the scaling since it triggers the resizing
@@ -207,18 +205,15 @@ void ScTabViewShell::ActivateObject(SdrOle2Obj* pObj, sal_Int32 nVerb)
awt::Size aSz( aOleSize.Width(), aOleSize.Height() );
xObj->setVisualAreaSize( pClient->GetAspect(), aSz );
}
Fraction aOne( 1, 1 );
pClient->SetSizeScale( aOne, aOne );
pClient->SetSizeScale( 1.0, 1.0 );
}
else
{
// calculate scale from client and VisArea size
Fraction aScaleWidth (aDrawSize.Width(), aOleSize.Width() );
Fraction aScaleHeight(aDrawSize.Height(), aOleSize.Height() );
aScaleWidth.ReduceInaccurate(10); // compatible with SdrOle2Obj
aScaleHeight.ReduceInaccurate(10);
pClient->SetSizeScale(aScaleWidth,aScaleHeight);
double fScaleWidth = static_cast<double>(aDrawSize.Width()) / aOleSize.Width();
double fScaleHeight = static_cast<double>(aDrawSize.Height()) / aOleSize.Height();
pClient->SetSizeScale(fScaleWidth,fScaleHeight);
}
// visible section is only changed inplace!
+2 -2
View File
@@ -168,8 +168,8 @@ void Client::ViewChanged()
Size aSize = pSdrOle2Obj->GetOrigObjSize( &aMap100 );
aVisArea.SetSize( aSize );
Size aScaledSize( static_cast< ::tools::Long >( GetScaleWidth() * Fraction( aVisArea.GetWidth() ) ),
static_cast< ::tools::Long >( GetScaleHeight() * Fraction( aVisArea.GetHeight() ) ) );
Size aScaledSize( static_cast< ::tools::Long >( GetScaleWidth() * aVisArea.GetWidth() ),
static_cast< ::tools::Long >( GetScaleHeight() * aVisArea.GetHeight() ) );
// react to the change if the difference is bigger than one pixel
Size aPixelDiff =
+3 -5
View File
@@ -970,11 +970,9 @@ void View::DoConnect(SdrOle2Obj* pObj)
MapMode aMapMode( mrDoc.GetScaleUnit() );
Size aObjAreaSize = pObj->GetOrigObjSize( &aMapMode );
Fraction aScaleWidth (aDrawSize.Width(), aObjAreaSize.Width() );
Fraction aScaleHeight(aDrawSize.Height(), aObjAreaSize.Height() );
aScaleWidth.ReduceInaccurate(10); // compatible to SdrOle2Obj
aScaleHeight.ReduceInaccurate(10);
pSdClient->SetSizeScale(aScaleWidth, aScaleHeight);
double fScaleWidth = static_cast<double>(aDrawSize.Width()) / aObjAreaSize.Width();
double fScaleHeight = static_cast<double>(aDrawSize.Height()) / aObjAreaSize.Height();
pSdClient->SetSizeScale(fScaleWidth, fScaleHeight);
// visible area is only changed in-place!
// the object area must be set after the scaling, since it triggers resize
+3 -5
View File
@@ -859,11 +859,9 @@ bool ViewShell::ActivateObject(SdrOle2Obj* pObj, sal_Int32 nVerb)
if( pObj->IsChart() ) //charts never should be stretched see #i84323# for example
aObjAreaSize = aDrawSize;
Fraction aScaleWidth (aDrawSize.Width(), aObjAreaSize.Width() );
Fraction aScaleHeight(aDrawSize.Height(), aObjAreaSize.Height() );
aScaleWidth.ReduceInaccurate(10); // compatible to the SdrOle2Obj
aScaleHeight.ReduceInaccurate(10);
pSdClient->SetSizeScale(aScaleWidth, aScaleHeight);
double fScaleWidth = static_cast<double>(aDrawSize.Width()) / aObjAreaSize.Width();
double fScaleHeight = static_cast<double>(aDrawSize.Height()) / aObjAreaSize.Height();
pSdClient->SetSizeScale(fScaleWidth, fScaleHeight);
// visible section is only changed in-place!
aRect.SetSize(aObjAreaSize);
+27 -27
View File
@@ -116,8 +116,8 @@ class SfxInPlaceClient_Impl : public ::cppu::WeakImplHelper< embed::XEmbeddedCli
public:
Timer m_aTimer { "sfx::SfxInPlaceClient m_xImpl::m_aTimer" }; // activation timeout, starts after object connection
tools::Rectangle m_aObjArea; // area of object in coordinate system of the container (without scaling)
Fraction m_aScaleWidth; // scaling that was applied to the object when it was not active
Fraction m_aScaleHeight;
double m_fScaleWidth; // scaling that was applied to the object when it was not active
double m_fScaleHeight;
SfxInPlaceClient* m_pClient;
sal_Int64 m_nAspect; // ViewAspect that is assigned from the container
bool m_bStoreObject;
@@ -436,8 +436,8 @@ awt::Rectangle SAL_CALL SfxInPlaceClient_Impl::getPlacement()
// apply scaling to object area and convert to pixels
tools::Rectangle aRealObjArea( m_aObjArea );
aRealObjArea.SetSize( Size( tools::Long( aRealObjArea.GetWidth() * m_aScaleWidth),
tools::Long( aRealObjArea.GetHeight() * m_aScaleHeight) ) );
aRealObjArea.SetSize( Size( tools::Long( aRealObjArea.GetWidth() * m_fScaleWidth),
tools::Long( aRealObjArea.GetHeight() * m_fScaleHeight) ) );
vcl::Window* pEditWin = m_pClient->GetEditWin();
// In Writer and Impress the map mode is disabled. So when a chart is
@@ -471,8 +471,8 @@ awt::Rectangle SAL_CALL SfxInPlaceClient_Impl::getClipRectangle()
// currently(?) same as placement
tools::Rectangle aRealObjArea( m_aObjArea );
aRealObjArea.SetSize( Size( tools::Long( aRealObjArea.GetWidth() * m_aScaleWidth),
tools::Long( aRealObjArea.GetHeight() * m_aScaleHeight) ) );
aRealObjArea.SetSize( Size( tools::Long( aRealObjArea.GetWidth() * m_fScaleWidth),
tools::Long( aRealObjArea.GetHeight() * m_fScaleHeight) ) );
vcl::Window* pEditWin = m_pClient->GetEditWin();
// See comment for SfxInPlaceClient_Impl::getPlacement.
@@ -542,8 +542,8 @@ void SAL_CALL SfxInPlaceClient_Impl::changedPlacement( const awt::Rectangle& aPo
SfxBooleanFlagGuard aGuard( m_bResizeNoScale );
// new size of the object area without scaling
Size aNewObjSize( tools::Long( aNewLogicRect.GetWidth() / m_aScaleWidth ),
tools::Long( aNewLogicRect.GetHeight() / m_aScaleHeight ) );
Size aNewObjSize( tools::Long( aNewLogicRect.GetWidth() / m_fScaleWidth ),
tools::Long( aNewLogicRect.GetHeight() / m_fScaleHeight ) );
// now remove scaling from new placement and keep this at the new object area
aNewLogicRect.SetSize( aNewObjSize );
@@ -643,7 +643,7 @@ SfxInPlaceClient::SfxInPlaceClient( SfxViewShell* pViewShell, vcl::Window *pDraw
{
m_xImp->m_pClient = this;
m_xImp->m_nAspect = nAspect;
m_xImp->m_aScaleWidth = m_xImp->m_aScaleHeight = Fraction(1,1);
m_xImp->m_fScaleWidth = m_xImp->m_fScaleHeight = 1.0;
pViewShell->NewIPClient_Impl(this);
m_xImp->m_aTimer.SetTimeout( SFX_CLIENTACTIVATE_TIMEOUT );
m_xImp->m_aTimer.SetInvokeHandler( LINK( m_xImp.get(), SfxInPlaceClient_Impl, TimerHdl ) );
@@ -779,18 +779,18 @@ const tools::Rectangle& SfxInPlaceClient::GetObjArea() const
tools::Rectangle SfxInPlaceClient::GetScaledObjArea() const
{
tools::Rectangle aRealObjArea( m_xImp->m_aObjArea );
aRealObjArea.SetSize( Size( tools::Long( aRealObjArea.GetWidth() * m_xImp->m_aScaleWidth ),
tools::Long( aRealObjArea.GetHeight() * m_xImp->m_aScaleHeight ) ) );
aRealObjArea.SetSize( Size( tools::Long( aRealObjArea.GetWidth() * m_xImp->m_fScaleWidth ),
tools::Long( aRealObjArea.GetHeight() * m_xImp->m_fScaleHeight ) ) );
return aRealObjArea;
}
void SfxInPlaceClient::SetSizeScale( const Fraction & rScaleWidth, const Fraction & rScaleHeight )
void SfxInPlaceClient::SetSizeScale( const double fScaleWidth, const double fScaleHeight )
{
if ( m_xImp->m_aScaleWidth != rScaleWidth || m_xImp->m_aScaleHeight != rScaleHeight )
if ( m_xImp->m_fScaleWidth != fScaleWidth || m_xImp->m_fScaleHeight != fScaleHeight )
{
m_xImp->m_aScaleWidth = rScaleWidth;
m_xImp->m_aScaleHeight = rScaleHeight;
m_xImp->m_fScaleWidth = fScaleWidth;
m_xImp->m_fScaleHeight = fScaleHeight;
m_xImp->SizeHasChanged();
@@ -801,13 +801,13 @@ void SfxInPlaceClient::SetSizeScale( const Fraction & rScaleWidth, const Fractio
}
void SfxInPlaceClient::SetObjAreaAndScale( const tools::Rectangle& rArea, const Fraction& rScaleWidth, const Fraction& rScaleHeight )
void SfxInPlaceClient::SetObjAreaAndScale( const tools::Rectangle& rArea, const double fScaleWidth, const double fScaleHeight )
{
if( rArea != m_xImp->m_aObjArea || m_xImp->m_aScaleWidth != rScaleWidth || m_xImp->m_aScaleHeight != rScaleHeight )
if( rArea != m_xImp->m_aObjArea || m_xImp->m_fScaleWidth != fScaleWidth || m_xImp->m_fScaleHeight != fScaleHeight )
{
m_xImp->m_aObjArea = rArea;
m_xImp->m_aScaleWidth = rScaleWidth;
m_xImp->m_aScaleHeight = rScaleHeight;
m_xImp->m_fScaleWidth = fScaleWidth;
m_xImp->m_fScaleHeight = fScaleHeight;
m_xImp->SizeHasChanged();
@@ -816,15 +816,15 @@ void SfxInPlaceClient::SetObjAreaAndScale( const tools::Rectangle& rArea, const
}
const Fraction& SfxInPlaceClient::GetScaleWidth() const
double SfxInPlaceClient::GetScaleWidth() const
{
return m_xImp->m_aScaleWidth;
return m_xImp->m_fScaleWidth;
}
const Fraction& SfxInPlaceClient::GetScaleHeight() const
double SfxInPlaceClient::GetScaleHeight() const
{
return m_xImp->m_aScaleHeight;
return m_xImp->m_fScaleHeight;
}
@@ -834,8 +834,8 @@ void SfxInPlaceClient::Invalidate()
// the object area is provided in logical coordinates of the window but without scaling applied
tools::Rectangle aRealObjArea( m_xImp->m_aObjArea );
aRealObjArea.SetSize( Size( tools::Long( aRealObjArea.GetWidth() * m_xImp->m_aScaleWidth ),
tools::Long( aRealObjArea.GetHeight() * m_xImp->m_aScaleHeight ) ) );
aRealObjArea.SetSize( Size( tools::Long( aRealObjArea.GetWidth() * m_xImp->m_fScaleWidth ),
tools::Long( aRealObjArea.GetHeight() * m_xImp->m_fScaleHeight ) ) );
m_pEditWin->Invalidate( IsNegativeX() ? lcl_negateRectX(aRealObjArea) : aRealObjArea );
@@ -992,8 +992,8 @@ ErrCodeMsg SfxInPlaceClient::DoVerb(sal_Int32 nVerb)
tools::Rectangle aScaledArea = GetScaledObjArea();
m_xImp->m_aObjArea.SetSize( aNewSize );
m_xImp->m_aScaleWidth = Fraction( aScaledArea.GetWidth(), aNewSize.Width() );
m_xImp->m_aScaleHeight = Fraction( aScaledArea.GetHeight(), aNewSize.Height() );
m_xImp->m_fScaleWidth = static_cast<double>(aScaledArea.GetWidth()) / aNewSize.Width();
m_xImp->m_fScaleHeight = static_cast<double>(aScaledArea.GetHeight()) / aNewSize.Height();
}
}
catch (uno::Exception const&)
+1 -1
View File
@@ -1600,7 +1600,7 @@ void SdrOle2Obj::ImpSetVisAreaSize()
if ( pClient )
{
tools::Rectangle aScaleRect(getRectangle().TopLeft(), aObjAreaSize);
pClient->SetObjAreaAndScale( aScaleRect, aScaleWidth, aScaleHeight);
pClient->SetObjAreaAndScale( aScaleRect, double(aScaleWidth), double(aScaleHeight));
}
else
{
+5 -5
View File
@@ -874,8 +874,8 @@ void SwWrtShell::CalcAndSetScale( svt::EmbeddedObjectRef& xObj,
Size _aVisArea( aSize.Width, aSize.Height );
Fraction aScaleWidth( 1, 1 );
Fraction aScaleHeight( 1, 1 );
double fScaleWidth = 1.0;
double fScaleHeight = 1.0;
bool bUseObjectSize = false;
@@ -908,8 +908,8 @@ void SwWrtShell::CalcAndSetScale( svt::EmbeddedObjectRef& xObj,
}
else
{
aScaleWidth = Fraction( aObjArea.Width(), _aVisArea.Width() );
aScaleHeight = Fraction( aObjArea.Height(), _aVisArea.Height());
fScaleWidth = static_cast<double>(aObjArea.Width()) / _aVisArea.Width();
fScaleHeight = static_cast<double>(aObjArea.Height()) / _aVisArea.Height();
}
}
}
@@ -955,7 +955,7 @@ void SwWrtShell::CalcAndSetScale( svt::EmbeddedObjectRef& xObj,
}
}
pCli->SetObjAreaAndScale( aArea.SVRect(), aScaleWidth, aScaleHeight );
pCli->SetObjAreaAndScale( aArea.SVRect(), fScaleWidth, fScaleHeight );
}
void SwWrtShell::ConnectObj( svt::EmbeddedObjectRef& xObj, const SwRect &rPrt,