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@collabora.com> Tested-by: Jan Holesovsky <kendy@collabora.com> Reviewed-on: https://gerrit.libreoffice.org/54649 Reviewed-on: https://gerrit.libreoffice.org/54655 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Marco Cecchetti <mrcekets@gmail.com>
This commit is contained in:
committed by
Marco Cecchetti
parent
494f1a98bf
commit
1f2d389c3d
@@ -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 );
|
||||
|
@@ -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
|
||||
|
Reference in New Issue
Block a user