Date: prev next · Thread: first prev next last
2013 Archives by date, by thread · List index


Hi,

I have submitted a patch for review:

    https://gerrit.libreoffice.org/2963

To pull it, you can do:

    git pull ssh://gerrit.libreoffice.org:29418/core refs/changes/63/2963/1

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.

Change-Id: I0ef75544a26817154642185864cafd4e6734fa38
(cherry picked from commit 09d4525b11f396a68ca7c5cbb1ae3462db40c77c)
---
M svx/inc/svx/sdr/contact/viewobjectcontactofgroup.hxx
M svx/inc/svx/sdr/contact/viewobjectcontactofsdrobj.hxx
M svx/source/sdr/contact/viewobjectcontactofgroup.cxx
M svx/source/sdr/contact/viewobjectcontactofsdrobj.cxx
4 files changed, 27 insertions(+), 1 deletion(-)



diff --git a/svx/inc/svx/sdr/contact/viewobjectcontactofgroup.hxx 
b/svx/inc/svx/sdr/contact/viewobjectcontactofgroup.hxx
index b925889..fda5610 100644
--- a/svx/inc/svx/sdr/contact/viewobjectcontactofgroup.hxx
+++ b/svx/inc/svx/sdr/contact/viewobjectcontactofgroup.hxx
@@ -40,6 +40,9 @@
 
             // 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 d7609bd..e038442 100644
--- a/svx/inc/svx/sdr/contact/viewobjectcontactofsdrobj.hxx
+++ b/svx/inc/svx/sdr/contact/viewobjectcontactofsdrobj.hxx
@@ -25,6 +25,7 @@
 //////////////////////////////////////////////////////////////////////////////
 // predeclarations
 class SdrObject;
+class SetOfByte;
 
 //////////////////////////////////////////////////////////////////////////////
 
@@ -34,6 +35,14 @@
     {
         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 cdd21db..724b77e 100644
--- a/svx/source/sdr/contact/viewobjectcontactofgroup.cxx
+++ b/svx/source/sdr/contact/viewobjectcontactofgroup.cxx
@@ -25,6 +25,7 @@
 #include <drawinglayer/primitive2d/groupprimitive2d.hxx>
 #include <basegfx/tools/canvastools.hxx>
 #include <svx/sdr/contact/viewcontact.hxx>
+#include <svx/svdobj.hxx>
 
 //////////////////////////////////////////////////////////////////////////////
 
@@ -98,6 +99,14 @@
             }
             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 e184bde..77c97cd 100644
--- a/svx/source/sdr/contact/viewobjectcontactofsdrobj.cxx
+++ b/svx/source/sdr/contact/viewobjectcontactofsdrobj.cxx
@@ -48,12 +48,17 @@
         {
         }
 
+        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;
             }

-- 
To view, visit https://gerrit.libreoffice.org/2963
To unsubscribe, visit https://gerrit.libreoffice.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I0ef75544a26817154642185864cafd4e6734fa38
Gerrit-PatchSet: 1
Gerrit-Project: core
Gerrit-Branch: libreoffice-4-0-2
Gerrit-Owner: David Tardon <dtardon@redhat.com>


Context


Privacy Policy | Impressum (Legal Info) | Copyright information: Unless otherwise specified, all text and images on this website are licensed under the Creative Commons Attribution-Share Alike 3.0 License. This does not include the source code of LibreOffice, which is licensed under the Mozilla Public License (MPLv2). "LibreOffice" and "The Document Foundation" are registered trademarks of their corresponding registered owners or are in actual use as trademarks in one or more countries. Their respective logos and icons are also subject to international copyright laws. Use thereof is explained in our trademark policy.