summaryrefslogtreecommitdiff
path: root/sc
diff options
context:
space:
mode:
Diffstat (limited to 'sc')
-rw-r--r--sc/source/ui/inc/gridwin.hxx2
-rw-r--r--sc/source/ui/view/gridwin4.cxx74
-rw-r--r--sc/source/ui/view/tabview.cxx21
3 files changed, 62 insertions, 35 deletions
diff --git a/sc/source/ui/inc/gridwin.hxx b/sc/source/ui/inc/gridwin.hxx
index 5c548e5af824..ac5c81700f20 100644
--- a/sc/source/ui/inc/gridwin.hxx
+++ b/sc/source/ui/inc/gridwin.hxx
@@ -206,6 +206,7 @@ class SAL_DLLPUBLIC_RTTI ScGridWindow : public vcl::DocWindow, public DropTarget
sal_uInt16 nPaintCount;
tools::Rectangle aRepaintPixel;
+ tools::Rectangle aEditRectangle;
ScAddress aAutoMarkPos;
ScAddress aListValPos;
@@ -441,6 +442,7 @@ public:
/// Draw content of the gridwindow; shared between the desktop and the tiled rendering.
void DrawContent(OutputDevice &rDevice, const ScTableInfo& rTableInfo, ScOutputData& aOutputData, bool bLogicText);
+ void DrawEditView(OutputDevice &rDevice, EditView *pEditView);
void CreateAnchorHandle(SdrHdlList& rHdl, const ScAddress& rAddress);
diff --git a/sc/source/ui/view/gridwin4.cxx b/sc/source/ui/view/gridwin4.cxx
index 896d44f5898b..4b03921e1287 100644
--- a/sc/source/ui/view/gridwin4.cxx
+++ b/sc/source/ui/view/gridwin4.cxx
@@ -659,6 +659,43 @@ Fraction GetZoom(const ScViewData& rViewData, int i)
}
}
+
+void ScGridWindow::DrawEditView(OutputDevice &rDevice, EditView *pEditView)
+{
+ SCCOL nCol1 = mrViewData.GetEditStartCol();
+ SCROW nRow1 = mrViewData.GetEditStartRow();
+ SCCOL nCol2 = mrViewData.GetEditEndCol();
+ SCROW nRow2 = mrViewData.GetEditEndRow();
+
+ rDevice.SetLineColor();
+ rDevice.SetFillColor(pEditView->GetBackgroundColor());
+ Point aStart = mrViewData.GetScrPos( nCol1, nRow1, eWhich );
+ Point aEnd = mrViewData.GetScrPos( nCol2+1, nRow2+1, eWhich );
+
+ // don't overwrite grid
+ bool bLayoutRTL = mrViewData.GetDocument().IsLayoutRTL(mrViewData.GetTabNo());
+ tools::Long nLayoutSign = bLayoutRTL ? -1 : 1;
+ aEnd.AdjustX( -(2 * nLayoutSign) );
+ aEnd.AdjustY( -2 );
+
+ // set the correct mapmode
+ tools::Rectangle aBackground(aStart, aEnd);
+
+ // paint the background
+ rDevice.SetMapMode(mrViewData.GetLogicMode());
+
+ tools::Rectangle aLogicRect(rDevice.PixelToLogic(aBackground));
+ //tdf#100925, rhbz#1283420, Draw some text here, to get
+ //X11CairoTextRender::getCairoContext called, so that the forced read
+ //from the underlying X Drawable gets it to sync.
+ rDevice.DrawText(aLogicRect.BottomLeft(), " ");
+ rDevice.DrawRect(aLogicRect);
+
+ // paint the editeng text
+ pEditView->Paint(rDevice.PixelToLogic(aEditRectangle), &rDevice);
+ rDevice.SetMapMode(MapMode(MapUnit::MapPixel));
+}
+
void ScGridWindow::DrawContent(OutputDevice &rDevice, const ScTableInfo& rTableInfo, ScOutputData& aOutputData,
bool bLogicText)
{
@@ -1290,42 +1327,9 @@ void ScGridWindow::DrawContent(OutputDevice &rDevice, const ScTableInfo& rTableI
// buffer and on top of everything.
if (bInPlaceEditing && !bIsTiledRendering)
{
- // get the coordinates of the area we need to clear (overpaint by
- // the background)
- SCCOL nCol1 = mrViewData.GetEditStartCol();
- SCROW nRow1 = mrViewData.GetEditStartRow();
- SCCOL nCol2 = mrViewData.GetEditEndCol();
- SCROW nRow2 = mrViewData.GetEditEndRow();
- rDevice.SetLineColor();
- rDevice.SetFillColor(pEditView->GetBackgroundColor());
- Point aStart = mrViewData.GetScrPos( nCol1, nRow1, eWhich );
- Point aEnd = mrViewData.GetScrPos( nCol2+1, nRow2+1, eWhich );
-
- // don't overwrite grid
- tools::Long nLayoutSign = bLayoutRTL ? -1 : 1;
- aEnd.AdjustX( -(2 * nLayoutSign) );
- aEnd.AdjustY( -2 );
-
- // set the correct mapmode
- tools::Rectangle aBackground(aStart, aEnd);
-
- // paint the background
- rDevice.SetMapMode(mrViewData.GetLogicMode());
-
- tools::Rectangle aLogicRect(rDevice.PixelToLogic(aBackground));
- //tdf#100925, rhbz#1283420, Draw some text here, to get
- //X11CairoTextRender::getCairoContext called, so that the forced read
- //from the underlying X Drawable gets it to sync.
- rDevice.DrawText(aLogicRect.BottomLeft(), " ");
- rDevice.DrawRect(aLogicRect);
-
- // paint the editeng text
- tools::Rectangle aEditRect(Point(nScrX, nScrY), Size(aOutputData.GetScrW(), aOutputData.GetScrH()));
- pEditView->Paint(rDevice.PixelToLogic(aEditRect), &rDevice);
-
- rDevice.SetMapMode(MapMode(MapUnit::MapPixel));
+ aEditRectangle = tools::Rectangle(Point(nScrX, nScrY), Size(aOutputData.GetScrW(), aOutputData.GetScrH()));
+ DrawEditView(rDevice, pEditView);
- // restore the cursor it was originally visible
if (bInPlaceVisCursor)
pInPlaceCrsr->Show();
}
diff --git a/sc/source/ui/view/tabview.cxx b/sc/source/ui/view/tabview.cxx
index d82a8a1c7962..17e4d8859231 100644
--- a/sc/source/ui/view/tabview.cxx
+++ b/sc/source/ui/view/tabview.cxx
@@ -23,6 +23,7 @@
#include <vcl/commandevent.hxx>
#include <vcl/help.hxx>
#include <vcl/settings.hxx>
+#include <vcl/cursor.hxx>
#include <sal/log.hxx>
#include <tools/svborder.hxx>
#include <tools/json_writer.hxx>
@@ -2339,6 +2340,26 @@ void ScTabView::SetNewVisArea()
if (pImp)
pImp->VisAreaChanged();
}
+
+ if (GetViewData().HasEditView(GetViewData().GetActivePart()))
+ {
+ EditView *pEditView = GetViewData().GetEditView(GetViewData().GetActivePart());
+ vcl::Cursor *pInPlaceCrsr = pEditView->GetCursor();
+ bool bInPlaceVisCursor = pInPlaceCrsr && pInPlaceCrsr->IsVisible();
+
+ if (bInPlaceVisCursor)
+ pInPlaceCrsr->Hide();
+
+ ScGridWindow *pGridWindow = GetViewData().GetActiveWin();
+ pGridWindow->DrawEditView(*pGridWindow->GetOutDev(), pEditView);
+
+ pGridWindow->flushOverlayManager();
+ pGridWindow->GetOutDev()->SetMapMode(GetViewData().GetLogicMode());
+
+ if (bInPlaceVisCursor)
+ pInPlaceCrsr->Show();
+ }
+
if (aViewData.GetViewShell()->HasAccessibilityObjects())
aViewData.GetViewShell()->BroadcastAccessibility(SfxHint(SfxHintId::ScAccVisAreaChanged));
}