[Libreoffice-commits] core.git: chart2/source vcl/source

Marco Cecchetti marco.cecchetti at collabora.com
Tue May 22 10:49:41 UTC 2018


 chart2/source/controller/main/ChartController_Window.cxx |   14 ++++++++++++++
 vcl/source/window/floatwin.cxx                           |   14 +++++++++++++-
 2 files changed, 27 insertions(+), 1 deletion(-)

New commits:
commit 1f2d389c3d3211e079806aba96b51a1348b47368
Author: Marco Cecchetti <marco.cecchetti at collabora.com>
Date:   Wed Apr 18 18:31:00 2018 +0200

    lok: charts context menu was misplaced + wrong LogicToLogic conversion
    
    Chart context menu was misplaced since the context menu expects a
    position related to the document window not to the chart window.
    Moreover map mode is not enabled for chart window, that leads to use
    the LogicToLogic routine which unfortunately provides a wrong pixel to
    twips conversion. In fact we gets a 20 twips per pixel conversion
    since LogicToLogic uses a fixed 72 dpi value, instead of a correctly
    computed output device real dpi or at least the most commonly used 96
    dpi value.
    
    Change-Id: Idb4220d03fddd4b6d643c1c0fb52754bafed7e36
    Reviewed-on: https://gerrit.libreoffice.org/53118
    Reviewed-by: Jan Holesovsky <kendy at collabora.com>
    Tested-by: Jan Holesovsky <kendy at collabora.com>
    Reviewed-on: https://gerrit.libreoffice.org/54649
    Reviewed-on: https://gerrit.libreoffice.org/54655
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Marco Cecchetti <mrcekets at gmail.com>

diff --git a/chart2/source/controller/main/ChartController_Window.cxx b/chart2/source/controller/main/ChartController_Window.cxx
index f3cd46bb5ee1..9c3993095e47 100644
--- a/chart2/source/controller/main/ChartController_Window.cxx
+++ b/chart2/source/controller/main/ChartController_Window.cxx
@@ -66,6 +66,7 @@
 #include <toolkit/awt/vclxmenu.hxx>
 
 #include <sfx2/viewsh.hxx>
+#include <sfx2/ipclient.hxx>
 #include <svx/svxids.hrc>
 #include <svx/ActionDescriptionProvider.hxx>
 #include <svx/obj3d.hxx>
@@ -1259,6 +1260,19 @@ void ChartController::execute_Command( const CommandEvent& rCEvt )
         {
             PopupMenu* pPopupMenu = static_cast<PopupMenu*>(VCLXMenu::GetImplementation(xPopupMenu)->GetMenu());
             pPopupMenu->SetLOKNotifier(SfxViewShell::Current());
+
+            // the context menu expects a position related to the document window,
+            // not to the chart window
+            SfxInPlaceClient* pIPClient = SfxViewShell::Current()->GetIPClient();
+            if (pIPClient)
+            {
+                vcl::Window* pRootWin = pIPClient->GetEditWin();
+                if (pRootWin)
+                {
+                    Point aOffset = pChartWindow->GetOffsetPixelFrom(*pRootWin);
+                    aPos += aOffset;
+                }
+            }
         }
 
         xPopupController->setPopupMenu( xPopupMenu );
diff --git a/vcl/source/window/floatwin.cxx b/vcl/source/window/floatwin.cxx
index 83966e42b0e5..0ba23a39d6d8 100644
--- a/vcl/source/window/floatwin.cxx
+++ b/vcl/source/window/floatwin.cxx
@@ -441,10 +441,22 @@ Point FloatingWindow::ImplCalcPos(vcl::Window* pWindow,
 
     if (bLOKActive && pLOKTwipsPos)
     {
-        if (pW->IsMapModeEnabled())
+        if (pW->IsMapModeEnabled() || pW->GetMapMode().GetMapUnit() == MapUnit::MapPixel)
+        {
+            // if we use pW->LogicToLogic(aPos, pW->GetMapMode(), MapMode(MapUnit::MapTwip)),
+            // for pixel conversions when map mode is not enabled, we gets
+            // a 20 twips per pixel conversion since LogicToLogic uses
+            // a fixed 72 dpi value, instead of a correctly computed output
+            // device dpi or at least the most commonly used 96 dpi value;
+            // and anyway the following is what we already do in
+            // ScGridWindow::LogicInvalidate when map mode is not enabled.
+
             *pLOKTwipsPos = pW->PixelToLogic(aPos, MapMode(MapUnit::MapTwip));
+        }
         else
+        {
             *pLOKTwipsPos = OutputDevice::LogicToLogic(aPos, pW->GetMapMode(), MapMode(MapUnit::MapTwip));
+        }
     }
 
     // caller expects coordinates relative to top-level win


More information about the Libreoffice-commits mailing list