1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 24 // MARKER(update_precomp.py): autogen include statement, do not remove 25 #include "precompiled_drawinglayer.hxx" 26 27 #include <drawinglayer/primitive2d/shadowprimitive2d.hxx> 28 #include <basegfx/color/bcolormodifier.hxx> 29 #include <drawinglayer/primitive2d/modifiedcolorprimitive2d.hxx> 30 #include <drawinglayer/primitive2d/transformprimitive2d.hxx> 31 #include <basegfx/tools/canvastools.hxx> 32 #include <drawinglayer/primitive2d/transparenceprimitive2d.hxx> 33 #include <drawinglayer/primitive2d/unifiedtransparenceprimitive2d.hxx> 34 #include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx> 35 36 ////////////////////////////////////////////////////////////////////////////// 37 38 using namespace com::sun::star; 39 40 ////////////////////////////////////////////////////////////////////////////// 41 42 namespace drawinglayer 43 { 44 namespace primitive2d 45 { ShadowPrimitive2D(const basegfx::B2DHomMatrix & rShadowTransform,const basegfx::BColor & rShadowColor,const Primitive2DSequence & rChildren)46 ShadowPrimitive2D::ShadowPrimitive2D( 47 const basegfx::B2DHomMatrix& rShadowTransform, 48 const basegfx::BColor& rShadowColor, 49 const Primitive2DSequence& rChildren) 50 : GroupPrimitive2D(rChildren), 51 maShadowTransform(rShadowTransform), 52 maShadowColor(rShadowColor) 53 { 54 } 55 operator ==(const BasePrimitive2D & rPrimitive) const56 bool ShadowPrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const 57 { 58 if(BasePrimitive2D::operator==(rPrimitive)) 59 { 60 const ShadowPrimitive2D& rCompare = static_cast< const ShadowPrimitive2D& >(rPrimitive); 61 62 return (getShadowTransform() == rCompare.getShadowTransform() 63 && getShadowColor() == rCompare.getShadowColor()); 64 } 65 66 return false; 67 } 68 getB2DRange(const geometry::ViewInformation2D & rViewInformation) const69 basegfx::B2DRange ShadowPrimitive2D::getB2DRange(const geometry::ViewInformation2D& rViewInformation) const 70 { 71 basegfx::B2DRange aRetval(getB2DRangeFromPrimitive2DSequence(getChildren(), rViewInformation)); 72 aRetval.transform(getShadowTransform()); 73 return aRetval; 74 } 75 get2DDecomposition(const geometry::ViewInformation2D &) const76 Primitive2DSequence ShadowPrimitive2D::get2DDecomposition(const geometry::ViewInformation2D& /*rViewInformation*/) const 77 { 78 Primitive2DSequence aRetval; 79 80 if(getChildren().hasElements()) 81 { 82 // create a modifiedColorPrimitive containing the shadow color and the content 83 const basegfx::BColorModifierSharedPtr aBColorModifier( 84 new basegfx::BColorModifier_replace( 85 getShadowColor())); 86 const Primitive2DReference xRefA( 87 new ModifiedColorPrimitive2D( 88 getChildren(), 89 aBColorModifier)); 90 const Primitive2DSequence aSequenceB(&xRefA, 1L); 91 92 // build transformed primitiveVector with shadow offset and add to target 93 const Primitive2DReference xRefB(new TransformPrimitive2D(getShadowTransform(), aSequenceB)); 94 aRetval = Primitive2DSequence(&xRefB, 1L); 95 } 96 97 return aRetval; 98 } 99 100 // provide unique ID 101 ImplPrimitrive2DIDBlock(ShadowPrimitive2D, PRIMITIVE2D_ID_SHADOWPRIMITIVE2D) 102 103 } // end of namespace primitive2d 104 } // end of namespace drawinglayer 105 106 /* vim: set noet sw=4 ts=4: */ 107