diff options
author | Tomaž Vajngerl <tomaz.vajngerl@collabora.co.uk> | 2021-04-26 10:43:11 +0900 |
---|---|---|
committer | Tomaž Vajngerl <quikee@gmail.com> | 2021-04-26 10:14:59 +0200 |
commit | e0094d6fe58eaa9a79b546149cf67db521cd1230 (patch) | |
tree | 537d3033d0e9608f48876084684f5d192c2aa316 /sc | |
parent | 9c62b71cf59a043031a2e3bee13de43bf49e18bb (diff) |
lok: add rendering and input for form controls in Calc
Until now the form controls were nto rendered to a tile when
drawing tiles for LOKit usage (online). This change adds
LokControlHandler that is responsible for rendering of the
form controls on the tiles (currently implemented only for Calc)
and handles mouse input events that come through LOKit.
Change-Id: Ifcecc9a320a7836b76b0a10771b06c15339baed2
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/114635
Tested-by: Jenkins
Reviewed-by: Tomaž Vajngerl <quikee@gmail.com>
Diffstat (limited to 'sc')
-rw-r--r-- | sc/source/ui/unoobj/docuno.cxx | 30 |
1 files changed, 25 insertions, 5 deletions
diff --git a/sc/source/ui/unoobj/docuno.cxx b/sc/source/ui/unoobj/docuno.cxx index 5cd51ad148b1..371cb395e139 100644 --- a/sc/source/ui/unoobj/docuno.cxx +++ b/sc/source/ui/unoobj/docuno.cxx @@ -79,6 +79,7 @@ #endif #include <sfx2/lokhelper.hxx> #include <sfx2/lokcharthelper.hxx> +#include <sfx2/LokControlHandler.hxx> #include <cellsuno.hxx> #include <columnspanset.hxx> @@ -563,6 +564,14 @@ void ScModelObj::paintTile( VirtualDevice& rDevice, LokChartHelper::PaintAllChartsOnTile(rDevice, nOutputWidth, nOutputHeight, nTilePosX, nTilePosY, nTileWidth, nTileHeight); + + // Draw Form controls + ScDrawLayer* pDrawLayer = pDocShell->GetDocument().GetDrawLayer(); + SdrPage* pPage = pDrawLayer->GetPage(sal_uInt16(pViewData->GetTabNo())); + SdrView* pDrawView = pViewData->GetViewShell()->GetScDrawView(); + tools::Rectangle aTileRect(Point(nTilePosX, nTilePosY), Size(nTileWidth, nTileHeight)); + Size aOutputSize(nOutputWidth, nOutputHeight); + LokControlHandler::paintControlTile(pPage, pDrawView, *pGridWindow, rDevice, aOutputSize, aTileRect); } void ScModelObj::setPart( int nPart, bool /*bAllowChangeFocus*/ ) @@ -715,22 +724,33 @@ void ScModelObj::postMouseEvent(int nType, int nX, int nY, int nCount, int nButt if (aChartHelper.postMouseEvent(nType, nX, nY, nCount, nButtons, nModifier, pViewData->GetPPTX(), pViewData->GetPPTY())) + { return; + } + + Point aPointTwip(nX, nY); // check if the user hit a chart which is being edited by someone else // and, if so, skip current mouse event if (nType != LOK_MOUSEEVENT_MOUSEMOVE) { - if (LokChartHelper::HitAny(Point(nX, nY))) + if (LokChartHelper::HitAny(aPointTwip)) return; } - // Calc operates in pixels... - const Point aPos(nX * pViewData->GetPPTX(), nY * pViewData->GetPPTY()); + // Check if a control is hit + Point aPointHMM = o3tl::convert(aPointTwip, o3tl::Length::twip, o3tl::Length::mm100); + ScDrawLayer* pDrawLayer = pDocShell->GetDocument().GetDrawLayer(); + SdrPage* pPage = pDrawLayer->GetPage(sal_uInt16(pViewData->GetTabNo())); + SdrView* pDrawView = pViewData->GetViewShell()->GetScDrawView(); + if (LokControlHandler::postMouseEvent(pPage, pDrawView, *pGridWindow, nType, aPointHMM, nCount, nButtons, nModifier)) + return; - LokMouseEventData aMouseEventData(nType, aPos, nCount, MouseEventModifiers::SIMPLECLICK, + // Calc operates in pixels... + const Point aPosition(nX * pViewData->GetPPTX(), nY * pViewData->GetPPTY()); + LokMouseEventData aMouseEventData(nType, aPosition, nCount, MouseEventModifiers::SIMPLECLICK, nButtons, nModifier); - aMouseEventData.maLogicPosition = Point(convertTwipToMm100(nX), convertTwipToMm100(nY)); + aMouseEventData.maLogicPosition = aPointHMM; SfxLokHelper::postMouseEventAsync(pGridWindow, aMouseEventData); } |