diff options
author | Armin Le Grand <alg@apache.org> | 2012-10-16 08:44:02 +0000 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2013-06-11 20:00:34 +0100 |
commit | 37aa7d81aacaae12dfe0fd2ade2779235bbf72f1 (patch) | |
tree | baf84cf5f8fcf62221dd75869d507d2396ae690b /svx | |
parent | e72e1c110ad42b779afbe74b47ca35c1849e06b2 (diff) |
Resolves: #i121194# Better support for graphic fill styles...
which are not bitmaps (svg, metafiles, ..)
(cherry picked from commit 7a652a2b2ab5e0d37e32185c8c5fac3af482bb76)
Conflicts:
drawinglayer/Library_drawinglayer.mk
drawinglayer/Package_inc.mk
drawinglayer/inc/drawinglayer/attribute/fillgraphicattribute.hxx
drawinglayer/inc/drawinglayer/attribute/sdrfillattribute.hxx
drawinglayer/inc/drawinglayer/attribute/sdrfillgraphicattribute.hxx
drawinglayer/inc/drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx
drawinglayer/inc/drawinglayer/primitive2d/fillgraphicprimitive2d.hxx
drawinglayer/inc/drawinglayer/primitive2d/polypolygonprimitive2d.hxx
drawinglayer/inc/drawinglayer/primitive3d/textureprimitive3d.hxx
drawinglayer/inc/drawinglayer/processor2d/vclprocessor2d.hxx
drawinglayer/inc/drawinglayer/texture/texture.hxx
drawinglayer/inc/drawinglayer/texture/texture3d.hxx
drawinglayer/source/attribute/fillbitmapattribute.cxx
drawinglayer/source/attribute/sdrfillattribute.cxx
drawinglayer/source/attribute/sdrfillgraphicattribute.cxx
drawinglayer/source/primitive2d/fillbitmapprimitive2d.cxx
drawinglayer/source/primitive2d/graphicprimitive2d.cxx
drawinglayer/source/primitive2d/polypolygonprimitive2d.cxx
drawinglayer/source/processor2d/canvasprocessor.cxx
svx/inc/svx/sdr/primitive2d/sdrattributecreator.hxx
svx/source/sdr/contact/objectcontacttools.cxx
vcl/inc/vcl/graph.hxx
unused file _vclmetafileprocessor2d.cxx deleted, was added by error
(cherry picked from commit ed0d53f8283cd3ce579a90b599118884d0db6119)
Conflicts:
drawinglayer/source/processor2d/_vclmetafileprocessor2d.cxx
Corrected canvasProcessor usage
(cherry picked from commit 7903c33f31c457eb6ff506958c4233f2a5d39bcf)
Conflicts:
svx/source/sdr/contact/objectcontacttools.cxx
Change-Id: I80008050b98dafc92fde043524843c13a75fe22c
d2fa667d7c127b4d735334e56093d1d4553b0a5b
e20c60c7d6472da1295a162d9a629be998861f62
Diffstat (limited to 'svx')
-rw-r--r-- | svx/source/sdr/contact/viewobjectcontact.cxx | 6 | ||||
-rw-r--r-- | svx/source/sdr/primitive2d/sdrattributecreator.cxx | 69 | ||||
-rw-r--r-- | svx/source/sdr/primitive2d/sdrdecompositiontools.cxx | 6 | ||||
-rw-r--r-- | svx/source/xoutdev/xattrbmp.cxx | 6 |
4 files changed, 56 insertions, 31 deletions
diff --git a/svx/source/sdr/contact/viewobjectcontact.cxx b/svx/source/sdr/contact/viewobjectcontact.cxx index 479d09d50f63..b2443d6a381e 100644 --- a/svx/source/sdr/contact/viewobjectcontact.cxx +++ b/svx/source/sdr/contact/viewobjectcontact.cxx @@ -131,6 +131,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 a6fd57358534..fcfba853bdf4 100644 --- a/svx/source/sdr/primitive2d/sdrattributecreator.cxx +++ b/svx/source/sdr/primitive2d/sdrattributecreator.cxx @@ -46,10 +46,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> @@ -417,7 +417,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) { @@ -480,7 +480,7 @@ namespace drawinglayer } case XFILL_BITMAP : { - aBitmap = createNewSdrFillBitmapAttribute(rSet); + aFillGraphic = createNewSdrFillGraphicAttribute(rSet); break; } } @@ -490,7 +490,7 @@ namespace drawinglayer aColor.getBColor(), aGradient, aHatch, - aBitmap); + aFillGraphic); } } @@ -610,44 +610,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)); } } @@ -662,8 +675,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 fe8320163241..047f5a77d452 100644 --- a/svx/source/sdr/primitive2d/sdrdecompositiontools.cxx +++ b/svx/source/sdr/primitive2d/sdrdecompositiontools.cxx @@ -27,7 +27,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> @@ -74,10 +74,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 { diff --git a/svx/source/xoutdev/xattrbmp.cxx b/svx/source/xoutdev/xattrbmp.cxx index d2a556676611..85255918e682 100644 --- a/svx/source/xoutdev/xattrbmp.cxx +++ b/svx/source/xoutdev/xattrbmp.cxx @@ -606,6 +606,12 @@ bool XFillBitmapItem::PutValue( const ::com::sun::star::uno::Any& rVal, sal_uInt if( bSetURL ) { maGraphicObject = GraphicObject::CreateGraphicObjectFromURL(aURL); + + // #121194# Prefer GraphicObject over bitmap object if both are provided + if(bSetBitmap && GRAPHIC_NONE != maGraphicObject.GetType()) + { + bSetBitmap = false; + } } if( bSetBitmap ) { |