summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/sfx2/ipclient.hxx4
-rw-r--r--include/sfx2/lokcomponenthelpers.hxx3
-rw-r--r--sc/source/ui/unoobj/docuno.cxx3
-rw-r--r--sc/source/ui/view/gridwin4.cxx7
-rw-r--r--sc/source/ui/view/tabvwshb.cxx14
-rw-r--r--sfx2/source/view/ipclient.cxx26
-rw-r--r--sfx2/source/view/lokcharthelper.cxx6
7 files changed, 55 insertions, 8 deletions
diff --git a/include/sfx2/ipclient.hxx b/include/sfx2/ipclient.hxx
index 3e219514a6f1..6eddf9e9f818 100644
--- a/include/sfx2/ipclient.hxx
+++ b/include/sfx2/ipclient.hxx
@@ -87,6 +87,10 @@ public:
void ResetObject();
bool IsUIActive() const;
+ /// To indicate that negated document X coordinates are used
+ void SetNegativeX(bool bSet);
+ bool IsNegativeX() const;
+
virtual void FormatChanged(); // object format was changed (used for StarMath formulas aligning)
virtual bool IsProtected() const;
diff --git a/include/sfx2/lokcomponenthelpers.hxx b/include/sfx2/lokcomponenthelpers.hxx
index cace035b16a1..c9468b7d1c3b 100644
--- a/include/sfx2/lokcomponenthelpers.hxx
+++ b/include/sfx2/lokcomponenthelpers.hxx
@@ -48,7 +48,8 @@ public:
static void PaintAllChartsOnTile(VirtualDevice& rDevice,
int nOutputWidth, int nOutputHeight,
int nTilePosX, int nTilePosY,
- tools::Long nTileWidth, tools::Long nTileHeight);
+ tools::Long nTileWidth, tools::Long nTileHeight,
+ bool bNegativeX = false);
bool postMouseEvent(int nType, int nX, int nY,
int nCount, int nButtons, int nModifier,
double fScaleX = 1.0, double fScaleY = 1.0);
diff --git a/sc/source/ui/unoobj/docuno.cxx b/sc/source/ui/unoobj/docuno.cxx
index 7e149c8b7123..177a38ca07ad 100644
--- a/sc/source/ui/unoobj/docuno.cxx
+++ b/sc/source/ui/unoobj/docuno.cxx
@@ -560,9 +560,6 @@ void ScModelObj::paintTile( VirtualDevice& rDevice,
pGridWindow->PaintTile( rDevice, nOutputWidth, nOutputHeight,
nTilePosX, nTilePosY, nTileWidth, nTileHeight );
- LokChartHelper::PaintAllChartsOnTile(rDevice, nOutputWidth, nOutputHeight,
- nTilePosX, nTilePosY, nTileWidth, nTileHeight);
-
// Draw Form controls
ScDrawLayer* pDrawLayer = pDocShell->GetDocument().GetDrawLayer();
SdrPage* pPage = pDrawLayer->GetPage(sal_uInt16(pViewData->GetTabNo()));
diff --git a/sc/source/ui/view/gridwin4.cxx b/sc/source/ui/view/gridwin4.cxx
index ec77fd12be66..d83c2bcccde2 100644
--- a/sc/source/ui/view/gridwin4.cxx
+++ b/sc/source/ui/view/gridwin4.cxx
@@ -35,6 +35,7 @@
#include <LibreOfficeKit/LibreOfficeKitEnums.h>
#include <comphelper/lok.hxx>
#include <sfx2/lokhelper.hxx>
+#include <sfx2/lokcomponenthelpers.hxx>
#include <svx/svdview.hxx>
#include <svx/svdpagv.hxx>
@@ -1625,6 +1626,12 @@ void ScGridWindow::PaintTile( VirtualDevice& rDevice,
DrawContent(rDevice, aTabInfo, aOutputData, true);
rDevice.SetMapMode(aOriginalMode);
+ // Paint the chart(s) in edit mode.
+ LokChartHelper::PaintAllChartsOnTile(rDevice, nOutputWidth, nOutputHeight,
+ nTilePosX, nTilePosY, nTileWidth, nTileHeight, bLayoutRTL);
+
+ rDevice.SetMapMode(aOriginalMode);
+
// Flag drawn formula cells "unchanged".
rDoc.ResetChanged(ScRange(nTopLeftTileCol, nTopLeftTileRow, nTab, nBottomRightTileCol, nBottomRightTileRow, nTab));
rDoc.PrepareFormulaCalc();
diff --git a/sc/source/ui/view/tabvwshb.cxx b/sc/source/ui/view/tabvwshb.cxx
index 6ed88f12e3a6..f2ae3b56a55e 100644
--- a/sc/source/ui/view/tabvwshb.cxx
+++ b/sc/source/ui/view/tabvwshb.cxx
@@ -80,6 +80,13 @@ void ScTabViewShell::ConnectObject( const SdrOle2Obj* pObj )
return;
pClient = new ScClient( this, pWin, GetScDrawView()->GetModel(), pObj );
+ ScViewData& rViewData = GetViewData();
+ ScDocShell* pDocSh = rViewData.GetDocShell();
+ ScDocument& rDoc = pDocSh->GetDocument();
+ bool bNegativeX = comphelper::LibreOfficeKit::isActive() && rDoc.IsNegativePage(rViewData.GetTabNo());
+ if (bNegativeX)
+ pClient->SetNegativeX(true);
+
tools::Rectangle aRect = pObj->GetLogicRect();
Size aDrawSize = aRect.GetSize();
@@ -153,10 +160,17 @@ void ScTabViewShell::ActivateObject(SdrOle2Obj* pObj, sal_Int32 nVerb)
bool bErrorShown = false;
{
+ ScViewData& rViewData = GetViewData();
+ ScDocShell* pDocSh = rViewData.GetDocShell();
+ ScDocument& rDoc = pDocSh->GetDocument();
+ bool bNegativeX = comphelper::LibreOfficeKit::isActive() && rDoc.IsNegativePage(rViewData.GetTabNo());
SfxInPlaceClient* pClient = FindIPClient( xObj, pWin );
if ( !pClient )
pClient = new ScClient( this, pWin, GetScDrawView()->GetModel(), pObj );
+ if (bNegativeX)
+ pClient->SetNegativeX(true);
+
if ( (sal_uInt32(nErr) & ERRCODE_ERROR_MASK) == 0 && xObj.is() )
{
tools::Rectangle aRect = pObj->GetLogicRect();
diff --git a/sfx2/source/view/ipclient.cxx b/sfx2/source/view/ipclient.cxx
index ce9d2fdfb6c7..73fe6f241bae 100644
--- a/sfx2/source/view/ipclient.cxx
+++ b/sfx2/source/view/ipclient.cxx
@@ -91,6 +91,15 @@ public:
}
};
+tools::Rectangle lcl_negateRectX(const tools::Rectangle& rRect)
+{
+ return tools::Rectangle(
+ std::max(0l, -rRect.Right()),
+ rRect.Top(),
+ std::max(0l, -rRect.Left()),
+ rRect.Bottom());
+}
+
}
// SfxInPlaceClient_Impl
@@ -112,6 +121,7 @@ public:
bool m_bStoreObject;
bool m_bUIActive; // set and cleared when notification for UI (de)activation is sent
bool m_bResizeNoScale;
+ bool m_bNegativeX;
uno::Reference < embed::XEmbeddedObject > m_xObject;
@@ -122,6 +132,7 @@ public:
, m_bStoreObject( true )
, m_bUIActive( false )
, m_bResizeNoScale( false )
+ , m_bNegativeX( false )
{}
void SizeHasChanged();
@@ -347,7 +358,7 @@ void SAL_CALL SfxInPlaceClient_Impl::activatingInplace()
aRect = o3tl::convert(aRect, o3tl::Length::mm100, o3tl::Length::twip);
}
- OString str = aRect.toString() + ", \"INPLACE\"";
+ OString str = (m_bNegativeX ? lcl_negateRectX(aRect) : aRect).toString() + ", \"INPLACE\"";
pViewShell->libreOfficeKitViewCallback( LOK_CALLBACK_GRAPHIC_SELECTION, str.getStr() );
}
@@ -823,7 +834,8 @@ void SfxInPlaceClient::Invalidate()
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 ) ) );
- m_pEditWin->Invalidate( aRealObjArea );
+
+ m_pEditWin->Invalidate( IsNegativeX() ? lcl_negateRectX(aRealObjArea) : aRealObjArea );
ViewChanged();
}
@@ -1122,4 +1134,14 @@ bool SfxInPlaceClient::IsUIActive() const
return m_xImp->m_bUIActive;
}
+void SfxInPlaceClient::SetNegativeX(bool bSet)
+{
+ m_xImp->m_bNegativeX = bSet;
+}
+
+bool SfxInPlaceClient::IsNegativeX() const
+{
+ return m_xImp->m_bNegativeX;
+}
+
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sfx2/source/view/lokcharthelper.cxx b/sfx2/source/view/lokcharthelper.cxx
index e5965802306c..a87388832755 100644
--- a/sfx2/source/view/lokcharthelper.cxx
+++ b/sfx2/source/view/lokcharthelper.cxx
@@ -223,7 +223,8 @@ void LokChartHelper::PaintTile(VirtualDevice& rRenderContext, const tools::Recta
void LokChartHelper::PaintAllChartsOnTile(VirtualDevice& rDevice,
int nOutputWidth, int nOutputHeight,
int nTilePosX, int nTilePosY,
- tools::Long nTileWidth, tools::Long nTileHeight)
+ tools::Long nTileWidth, tools::Long nTileHeight,
+ bool bNegativeX)
{
if (comphelper::LibreOfficeKit::isTiledAnnotations())
return;
@@ -245,7 +246,8 @@ void LokChartHelper::PaintAllChartsOnTile(VirtualDevice& rDevice,
SfxViewShell* pCurView = SfxViewShell::Current();
int nPartForCurView = pCurView ? pCurView->getPart() : -1;
- tools::Rectangle aTileRect(Point(nTilePosX, nTilePosY), Size(nTileWidth, nTileHeight));
+ tools::Long nTileRectLeft = bNegativeX ? -nTilePosX - nTileWidth : nTilePosX;
+ tools::Rectangle aTileRect(Point(nTileRectLeft, nTilePosY), Size(nTileWidth, nTileHeight));
SfxViewShell* pViewShell = SfxViewShell::GetFirst();
while (pViewShell)
{