From 9dd47e5734568dcad0a9ee58bb18a6430aaeef92 Mon Sep 17 00:00:00 2001 From: Vladimir Glazounov Date: Tue, 19 Aug 2008 22:50:13 +0000 Subject: INTEGRATION: CWS aw033 (1.1.2); FILE ADDED 2008/08/19 16:43:43 cl 1.1.2.4: fixed license files 2008/05/27 14:08:42 aw 1.1.2.3: #i39532# changes DEV300 m12 resync corrections 2007/11/01 16:43:09 thb 1.1.2.2: #i10000# gcc 4.2.1 build fixes 2006/06/02 13:51:56 aw 1.1.2.1: #i39523# added standard colorModifier --- basegfx/inc/basegfx/color/bcolormodifier.hxx | 147 +++++++++++++++++++++++++++ 1 file changed, 147 insertions(+) create mode 100644 basegfx/inc/basegfx/color/bcolormodifier.hxx (limited to 'basegfx/inc') diff --git a/basegfx/inc/basegfx/color/bcolormodifier.hxx b/basegfx/inc/basegfx/color/bcolormodifier.hxx new file mode 100644 index 000000000000..5116cdbf446e --- /dev/null +++ b/basegfx/inc/basegfx/color/bcolormodifier.hxx @@ -0,0 +1,147 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2008 by Sun Microsystems, Inc. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * $RCSfile: bcolormodifier.hxx,v $ + * + * $Revision: 1.2 $ + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +#ifndef _BGFX_COLOR_BCOLORMODIFIER_HXX +#define _BGFX_COLOR_BCOLORMODIFIER_HXX + +#include +#include + +////////////////////////////////////////////////////////////////////////////// + +namespace basegfx +{ + /** Descriptor for type of color modification + */ + enum BColorModifyMode + { + BCOLORMODIFYMODE_REPLACE, // replace all color with local color + BCOLORMODIFYMODE_INTERPOLATE, // interpolate color between given and local with local value + BCOLORMODIFYMODE_GRAY, // convert color to gray + BCOLORMODIFYMODE_BLACKANDWHITE // convert color to B&W, local value is treshhold + }; + + /** Class to hold a color, value and mode for a color modification. Color modification is + done calling the getModifiedColor() method + */ + class BColorModifier + { + protected: + ::basegfx::BColor maBColor; + double mfValue; + BColorModifyMode meMode; + + public: + BColorModifier( + const ::basegfx::BColor& rBColor, + double fValue = 0.5, + BColorModifyMode eMode = BCOLORMODIFYMODE_REPLACE) + : maBColor(rBColor), + mfValue(fValue), + meMode(eMode) + {} + + // compare operator(s) + bool operator==(const BColorModifier& rCompare) const + { + return (maBColor == rCompare.maBColor && mfValue == rCompare.mfValue && meMode == rCompare.meMode); + } + + bool operator!=(const BColorModifier& rCompare) const + { + return !(operator==(rCompare)); + } + + // data access + const ::basegfx::BColor& getBColor() const { return maBColor; } + double getValue() const { return mfValue; } + BColorModifyMode getMode() const { return meMode; } + + // compute modified color + ::basegfx::BColor getModifiedColor(const ::basegfx::BColor& aSourceColor) const; + }; + + /** Class to hold a stack of BColorModifiers and to get the modified color with + applying all existing entry changes + */ + class BColorModifierStack + { + protected: + ::std::vector< BColorModifier > maBColorModifiers; + + public: + sal_uInt32 count() const + { + return maBColorModifiers.size(); + } + + const BColorModifier& getBColorModifier(sal_uInt32 nIndex) const + { + OSL_ENSURE(nIndex < count(), "BColorModifierStack: Access out of range (!)"); + return maBColorModifiers[nIndex]; + } + + ::basegfx::BColor getModifiedColor(const ::basegfx::BColor& rSource) const + { + if(count()) + { + ::basegfx::BColor aRetval(rSource); + ::std::vector< BColorModifier >::const_iterator aEnd(maBColorModifiers.end()); + + while(aEnd != maBColorModifiers.begin()) + { + aRetval = (--aEnd)->getModifiedColor(aRetval); + } + + return aRetval; + } + else + { + return rSource; + } + } + + void push(const BColorModifier& rNew) + { + maBColorModifiers.push_back(rNew); + } + + void pop() + { + maBColorModifiers.pop_back(); + } + }; +} // end of namespace basegfx + +#endif // _BGFX_COLOR_BCOLORMODIFIER_HXX + +////////////////////////////////////////////////////////////////////////////// +// eof -- cgit v1.2.3