summaryrefslogtreecommitdiff
path: root/svx/source/sdr
diff options
context:
space:
mode:
authorArmin Le Grand <alg@apache.org>2012-10-16 08:44:02 +0000
committerArmin Le Grand <alg@apache.org>2012-10-16 08:44:02 +0000
commit7a652a2b2ab5e0d37e32185c8c5fac3af482bb76 (patch)
tree3cf859e86a5d4ba2a39e75d1f5bc65a5d8bc10b2 /svx/source/sdr
parent9d483a7b084404ed9df6525f09a3bb600a5859f8 (diff)
#121194# Better support for graphic fill styles which are not bitmaps (svg, metafiles, ..)
Notes
Diffstat (limited to 'svx/source/sdr')
-rw-r--r--svx/source/sdr/contact/objectcontacttools.cxx1
-rw-r--r--svx/source/sdr/contact/viewobjectcontact.cxx6
-rw-r--r--svx/source/sdr/primitive2d/sdrattributecreator.cxx69
-rw-r--r--svx/source/sdr/primitive2d/sdrdecompositiontools.cxx6
4 files changed, 50 insertions, 32 deletions
diff --git a/svx/source/sdr/contact/objectcontacttools.cxx b/svx/source/sdr/contact/objectcontacttools.cxx
index b2281f8ee7c2..efe79965d78a 100644
--- a/svx/source/sdr/contact/objectcontacttools.cxx
+++ b/svx/source/sdr/contact/objectcontacttools.cxx
@@ -32,7 +32,6 @@
#include <basegfx/tools/canvastools.hxx>
#include <drawinglayer/processor2d/vclmetafileprocessor2d.hxx>
#include <drawinglayer/processor2d/vclpixelprocessor2d.hxx>
-#include <drawinglayer/processor2d/canvasprocessor.hxx>
#include <vcl/window.hxx>
//////////////////////////////////////////////////////////////////////////////
diff --git a/svx/source/sdr/contact/viewobjectcontact.cxx b/svx/source/sdr/contact/viewobjectcontact.cxx
index af316c58e141..255cd49de8a2 100644
--- a/svx/source/sdr/contact/viewobjectcontact.cxx
+++ b/svx/source/sdr/contact/viewobjectcontact.cxx
@@ -138,6 +138,12 @@ namespace
case PRIMITIVE2D_ID_SDRPATHPRIMITIVE2D :
case PRIMITIVE2D_ID_SDRRECTANGLEPRIMITIVE2D :
+ // #121194# With Graphic as Bitmap FillStyle, also check
+ // for primitives filled with animated graphics
+ case PRIMITIVE2D_ID_POLYPOLYGONGRAPHICPRIMITIVE2D:
+ case PRIMITIVE2D_ID_FILLGRAPHICPRIMITIVE2D:
+ case PRIMITIVE2D_ID_TRANSFORMPRIMITIVE2D:
+
// decompose evtl. animated text contained in MaskPrimitive2D
// or group rimitives
case PRIMITIVE2D_ID_MASKPRIMITIVE2D :
diff --git a/svx/source/sdr/primitive2d/sdrattributecreator.cxx b/svx/source/sdr/primitive2d/sdrattributecreator.cxx
index d25bafd9859d..20cb325ec062 100644
--- a/svx/source/sdr/primitive2d/sdrattributecreator.cxx
+++ b/svx/source/sdr/primitive2d/sdrattributecreator.cxx
@@ -51,10 +51,10 @@
#include <svx/sdsxyitm.hxx>
#include <svx/sdshcitm.hxx>
#include <svx/sdshtitm.hxx>
-#include <drawinglayer/attribute/sdrfillbitmapattribute.hxx>
+#include <drawinglayer/attribute/sdrfillgraphicattribute.hxx>
#include <basegfx/polygon/b2dlinegeometry.hxx>
#include <svx/svdotext.hxx>
-#include <drawinglayer/attribute/fillbitmapattribute.hxx>
+#include <drawinglayer/attribute/fillgraphicattribute.hxx>
#include <svx/sdr/attribute/sdrtextattribute.hxx>
#include <svx/xbtmpit.hxx>
#include <svl/itempool.hxx>
@@ -402,7 +402,7 @@ namespace drawinglayer
const Color aColor(((const XFillColorItem&)(rSet.Get(XATTR_FILLCOLOR))).GetColorValue());
attribute::FillGradientAttribute aGradient;
attribute::FillHatchAttribute aHatch;
- attribute::SdrFillBitmapAttribute aBitmap;
+ attribute::SdrFillGraphicAttribute aFillGraphic;
switch(eStyle)
{
@@ -465,7 +465,7 @@ namespace drawinglayer
}
case XFILL_BITMAP :
{
- aBitmap = createNewSdrFillBitmapAttribute(rSet);
+ aFillGraphic = createNewSdrFillGraphicAttribute(rSet);
break;
}
}
@@ -475,7 +475,7 @@ namespace drawinglayer
aColor.getBColor(),
aGradient,
aHatch,
- aBitmap);
+ aFillGraphic);
}
}
@@ -590,44 +590,57 @@ namespace drawinglayer
return attribute::FillGradientAttribute();
}
- attribute::SdrFillBitmapAttribute createNewSdrFillBitmapAttribute(const SfxItemSet& rSet)
+ attribute::SdrFillGraphicAttribute createNewSdrFillGraphicAttribute(const SfxItemSet& rSet)
{
- BitmapEx aBitmapEx(((const XFillBitmapItem&)(rSet.Get(XATTR_FILLBITMAP))).GetGraphicObject().GetGraphic().GetBitmapEx());
+ Graphic aGraphic(((const XFillBitmapItem&)(rSet.Get(XATTR_FILLBITMAP))).GetGraphicObject().GetGraphic());
- // make sure it's not empty, use default instead
- if(aBitmapEx.IsEmpty())
+ if(!(GRAPHIC_BITMAP == aGraphic.GetType() || GRAPHIC_GDIMETAFILE == aGraphic.GetType()))
{
- // #i118485# Add PrefMapMode and PrefSize to avoid mini-tiling and
- // expensive primitive processing in this case. Use 10x10 cm
- aBitmapEx = Bitmap(Size(4,4), 8);
- aBitmapEx.SetPrefMapMode(MapMode(MAP_100TH_MM));
- aBitmapEx.SetPrefSize(Size(10000.0, 10000.0));
+ // no content if not bitmap or metafile
+ OSL_ENSURE(false, "No fill graphic in SfxItemSet (!)");
+ return attribute::SdrFillGraphicAttribute();
}
- // if there is no logical size, create a size from pixel size and set MapMode accordingly
- if(0L == aBitmapEx.GetPrefSize().Width() || 0L == aBitmapEx.GetPrefSize().Height())
+ Size aPrefSize(aGraphic.GetPrefSize());
+
+ if(!aPrefSize.Width() || !aPrefSize.Height())
+ {
+ // if there is no logical size, create a size from pixel size and set MapMode accordingly
+ if(GRAPHIC_BITMAP == aGraphic.GetType())
+ {
+ aGraphic.SetPrefSize(aGraphic.GetBitmapEx().GetSizePixel());
+ aGraphic.SetPrefMapMode(MAP_PIXEL);
+ }
+ }
+
+ if(!aPrefSize.Width() || !aPrefSize.Height())
{
- aBitmapEx.SetPrefSize(aBitmapEx.GetSizePixel());
- aBitmapEx.SetPrefMapMode(MAP_PIXEL);
+ // no content if no size
+ OSL_ENSURE(false, "Graphic has no size in SfxItemSet (!)");
+ return attribute::SdrFillGraphicAttribute();
}
- // convert size and MapMode to destination logical size and MapMode. The created
- // bitmap must have a valid logical size (PrefSize)
+ // convert size and MapMode to destination logical size and MapMode
const MapUnit aDestinationMapUnit((MapUnit)rSet.GetPool()->GetMetric(0));
- if(aBitmapEx.GetPrefMapMode() != aDestinationMapUnit)
+ if(aGraphic.GetPrefMapMode() != aDestinationMapUnit)
{
// #i100360# for MAP_PIXEL, LogicToLogic will not work properly,
// so fallback to Application::GetDefaultDevice()
- if(MAP_PIXEL == aBitmapEx.GetPrefMapMode().GetMapUnit())
+ if(MAP_PIXEL == aGraphic.GetPrefMapMode().GetMapUnit())
{
- aBitmapEx.SetPrefSize(Application::GetDefaultDevice()->PixelToLogic(
- aBitmapEx.GetPrefSize(), aDestinationMapUnit));
+ aGraphic.SetPrefSize(
+ Application::GetDefaultDevice()->PixelToLogic(
+ aGraphic.GetPrefSize(),
+ aDestinationMapUnit));
}
else
{
- aBitmapEx.SetPrefSize(OutputDevice::LogicToLogic(
- aBitmapEx.GetPrefSize(), aBitmapEx.GetPrefMapMode(), aDestinationMapUnit));
+ aGraphic.SetPrefSize(
+ OutputDevice::LogicToLogic(
+ aGraphic.GetPrefSize(),
+ aGraphic.GetPrefMapMode(),
+ aDestinationMapUnit));
}
}
@@ -642,8 +655,8 @@ namespace drawinglayer
(double)((const SfxUInt16Item&) (rSet.Get(XATTR_FILLBMP_POSOFFSETX))).GetValue(),
(double)((const SfxUInt16Item&) (rSet.Get(XATTR_FILLBMP_POSOFFSETY))).GetValue());
- return attribute::SdrFillBitmapAttribute(
- aBitmapEx,
+ return attribute::SdrFillGraphicAttribute(
+ aGraphic,
aSize,
aOffset,
aOffsetPosition,
diff --git a/svx/source/sdr/primitive2d/sdrdecompositiontools.cxx b/svx/source/sdr/primitive2d/sdrdecompositiontools.cxx
index 3b58c04d5717..2a029f112280 100644
--- a/svx/source/sdr/primitive2d/sdrdecompositiontools.cxx
+++ b/svx/source/sdr/primitive2d/sdrdecompositiontools.cxx
@@ -32,7 +32,7 @@
#include <drawinglayer/attribute/strokeattribute.hxx>
#include <drawinglayer/attribute/linestartendattribute.hxx>
#include <drawinglayer/primitive2d/polygonprimitive2d.hxx>
-#include <drawinglayer/attribute/sdrfillbitmapattribute.hxx>
+#include <drawinglayer/attribute/sdrfillgraphicattribute.hxx>
#include <basegfx/matrix/b2dhommatrix.hxx>
#include <drawinglayer/primitive2d/shadowprimitive2d.hxx>
#include <svx/sdr/attribute/sdrtextattribute.hxx>
@@ -79,10 +79,10 @@ namespace drawinglayer
{
pNewFillPrimitive = new PolyPolygonHatchPrimitive2D(aScaledPolyPolygon, rFill.getColor(), rFill.getHatch());
}
- else if(!rFill.getBitmap().isDefault())
+ else if(!rFill.getFillGraphic().isDefault())
{
const basegfx::B2DRange aRange(basegfx::tools::getRange(aScaledPolyPolygon));
- pNewFillPrimitive = new PolyPolygonBitmapPrimitive2D(aScaledPolyPolygon, rFill.getBitmap().getFillBitmapAttribute(aRange));
+ pNewFillPrimitive = new PolyPolygonGraphicPrimitive2D(aScaledPolyPolygon, rFill.getFillGraphic().createFillGraphicAttribute(aRange));
}
else
{