sc/qa/unit/tiledrendering/data/page-view.xlsx |binary
 sc/qa/unit/tiledrendering/tiledrendering2.cxx |   27 ++++++++++++++++++++++++++
 sc/source/ui/view/gridwin4.cxx                |   15 +++++++++++++-
 3 files changed, 41 insertions(+), 1 deletion(-)

New commits:
commit ac3595146eae47b1f6f4d6e91a7d28af56365004
Author:     Jaume Pujantell <[email protected]>
AuthorDate: Wed Jan 21 20:08:04 2026 +0100
Commit:     Jaume Pujantell <[email protected]>
CommitDate: Wed Feb 25 09:02:42 2026 +0100

    cool#14171 lok: sc: offset properly some drawings in LOK
    
    In tiled rendering mode, the lines around page break view where being
    rendered in improper places. This is due to the fact that the lines
    where drawn in absolute coordinates while the rendering device has it's
    own origin.
    
    This can be accounted for by moving the origin before DrawPagePreview.
    Like it's already done before DrawButtons.
    
    Change-Id: I47dc6022306bb49b2bb4c0010fccfb1c6147b2f0
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/197771
    Tested-by: Jenkins CollaboraOffice <[email protected]>
    Reviewed-by: Miklos Vajna <[email protected]>
    (cherry picked from commit dfb0ed2123890cf036cee81383248a53378aaa4c)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/200218
    Reviewed-by: Jaume Pujantell <[email protected]>
    Tested-by: Jenkins

diff --git a/sc/qa/unit/tiledrendering/data/page-view.xlsx 
b/sc/qa/unit/tiledrendering/data/page-view.xlsx
new file mode 100644
index 000000000000..3cf6fec42399
Binary files /dev/null and b/sc/qa/unit/tiledrendering/data/page-view.xlsx 
differ
diff --git a/sc/qa/unit/tiledrendering/tiledrendering2.cxx 
b/sc/qa/unit/tiledrendering/tiledrendering2.cxx
index c5a85d5daca4..3257b4a958e1 100644
--- a/sc/qa/unit/tiledrendering/tiledrendering2.cxx
+++ b/sc/qa/unit/tiledrendering/tiledrendering2.cxx
@@ -14,6 +14,7 @@
 #include <comphelper/propertyvalue.hxx>
 #include <comphelper/propertysequence.hxx>
 #include <sfx2/lokhelper.hxx>
+#include <vcl/BitmapReadAccess.hxx>
 #include <vcl/scheduler.hxx>
 #include <LibreOfficeKit/LibreOfficeKitEnums.h>
 
@@ -253,6 +254,32 @@ CPPUNIT_TEST_FIXTURE(ScTiledRenderingTest, testTdf167042)
     CPPUNIT_ASSERT_EQUAL(u"test1"_ustr, pNote->GetText());
 }
 
+CPPUNIT_TEST_FIXTURE(ScTiledRenderingTest, testBreakPageView)
+{
+    // Give a file in page break view mode
+    ScModelObj* pModelObj = createDoc("page-view.xlsx");
+
+    // Paint a tile not at the top or left
+    size_t nCanvasSize = 1024;
+    size_t nTileSize = 256;
+    std::vector<unsigned char> aPixmap(nCanvasSize * nCanvasSize * 4, 0);
+    ScopedVclPtrInstance<VirtualDevice> xDevice(DeviceFormat::WITHOUT_ALPHA);
+    xDevice->SetBackground(Wallpaper(COL_TRANSPARENT));
+    xDevice->SetOutputSizePixelScaleOffsetAndLOKBuffer(Size(nCanvasSize, 
nCanvasSize),
+                                                       Fraction(1.0), Point(), 
aPixmap.data());
+    pModelObj->paintTile(*xDevice, nCanvasSize, nCanvasSize, 3840, 3840, 3840, 
3840);
+    xDevice->EnableMapMode(false);
+    Bitmap aBitmap = xDevice->GetBitmap(Point(0, 0), Size(nTileSize, 
nTileSize));
+
+    // Top left pixel should be white, not blue
+    BitmapScopedReadAccess pAccess(aBitmap);
+    Color aColor(pAccess->GetPixel(0, 0));
+    // Without the fix in place, this test fails with
+    // - Expected: rgba[ffffffff]
+    // - Actual  : rgba[000080ff]
+    CPPUNIT_ASSERT_EQUAL(Color(255, 255, 255), aColor);
+}
+
 CPPUNIT_PLUGIN_IMPLEMENT();
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sc/source/ui/view/gridwin4.cxx b/sc/source/ui/view/gridwin4.cxx
index ebe99a7fc64f..ecd1302b4153 100644
--- a/sc/source/ui/view/gridwin4.cxx
+++ b/sc/source/ui/view/gridwin4.cxx
@@ -914,7 +914,18 @@ void ScGridWindow::DrawContent(OutputDevice &rDevice, 
const ScTableInfo& rTableI
     if (!bGridFirst && (bGrid || bPage) && !bNoBackgroundAndGrid)
         aOutputData.DrawGrid(*pContentDev, bGrid, bPage);
 
-    pContentDev->SetMapMode(MapMode(MapUnit::MapPixel));
+    if (bIsTiledRendering)
+    {
+        // Tiled offset nScrX, nScrY
+        MapMode aMap(MapUnit::MapPixel);
+        Point aOrigin(
+            o3tl::convert(aOriginalMode.GetOrigin(), o3tl::Length::twip, 
o3tl::Length::px));
+        aOrigin.Move(nScrX, nScrY);
+        aMap.SetOrigin(aOrigin);
+        pContentDev->SetMapMode(aMap);
+    }
+    else
+        pContentDev->SetMapMode(MapMode(MapUnit::MapPixel));
 
     //tdf#128258 - draw a dotted line before hidden columns/rows
     DrawHiddenIndicator(nX1,nY1,nX2,nY2, *pContentDev);
@@ -928,6 +939,8 @@ void ScGridWindow::DrawContent(OutputDevice &rDevice, const 
ScTableInfo& rTableI
             pContentDev->SetClipRegion();
         }
     }
+    if (bIsTiledRendering)
+        pContentDev->SetMapMode(MapMode(MapUnit::MapPixel));
 
     aOutputData.DrawShadow();
     aOutputData.DrawFrame(*pContentDev);

Reply via email to