[Libreoffice-commits] core.git: 5 commits - svx/inc svx/source xmloff/source
David Tardon
dtardon at redhat.com
Sun Mar 24 06:36:26 PDT 2013
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 ++-
svx/source/svdraw/svdibrow.cxx | 42 +++++++++---------
svx/source/svdraw/svdobj.cxx | 6 --
xmloff/source/style/impastp4.cxx | 2
7 files changed, 52 insertions(+), 26 deletions(-)
New commits:
commit 09d4525b11f396a68ca7c5cbb1ae3462db40c77c
Author: David Tardon <dtardon at redhat.com>
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.
Change-Id: I0ef75544a26817154642185864cafd4e6734fa38
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 @@ 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 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 @@ 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 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 @@ 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 e184bde..77c97cd 100644
--- a/svx/source/sdr/contact/viewobjectcontactofsdrobj.cxx
+++ b/svx/source/sdr/contact/viewobjectcontactofsdrobj.cxx
@@ -48,12 +48,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;
}
commit 9a100bc4f96a8a909b3a2b81cd09079612a9e909
Author: David Tardon <dtardon at redhat.com>
Date: Sun Mar 24 14:27:15 2013 +0100
avoid possible data inconsistency
GetLayer() is virtual, so it might not be always the same as mnLayerID.
Change-Id: Idabf02505678a7150a94498be3bc4ffc20ac56af
diff --git a/svx/source/svdraw/svdobj.cxx b/svx/source/svdraw/svdobj.cxx
index 6f6da7bb..40e6c0c 100644
--- a/svx/source/svdraw/svdobj.cxx
+++ b/svx/source/svdraw/svdobj.cxx
@@ -650,10 +650,7 @@ void SdrObject::getMergedHierarchyLayerSet(SetOfByte& rSet) const
void SdrObject::NbcSetLayer(SdrLayerID nLayer)
{
- if(GetLayer() != nLayer)
- {
- mnLayerID = nLayer;
- }
+ mnLayerID = nLayer;
}
void SdrObject::SetLayer(SdrLayerID nLayer)
commit 85dc7b010ac8e6d6ab0ac214ea6651cbe7598cf1
Author: David Tardon <dtardon at redhat.com>
Date: Sat Mar 23 13:49:17 2013 +0100
drop nonsensical warning
Change-Id: I3f63268535bf8ed13a4728ed3eb3528193712e6e
diff --git a/svx/source/svdraw/svdobj.cxx b/svx/source/svdraw/svdobj.cxx
index d12d56b..6f6da7bb 100644
--- a/svx/source/svdraw/svdobj.cxx
+++ b/svx/source/svdraw/svdobj.cxx
@@ -2932,7 +2932,6 @@ void SdrObject::impl_setUnoShape( const uno::Reference< uno::XInterface >& _rxUn
{
if ( !xOldUnoShape.is() )
{
- SAL_WARN_IF( mpSvxShape, "svx.sdr", "SdrObject::impl_setUnoShape: still having impl. pointer to dead object!" );
// make sure there is no stale impl. pointer if the UNO
// shape was destroyed meanwhile (remember we only hold weak
// reference to it!)
commit 9b9a70ec0a332f26a841575e8bb7bec44b6faa78
Author: David Tardon <dtardon at redhat.com>
Date: Sat Mar 23 12:29:07 2013 +0100
print typename of object, not pointer
Change-Id: I6d364851173b53c541b80e0d7e77d431f218ce15
diff --git a/xmloff/source/style/impastp4.cxx b/xmloff/source/style/impastp4.cxx
index 6f6f15c..2867858 100644
--- a/xmloff/source/style/impastp4.cxx
+++ b/xmloff/source/style/impastp4.cxx
@@ -89,7 +89,7 @@ void SvXMLAutoStylePoolP_Impl::AddFamily(
"Adding duplicate family " << rStrName <<
" with mismatching mapper ! " <<
typeid(*aFind->mxMapper.get()).name() << " " <<
- typeid(rMapper.get()).name() );
+ typeid(*rMapper.get()).name() );
}
#endif
commit d2e3b282947432ae49043074644cf6aa63cb5757
Author: David Tardon <dtardon at redhat.com>
Date: Sat Mar 23 11:29:34 2013 +0100
fix crash after conversion to STL
Change-Id: I0a49ce4ddf53eede0f940b392aab20afb5dd2cbe
diff --git a/svx/source/svdraw/svdibrow.cxx b/svx/source/svdraw/svdibrow.cxx
index 5ee5d0b..cb77ec4 100644
--- a/svx/source/svdraw/svdibrow.cxx
+++ b/svx/source/svdraw/svdibrow.cxx
@@ -562,27 +562,31 @@ void _SdrItemBrowserControl::BrkChangeEntry()
void _SdrItemBrowserControl::ImpSetEntry(const ImpItemListRow& rEntry, sal_uIntPtr nEntryNum)
{
- ImpItemListRow* pAktEntry=ImpGetEntry(nEntryNum);
- if (pAktEntry==NULL) {
+ SAL_WARN_IF(nEntryNum > aList.size(), "svx", "trying to set item " << nEntryNum << "in a vector of size " << aList.size());
+ if (nEntryNum >= aList.size()) {
+ nEntryNum = aList.size();
aList.push_back(new ImpItemListRow(rEntry));
RowInserted(nEntryNum);
- } else if (*pAktEntry!=rEntry) {
- bool bStateDiff=rEntry.eState!=pAktEntry->eState;
- bool bValueDiff=!rEntry.aValue.equals(pAktEntry->aValue);
- bool bAllDiff = true;
- if (bStateDiff || bValueDiff) {
- // check whether only state and/or value have changed
- ImpItemListRow aTest(rEntry);
- aTest.eState=pAktEntry->eState;
- aTest.aValue=pAktEntry->aValue;
- if (aTest==*pAktEntry) bAllDiff = false;
- }
- *pAktEntry=rEntry;
- if (bAllDiff) {
- RowModified(nEntryNum);
- } else {
- if (bStateDiff) RowModified(nEntryNum,ITEMBROWSER_STATECOL_ID);
- if (bValueDiff) RowModified(nEntryNum,ITEMBROWSER_VALUECOL_ID);
+ } else {
+ ImpItemListRow* pAktEntry=ImpGetEntry(nEntryNum);
+ if (*pAktEntry!=rEntry) {
+ bool bStateDiff=rEntry.eState!=pAktEntry->eState;
+ bool bValueDiff=!rEntry.aValue.equals(pAktEntry->aValue);
+ bool bAllDiff = true;
+ if (bStateDiff || bValueDiff) {
+ // check whether only state and/or value have changed
+ ImpItemListRow aTest(rEntry);
+ aTest.eState=pAktEntry->eState;
+ aTest.aValue=pAktEntry->aValue;
+ if (aTest==*pAktEntry) bAllDiff = false;
+ }
+ *pAktEntry=rEntry;
+ if (bAllDiff) {
+ RowModified(nEntryNum);
+ } else {
+ if (bStateDiff) RowModified(nEntryNum,ITEMBROWSER_STATECOL_ID);
+ if (bValueDiff) RowModified(nEntryNum,ITEMBROWSER_VALUECOL_ID);
+ }
}
}
}
More information about the Libreoffice-commits
mailing list