include/svx/svdobj.hxx | 8 ++++---- include/svx/svdovirt.hxx | 4 ++++ svx/source/svdraw/svdobj.cxx | 10 ++++++++++ svx/source/svdraw/svdovirt.cxx | 20 ++++++++++++++++++++ sw/source/core/draw/dcontact.cxx | 5 +++-- 5 files changed, 41 insertions(+), 6 deletions(-)
New commits: commit da7e1d686a586fa93b1e96adb3d837ea3ae59b98 Author: Michael Stahl <michael.st...@allotropia.de> AuthorDate: Wed May 8 14:20:26 2024 +0200 Commit: Thorsten Behrens <thorsten.behr...@allotropia.de> CommitDate: Fri May 10 23:34:35 2024 +0200 tdf#156484 svx,sw: fix visibility of shapes in header/footer Similar to commit ae132145ff42a95dc24fb124847c04af4b8c8dab, also forward IsVisible() and IsPrintable() from SdrVirtObj to its real object; evidently the properties aren't copied when creating SdrVirtObj but there is no reason for that to have these properties independent. This triggers an assert in VOCOfDrawVirtObj::createPrimitive2DSequence() because that is called during layout from getObjectRange(); the assert was added in commit ae3ec0d53a22ae5d2b7fb244a6056d0627b71873 and intended for painting, but this isn't painting, and it's not easily possible to detect if the function is called during painting, so remove the assert. Change-Id: Id2a04a5d07f43b86eb9c524b30ba74ecaf6a95c8 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/167350 Reviewed-by: Michael Stahl <michael.st...@allotropia.de> Tested-by: Jenkins (cherry picked from commit 9fb9bd54a82ee20f5916aa68e428e0fb67f02ed6) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/167452 Reviewed-by: Thorsten Behrens <thorsten.behr...@allotropia.de> diff --git a/include/svx/svdobj.hxx b/include/svx/svdobj.hxx index 892beb56668c..396c09e8cd94 100644 --- a/include/svx/svdobj.hxx +++ b/include/svx/svdobj.hxx @@ -752,10 +752,10 @@ public: bool IsMoveProtect() const { return m_bMovProt;} void SetResizeProtect(bool bProt); bool IsResizeProtect() const { return m_bSizProt;} - void SetPrintable(bool bPrn); - bool IsPrintable() const { return !m_bNoPrint;} - void SetVisible(bool bVisible); - bool IsVisible() const { return mbVisible;} + virtual void SetPrintable(bool isPrintable); + virtual bool IsPrintable() const; + virtual void SetVisible(bool isVisible); + virtual bool IsVisible() const; void SetMarkProtect(bool bProt); bool IsMarkProtect() const { return m_bMarkProt;} virtual bool IsSdrTextObj() const { return false; } diff --git a/include/svx/svdovirt.hxx b/include/svx/svdovirt.hxx index 17c869313067..ca5f6858ecaa 100644 --- a/include/svx/svdovirt.hxx +++ b/include/svx/svdovirt.hxx @@ -61,6 +61,10 @@ public: const SdrObject& GetReferencedObj() const; virtual void NbcSetAnchorPos(const Point& rAnchorPos) override; + virtual void SetPrintable(bool isPrintable) override; + virtual bool IsPrintable() const override; + virtual void SetVisible(bool isVisible) override; + virtual bool IsVisible() const override; virtual void TakeObjInfo(SdrObjTransformInfoRec& rInfo) const override; virtual SdrInventor GetObjInventor() const override; virtual SdrObjKind GetObjIdentifier() const override; diff --git a/svx/source/svdraw/svdobj.cxx b/svx/source/svdraw/svdobj.cxx index f4d13219db0d..b23e18a6a4d3 100644 --- a/svx/source/svdraw/svdobj.cxx +++ b/svx/source/svdraw/svdobj.cxx @@ -2675,6 +2675,11 @@ void SdrObject::SetResizeProtect(bool bProt) } } +bool SdrObject::IsPrintable() const +{ + return !m_bNoPrint; +} + void SdrObject::SetPrintable(bool bPrn) { if( bPrn == m_bNoPrint ) @@ -2689,6 +2694,11 @@ void SdrObject::SetPrintable(bool bPrn) } } +bool SdrObject::IsVisible() const +{ + return mbVisible; +} + void SdrObject::SetVisible(bool bVisible) { if( bVisible != mbVisible ) diff --git a/svx/source/svdraw/svdovirt.cxx b/svx/source/svdraw/svdovirt.cxx index b1fe6f5cb9bb..2e1641d3864e 100644 --- a/svx/source/svdraw/svdovirt.cxx +++ b/svx/source/svdraw/svdovirt.cxx @@ -97,6 +97,26 @@ void SdrVirtObj::NbcSetAnchorPos(const Point& rAnchorPos) m_aAnchor=rAnchorPos; } +bool SdrVirtObj::IsPrintable() const +{ + return mxRefObj->IsPrintable(); +} + +void SdrVirtObj::SetPrintable(bool const isPrintable) +{ + mxRefObj->SetPrintable(isPrintable); +} + +bool SdrVirtObj::IsVisible() const +{ + return mxRefObj->IsVisible(); +} + +void SdrVirtObj::SetVisible(bool const isVisible) +{ + mxRefObj->SetVisible(isVisible); +} + void SdrVirtObj::TakeObjInfo(SdrObjTransformInfoRec& rInfo) const { mxRefObj->TakeObjInfo(rInfo); diff --git a/sw/source/core/draw/dcontact.cxx b/sw/source/core/draw/dcontact.cxx index aac8f2393c61..115887a368dc 100644 --- a/sw/source/core/draw/dcontact.cxx +++ b/sw/source/core/draw/dcontact.cxx @@ -2216,8 +2216,9 @@ namespace sdr::contact void VOCOfDrawVirtObj::createPrimitive2DSequence(const DisplayInfo& rDisplayInfo, drawinglayer::primitive2d::Primitive2DDecompositionVisitor& rVisitor) const { - // tdf#91260 have already checked top-level one is on the right page - assert(isPrimitiveVisible(rDisplayInfo)); + // this may be called for painting where it's a precondition that + // isPrimitiveVisible() is true, or for e.g. getObjectRange() (even + // during layout) where there are no preconditions... // nasty corner case: override to clear page frame to disable the // sub-objects' anchor check, because their anchor is always on // the first page that the page style is applied to