Rebased ref, commits from common ancestor: commit 23fa3482d9506544f5f345f38000267798ac1231 Author: Vasily Melenchuk <vasily.melenc...@cib.de> Date: Wed Nov 8 16:53:12 2017 +0300
tdf#113901: Grid offset for notes and temporary notes modified. Older calculations for gird offset were incomplete: are not used for notes (only for temporary ones on mouse over), were not taken into account during temporary note disappear and contain duplicated code from ScDrawView::SyncForGrid() New approach elminate described above problems. Reviewed-on: https://gerrit.libreoffice.org/44464 Tested-by: Jenkins <c...@libreoffice.org> Reviewed-by: Katarina Behrens <katarina.behr...@cib.de> Conflicts: sc/source/ui/docshell/docfunc.cxx sc/source/ui/inc/notemark.hxx sc/source/ui/view/notemark.cxx Change-Id: I5f92971e156f37f052b4e6d47b2f16480bdbaf7e diff --git a/sc/source/ui/docshell/docfunc.cxx b/sc/source/ui/docshell/docfunc.cxx index c42f04e1bb31..4065a8ddb2cf 100644 --- a/sc/source/ui/docshell/docfunc.cxx +++ b/sc/source/ui/docshell/docfunc.cxx @@ -27,6 +27,8 @@ #include <vcl/virdev.hxx> #include <vcl/waitobj.hxx> #include <svl/PasswordHelper.hxx> +#include <o3tl/make_unique.hxx> +#include <svx/svdocapt.hxx> #include <com/sun/star/container/XNameContainer.hpp> #include <com/sun/star/script/ModuleType.hpp> @@ -1224,6 +1226,7 @@ bool ScDocFunc::ShowNote( const ScAddress& rPos, bool bShow ) if (rDoc.IsStreamValid(rPos.Tab())) rDoc.SetStreamValid(rPos.Tab(), false); + ScDocShell::GetViewData()->GetScDrawView()->SyncForGrid(pNote->GetCaption()); rDocShell.SetDocumentModified(); return true; diff --git a/sc/source/ui/inc/notemark.hxx b/sc/source/ui/inc/notemark.hxx index b6f8f8d70d00..60d599794f01 100644 --- a/sc/source/ui/inc/notemark.hxx +++ b/sc/source/ui/inc/notemark.hxx @@ -27,6 +27,7 @@ class SdrModel; class SdrObject; +class ScDrawView; class ScNoteMarker { @@ -45,6 +46,7 @@ private: bool bByKeyboard; Rectangle aRect; + ScDrawView* aDrawView; SdrModel* pModel; SdrObject* pObject; bool bVisible; @@ -54,7 +56,7 @@ private: public: ScNoteMarker( vcl::Window* pWin, vcl::Window* pRight, vcl::Window* pBottom, vcl::Window* pDiagonal, ScDocument* pD, ScAddress aPos, const OUString& rUser, - const MapMode& rMap, bool bLeftEdge, bool bForce, bool bKeyboard ); + const MapMode& rMap, bool bLeftEdge, bool bForce, bool bKeyboard, ScDrawView * pDrawView ); ~ScNoteMarker(); void Draw(); @@ -62,7 +64,6 @@ public: const ScAddress& GetDocPos() const { return aDocPos; } bool IsByKeyboard() const { return bByKeyboard; } - void SetGridOff( const Point& rOff ) { aGridOff = rOff; } }; #endif diff --git a/sc/source/ui/view/gridwin5.cxx b/sc/source/ui/view/gridwin5.cxx index 2d853957135f..6c460d83300e 100644 --- a/sc/source/ui/view/gridwin5.cxx +++ b/sc/source/ui/view/gridwin5.cxx @@ -208,26 +208,7 @@ bool ScGridWindow::ShowNoteMarker( SCsCOL nPosX, SCsROW nPosY, bool bKeyboard ) mpNoteMarker.reset(new ScNoteMarker(pLeft, pRight, pBottom, pDiagonal, pDoc, aCellPos, aTrackText, - aMapMode, bLeftEdge, bFast, bKeyboard)); - if ( pViewData->GetScDrawView() ) - { - // get position for aCellPos - // get draw position in hmm for aCellPos - Point aOldPos( pDoc->GetColOffset( aCellPos.Col(), aCellPos.Tab() ), pDoc->GetRowOffset( aCellPos.Row(), aCellPos.Tab() ) ); - aOldPos.X() = sc::TwipsToHMM( aOldPos.X() ); - aOldPos.Y() = sc::TwipsToHMM( aOldPos.Y() ); - // get screen pos in hmm for aCellPos - // and equiv screen pos - Point aScreenPos = pViewData->GetScrPos( aCellPos.Col(), aCellPos.Row(), eWhich, true ); - MapMode aDrawMode = GetDrawMapMode(); - Point aCurPosHmm = PixelToLogic(aScreenPos, aDrawMode ); - Point aGridOff = aCurPosHmm -aOldPos; - // fdo#63323 fix the X Position for the showing comment when - // the mouse over the cell when the sheet are RTL - if ( pDoc->IsNegativePage(nTab)) - aGridOff.setX(aCurPosHmm.getX() + aOldPos.getX()); - mpNoteMarker->SetGridOff( aGridOff ); - } + aMapMode, bLeftEdge, bFast, bKeyboard, pViewData->GetScDrawView())); } bDone = true; // something is shown (old or new) diff --git a/sc/source/ui/view/notemark.cxx b/sc/source/ui/view/notemark.cxx index c9d12e421c24..ac72593b1477 100644 --- a/sc/source/ui/view/notemark.cxx +++ b/sc/source/ui/view/notemark.cxx @@ -30,13 +30,14 @@ #include "notemark.hxx" #include "document.hxx" #include "postit.hxx" +#include "drawview.hxx" #define SC_NOTEMARK_TIME 800 #define SC_NOTEMARK_SHORT 70 ScNoteMarker::ScNoteMarker( vcl::Window* pWin, vcl::Window* pRight, vcl::Window* pBottom, vcl::Window* pDiagonal, ScDocument* pD, ScAddress aPos, const OUString& rUser, - const MapMode& rMap, bool bLeftEdge, bool bForce, bool bKeyboard ) : + const MapMode& rMap, bool bLeftEdge, bool bForce, bool bKeyboard, ScDrawView *pDrawView) : pWindow( pWin ), pRightWin( pRight ), pBottomWin( pBottom ), @@ -47,6 +48,7 @@ ScNoteMarker::ScNoteMarker( vcl::Window* pWin, vcl::Window* pRight, vcl::Window* aMapMode( rMap ), bLeft( bLeftEdge ), bByKeyboard( bKeyboard ), + aDrawView ( pDrawView ), pModel( nullptr ), pObject( nullptr ), bVisible( false ) @@ -97,8 +99,12 @@ IMPL_LINK_NOARG_TYPED(ScNoteMarker, TimeHdl, Timer *, void) pObject = ScNoteUtil::CreateTempCaption( *pDoc, aDocPos, *pPage, aUserText, aVisRect, bLeft ); if( pObject ) { - pObject->SetGridOffset( aGridOff ); + aDrawView->SyncForGrid(pObject); aRect = pObject->GetCurrentBoundRect(); + + // Need to include grid offset: GetCurrentBoundRect is removing it + // but we need to know actual rect position + aRect += pObject->GetGridOffset(); } // Insert page so that the model recognise it and also deleted _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits