Blob Blame History Raw
From 9d9749fb86461eefdb2bab01de003409b236dde0 Mon Sep 17 00:00:00 2001
From: Miklos Vajna <vmiklos@collabora.co.uk>
Date: Mon, 2 Nov 2015 15:18:09 +0100
Subject: [PATCH 258/398] sc lok: fix rounding errors with non-100% zoom

There were two problems here:

1) ScTabView::getRowColumnHeaders() did not expose twip values directly,
but used ScRow/ColBar::GetEntrySize(), which does a twip -> pixel
conversion, and then converted it back to twip. Avoid this unnecessary
roundtrip.

2) ScViewData::ToPixel() trunaces the resulting float to an integer, so
if the result is e.g. 67.7 pixels, then Calc handled that as 67, but
gtktiledviewer rounded that up to 68, resulting in non-matching headers
for the rendered tiles.

Change-Id: Ie6ed1ea923a423d1526eeb235b7b87106fd2f20b
(cherry picked from commit 861b28b88909ec39fc83fccc0ab23d288128aa0e)
---
 libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx |  4 ++--
 sc/source/ui/view/tabview.cxx                       | 11 ++++-------
 2 files changed, 6 insertions(+), 9 deletions(-)

diff --git a/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx b/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx
index c6821065d147..7e6379124678 100644
--- a/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx
+++ b/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx
@@ -256,7 +256,7 @@ gboolean TiledRowColumnBar::docConfigureEvent(GtkWidget* pDocView, GdkEventConfi
         rWindow.m_pRowBar->m_aHeaders.clear();
         for (boost::property_tree::ptree::value_type& rValue : aTree.get_child("rows"))
         {
-            int nSize = std::round(lok_doc_view_twip_to_pixel(LOK_DOC_VIEW(pDocView), std::atof(rValue.second.get<std::string>("size").c_str())));
+            int nSize = lok_doc_view_twip_to_pixel(LOK_DOC_VIEW(pDocView), std::atof(rValue.second.get<std::string>("size").c_str()));
             Header aHeader(nSize, rValue.second.get<std::string>("text"));
             rWindow.m_pRowBar->m_aHeaders.push_back(aHeader);
         }
@@ -266,7 +266,7 @@ gboolean TiledRowColumnBar::docConfigureEvent(GtkWidget* pDocView, GdkEventConfi
         rWindow.m_pColumnBar->m_aHeaders.clear();
         for (boost::property_tree::ptree::value_type& rValue : aTree.get_child("columns"))
         {
-            int nSize = std::round(lok_doc_view_twip_to_pixel(LOK_DOC_VIEW(pDocView), std::atof(rValue.second.get<std::string>("size").c_str())));
+            int nSize = lok_doc_view_twip_to_pixel(LOK_DOC_VIEW(pDocView), std::atof(rValue.second.get<std::string>("size").c_str()));
             Header aHeader(nSize, rValue.second.get<std::string>("text"));
             rWindow.m_pColumnBar->m_aHeaders.push_back(aHeader);
         }
diff --git a/sc/source/ui/view/tabview.cxx b/sc/source/ui/view/tabview.cxx
index f2f6179eaaf9..2d886bca6003 100644
--- a/sc/source/ui/view/tabview.cxx
+++ b/sc/source/ui/view/tabview.cxx
@@ -2313,15 +2313,12 @@ OUString ScTabView::getRowColumnHeaders()
     SCROW nEndRow = 0;
     pDoc->GetTiledRenderingArea(aViewData.GetTabNo(), nEndCol, nEndRow);
 
-    double nPPTX = aViewData.GetPPTX();
-    double nPPTY = aViewData.GetPPTY();
-
     boost::property_tree::ptree aRows;
     for (SCROW nRow = 0; nRow <= nEndRow; ++nRow)
     {
         boost::property_tree::ptree aRow;
-        sal_uInt16 nSize = pRowBar[SC_SPLIT_BOTTOM]->GetEntrySize(nRow);
-        aRow.put("size", OString::number(nSize / nPPTY).getStr());
+        sal_uInt16 nSize = pDoc->GetOriginalHeight(nRow, aViewData.GetTabNo());
+        aRow.put("size", OString::number(nSize).getStr());
         OUString aText = pRowBar[SC_SPLIT_BOTTOM]->GetEntryText(nRow);
         aRow.put("text", aText.toUtf8().getStr());
         aRows.push_back(std::make_pair("", aRow));
@@ -2331,8 +2328,8 @@ OUString ScTabView::getRowColumnHeaders()
     for (SCCOL nCol = 0; nCol <= nEndCol; ++nCol)
     {
         boost::property_tree::ptree aCol;
-        sal_uInt16 nSize = pColBar[SC_SPLIT_LEFT]->GetEntrySize(nCol);
-        aCol.put("size", OString::number(nSize / nPPTX).getStr());
+        sal_uInt16 nSize = pDoc->GetColWidth(nCol, aViewData.GetTabNo());
+        aCol.put("size", OString::number(nSize).getStr());
         OUString aText = pColBar[SC_SPLIT_LEFT]->GetEntryText(nCol);
         aCol.put("text", aText.toUtf8().getStr());
         aCols.push_back(std::make_pair("", aCol));
-- 
2.12.0