/************************************************************** * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * *************************************************************/ #include "precompiled_sw.hxx" #include #include #include #include #include #include #include #include namespace sw { namespace sidebarwindows { ////////////////////////////////////////////////////////////////////////////// // helper SwPostItShadowPrimitive // // Used to allow view-dependent primitive definition. For that purpose, the // initially created primitive (this one) always has to be view-independent, // but the decomposition is made view-dependent. Very simple primitive which // just remembers the discrete data and applies it at decomposition time. class ShadowPrimitive : public drawinglayer::primitive2d::DiscreteMetricDependentPrimitive2D { private: basegfx::B2DPoint maBasePosition; basegfx::B2DPoint maSecondPosition; ShadowState maShadowState; protected: virtual drawinglayer::primitive2d::Primitive2DSequence create2DDecomposition( const drawinglayer::geometry::ViewInformation2D& rViewInformation) const; public: ShadowPrimitive( const basegfx::B2DPoint& rBasePosition, const basegfx::B2DPoint& rSecondPosition, ShadowState aShadowState) : drawinglayer::primitive2d::DiscreteMetricDependentPrimitive2D(), maBasePosition(rBasePosition), maSecondPosition(rSecondPosition), maShadowState(aShadowState) {} // data access const basegfx::B2DPoint& getBasePosition() const { return maBasePosition; } const basegfx::B2DPoint& getSecondPosition() const { return maSecondPosition; } ShadowState getShadowState() const { return maShadowState; } virtual bool operator==( const drawinglayer::primitive2d::BasePrimitive2D& rPrimitive ) const; DeclPrimitrive2DIDBlock() }; drawinglayer::primitive2d::Primitive2DSequence ShadowPrimitive::create2DDecomposition( const drawinglayer::geometry::ViewInformation2D& /*rViewInformation*/) const { // get logic sizes in object coordinate system drawinglayer::primitive2d::Primitive2DSequence xRetval; basegfx::B2DRange aRange(getBasePosition()); switch(maShadowState) { case SS_NORMAL: { aRange.expand(basegfx::B2DTuple(getSecondPosition().getX(), getSecondPosition().getY() + (2.0 * getDiscreteUnit()))); const ::drawinglayer::attribute::FillGradientAttribute aFillGradientAttribute( drawinglayer::attribute::GRADIENTSTYLE_LINEAR, 0.0, 0.5, 0.5, 1800.0 * F_PI1800, basegfx::BColor(230.0/255.0,230.0/255.0,230.0/255.0), basegfx::BColor(180.0/255.0,180.0/255.0,180.0/255.0), 2); const drawinglayer::primitive2d::Primitive2DReference xReference( new drawinglayer::primitive2d::FillGradientPrimitive2D( aRange, aFillGradientAttribute)); xRetval = drawinglayer::primitive2d::Primitive2DSequence(&xReference, 1); break; } case SS_VIEW: { aRange.expand(basegfx::B2DTuple(getSecondPosition().getX(), getSecondPosition().getY() + (4.0 * getDiscreteUnit()))); const drawinglayer::attribute::FillGradientAttribute aFillGradientAttribute( drawinglayer::attribute::GRADIENTSTYLE_LINEAR, 0.0, 0.5, 0.5, 1800.0 * F_PI1800, basegfx::BColor(230.0/255.0,230.0/255.0,230.0/255.0), basegfx::BColor(180.0/255.0,180.0/255.0,180.0/255.0), 4); const drawinglayer::primitive2d::Primitive2DReference xReference( new drawinglayer::primitive2d::FillGradientPrimitive2D( aRange, aFillGradientAttribute)); xRetval = drawinglayer::primitive2d::Primitive2DSequence(&xReference, 1); break; } case SS_EDIT: { aRange.expand(basegfx::B2DTuple(getSecondPosition().getX(), getSecondPosition().getY() + (4.0 * getDiscreteUnit()))); const drawinglayer::attribute::FillGradientAttribute aFillGradientAttribute( drawinglayer::attribute::GRADIENTSTYLE_LINEAR, 0.0, 0.5, 0.5, 1800.0 * F_PI1800, basegfx::BColor(230.0/255.0,230.0/255.0,230.0/255.0), basegfx::BColor(83.0/255.0,83.0/255.0,83.0/255.0), 4); const drawinglayer::primitive2d::Primitive2DReference xReference( new drawinglayer::primitive2d::FillGradientPrimitive2D( aRange, aFillGradientAttribute)); xRetval = drawinglayer::primitive2d::Primitive2DSequence(&xReference, 1); break; } default: { break; } } return xRetval; } bool ShadowPrimitive::operator==( const drawinglayer::primitive2d::BasePrimitive2D& rPrimitive ) const { if(drawinglayer::primitive2d::DiscreteMetricDependentPrimitive2D::operator==(rPrimitive)) { const ShadowPrimitive& rCompare = static_cast< const ShadowPrimitive& >(rPrimitive); return (getBasePosition() == rCompare.getBasePosition() && getSecondPosition() == rCompare.getSecondPosition() && getShadowState() == rCompare.getShadowState()); } return false; } ImplPrimitrive2DIDBlock(ShadowPrimitive, PRIMITIVE2D_ID_SWSIDEBARSHADOWPRIMITIVE) /****** ShadowOverlayObject **************************************************/ /* static */ ShadowOverlayObject* ShadowOverlayObject::CreateShadowOverlayObject( SwView& rDocView ) { ShadowOverlayObject* pShadowOverlayObject( 0 ); if ( rDocView.GetDrawView() ) { SdrPaintWindow* pPaintWindow = rDocView.GetDrawView()->GetPaintWindow(0); if( pPaintWindow ) { sdr::overlay::OverlayManager* pOverlayManager = pPaintWindow->GetOverlayManager(); if ( pOverlayManager ) { pShadowOverlayObject = new ShadowOverlayObject( basegfx::B2DPoint(0,0), basegfx::B2DPoint(0,0), Color(0,0,0), SS_NORMAL ); pOverlayManager->add(*pShadowOverlayObject); } } } return pShadowOverlayObject; } /* static */ void ShadowOverlayObject::DestroyShadowOverlayObject( ShadowOverlayObject* pShadow ) { if ( pShadow ) { if ( pShadow->getOverlayManager() ) { pShadow->getOverlayManager()->remove(*pShadow); } delete pShadow; } } ShadowOverlayObject::ShadowOverlayObject( const basegfx::B2DPoint& rBasePos, const basegfx::B2DPoint& rSecondPosition, Color aBaseColor, ShadowState aState ) : OverlayObjectWithBasePosition(rBasePos, aBaseColor) , maSecondPosition(rSecondPosition) , mShadowState(aState) { } ShadowOverlayObject::~ShadowOverlayObject() { } drawinglayer::primitive2d::Primitive2DSequence ShadowOverlayObject::createOverlayObjectPrimitive2DSequence() { const drawinglayer::primitive2d::Primitive2DReference aReference( new ShadowPrimitive( getBasePosition(), GetSecondPosition(), GetShadowState() ) ); return drawinglayer::primitive2d::Primitive2DSequence(&aReference, 1); } void ShadowOverlayObject::SetShadowState(ShadowState aState) { if (mShadowState != aState) { mShadowState = aState; objectChange(); } } void ShadowOverlayObject::SetPosition( const basegfx::B2DPoint& rPoint1, const basegfx::B2DPoint& rPoint2) { if(!rPoint1.equal(getBasePosition()) || !rPoint2.equal(GetSecondPosition())) { maBasePosition = rPoint1; maSecondPosition = rPoint2; objectChange(); } } } } // end of namespace sw::sidebarwindows