svx/inc/svx/sdr/contact/viewobjectcontactofgroup.hxx | 3 +++ svx/inc/svx/sdr/contact/viewobjectcontactofsdrobj.hxx | 9 +++++++++ svx/source/sdr/contact/viewobjectcontactofgroup.cxx | 9 +++++++++ svx/source/sdr/contact/viewobjectcontactofsdrobj.cxx | 7 ++++++- 4 files changed, 27 insertions(+), 1 deletion(-)
New commits: commit ff7280bbb169deaaa5b813ba07a7bfdb715a0482 Author: David Tardon <[email protected]> Date: Sun Mar 24 14:08:14 2013 +0100 fdo#62617 display groups on multiple layers correctly It is possible to group objects from different layers, so it is an error to rely on layer ID when checking visibility of a group. This problem was partially obscured by the fact that SdrObjGroup::GetLayer() returns 0 if its subobjects are on different layers and 0 is a valid layer ID. (cherry picked from commit 09d4525b11f396a68ca7c5cbb1ae3462db40c77c) Change-Id: I0ef75544a26817154642185864cafd4e6734fa38 Signed-off-by: David Tardon <[email protected]> Reviewed-on: https://gerrit.libreoffice.org/4357 Reviewed-by: Noel Power <[email protected]> Tested-by: Noel Power <[email protected]> diff --git a/svx/inc/svx/sdr/contact/viewobjectcontactofgroup.hxx b/svx/inc/svx/sdr/contact/viewobjectcontactofgroup.hxx index e189a63..7a0596a 100644 --- a/svx/inc/svx/sdr/contact/viewobjectcontactofgroup.hxx +++ b/svx/inc/svx/sdr/contact/viewobjectcontactofgroup.hxx @@ -49,6 +49,9 @@ namespace sdr // This method recursively paints the draw hierarchy. virtual drawinglayer::primitive2d::Primitive2DSequence getPrimitive2DSequenceHierarchy(DisplayInfo& rDisplayInfo) const; + + private: + virtual bool isPrimitiveVisibleOnAnyLayer(const SetOfByte& aLayers) const; }; } // end of namespace contact } // end of namespace sdr diff --git a/svx/inc/svx/sdr/contact/viewobjectcontactofsdrobj.hxx b/svx/inc/svx/sdr/contact/viewobjectcontactofsdrobj.hxx index e366bbd..e5b1f13 100644 --- a/svx/inc/svx/sdr/contact/viewobjectcontactofsdrobj.hxx +++ b/svx/inc/svx/sdr/contact/viewobjectcontactofsdrobj.hxx @@ -34,6 +34,7 @@ ////////////////////////////////////////////////////////////////////////////// // predeclarations class SdrObject; +class SetOfByte; ////////////////////////////////////////////////////////////////////////////// @@ -43,6 +44,14 @@ namespace sdr { class SVX_DLLPUBLIC ViewObjectContactOfSdrObj : public ViewObjectContact { + /** Test whether the primitive is visible on any layer from @c aLayers + + This should be overriden by ViewObjectContacts of SDR classes + that have subparts which can be on different layers (that is, + SdrObjGroup .-) + */ + virtual bool isPrimitiveVisibleOnAnyLayer(const SetOfByte& aLayers) const; + protected: const SdrObject& getSdrObject() const; diff --git a/svx/source/sdr/contact/viewobjectcontactofgroup.cxx b/svx/source/sdr/contact/viewobjectcontactofgroup.cxx index 3f47bb4..ee2c630 100644 --- a/svx/source/sdr/contact/viewobjectcontactofgroup.cxx +++ b/svx/source/sdr/contact/viewobjectcontactofgroup.cxx @@ -34,6 +34,7 @@ #include <drawinglayer/primitive2d/groupprimitive2d.hxx> #include <basegfx/tools/canvastools.hxx> #include <svx/sdr/contact/viewcontact.hxx> +#include <svx/svdobj.hxx> ////////////////////////////////////////////////////////////////////////////// @@ -107,6 +108,14 @@ namespace sdr } return xRetval; } + + bool ViewObjectContactOfGroup::isPrimitiveVisibleOnAnyLayer(const SetOfByte& aLayers) const + { + SetOfByte aObjectLayers; + getSdrObject().getMergedHierarchyLayerSet(aObjectLayers); + aObjectLayers &= aLayers; + return !aObjectLayers.IsEmpty(); + } } // end of namespace contact } // end of namespace sdr diff --git a/svx/source/sdr/contact/viewobjectcontactofsdrobj.cxx b/svx/source/sdr/contact/viewobjectcontactofsdrobj.cxx index d9a285f..b1e9fa9 100644 --- a/svx/source/sdr/contact/viewobjectcontactofsdrobj.cxx +++ b/svx/source/sdr/contact/viewobjectcontactofsdrobj.cxx @@ -57,12 +57,17 @@ namespace sdr { } + bool ViewObjectContactOfSdrObj::isPrimitiveVisibleOnAnyLayer(const SetOfByte& aLayers) const + { + return aLayers.IsSet(getSdrObject().GetLayer()); + } + bool ViewObjectContactOfSdrObj::isPrimitiveVisible(const DisplayInfo& rDisplayInfo) const { const SdrObject& rObject = getSdrObject(); // Test layer visibility - if(!rDisplayInfo.GetProcessLayers().IsSet(rObject.GetLayer())) + if(!isPrimitiveVisibleOnAnyLayer(rDisplayInfo.GetProcessLayers())) { return false; } _______________________________________________ Libreoffice-commits mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
