diff options
Diffstat (limited to 'writerfilter/source/dmapper/CellColorHandler.cxx')
-rw-r--r-- | writerfilter/source/dmapper/CellColorHandler.cxx | 238 |
1 files changed, 238 insertions, 0 deletions
diff --git a/writerfilter/source/dmapper/CellColorHandler.cxx b/writerfilter/source/dmapper/CellColorHandler.cxx new file mode 100644 index 000000000000..2e1e9d6d06b4 --- /dev/null +++ b/writerfilter/source/dmapper/CellColorHandler.cxx @@ -0,0 +1,238 @@ +/************************************************************************* + * + * 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: CellColorHandler.cxx,v $ + * $Revision: 1.7 $ + * + * 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 + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ +#include <CellColorHandler.hxx> +#include <PropertyMap.hxx> +#include <doctok/resourceids.hxx> +#include <ConversionHelper.hxx> +#include <ooxml/resourceids.hxx> + +#define OOXML_COLOR_AUTO 0x0a //todo: AutoColor needs symbol + +namespace writerfilter { +namespace dmapper { + +using namespace ::com::sun::star; +using namespace ::writerfilter; +//using namespace ::std; + +/*-- 24.04.2007 09:06:35--------------------------------------------------- + + -----------------------------------------------------------------------*/ +CellColorHandler::CellColorHandler() : + m_nShadowType( 0 ), + m_nColor( 0xffffffff ), + m_nFillColor( 0xffffffff ), + m_bParagraph( false ) +{ +} +/*-- 24.04.2007 09:06:35--------------------------------------------------- + + -----------------------------------------------------------------------*/ +CellColorHandler::~CellColorHandler() +{ +} +/*-- 24.04.2007 09:06:35--------------------------------------------------- + + -----------------------------------------------------------------------*/ +void CellColorHandler::attribute(Id rName, Value & rVal) +{ + sal_Int32 nIntValue = rVal.getInt(); + (void)nIntValue; + (void)rName; + /* WRITERFILTERSTATUS: table: CellColor_attributedata */ + switch( rName ) + { + /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */ + case NS_rtf::LN_cellTopColor: + /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */ + case NS_rtf::LN_cellLeftColor: + /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */ + case NS_rtf::LN_cellBottomColor: + /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */ + case NS_rtf::LN_cellRightColor: + // nIntValue contains the color, directly + break; + /* WRITERFILTERSTATUS: done: 50, planned: 0, spent: 0 */ + case NS_ooxml::LN_CT_Shd_val: + { + //might be clear, pct5...90, some hatch types + //TODO: The values need symbolic names! + m_nShadowType = nIntValue; //clear == 0, solid: 1, pct5: 2, pct50:8, pct95: x3c, horzStripe:0x0e, thinVertStripe: 0x15 + } + break; + /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */ + case NS_ooxml::LN_CT_Shd_fill: + if( nIntValue == OOXML_COLOR_AUTO ) + nIntValue = 0xffffff; //fill color auto means white + m_nFillColor = nIntValue; + break; + /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */ + case NS_ooxml::LN_CT_Shd_color: + if( nIntValue == OOXML_COLOR_AUTO ) + nIntValue = 0; //shading color auto means black + //color of the shading + m_nColor = nIntValue; + break; +// case NS_rtf::LN_rgbrc: +// { +// writerfilter::Reference<Properties>::Pointer_t pProperties = rVal.getProperties(); +// if( pProperties.get()) +// { +// pProperties->resolve(*this); +// // +// } +// } +// break; + case NS_ooxml::LN_CT_Shd_themeFill: + case NS_ooxml::LN_CT_Shd_themeFillTint: + case NS_ooxml::LN_CT_Shd_themeFillShade: + // ignored + break; + default: + OSL_ENSURE( false, "unknown attribute"); + } +} +/*-- 24.04.2007 09:06:35--------------------------------------------------- + + -----------------------------------------------------------------------*/ +void CellColorHandler::sprm(Sprm & rSprm) +{ + (void)rSprm; +} +/*-- 24.04.2007 09:09:01--------------------------------------------------- + + -----------------------------------------------------------------------*/ +TablePropertyMapPtr CellColorHandler::getProperties() +{ + TablePropertyMapPtr pPropertyMap(new TablePropertyMap); +//code from binary word filter + static const sal_Int32 eMSGrayScale[] = + { + // Nul-Brush + 0, // 0 + // Solid-Brush + 1000, // 1 + // percent values + 50, // 2 + 100, // 3 + 200, // 4 + 250, // 5 + 300, // 6 + 400, // 7 + 500, // 8 + 600, // 9 + 700, // 10 + 750, // 11 + 800, // 12 + 900, // 13 + 333, // 14 Dark Horizontal + 333, // 15 Dark Vertical + 333, // 16 Dark Forward Diagonal + 333, // 17 Dark Backward Diagonal + 333, // 18 Dark Cross + 333, // 19 Dark Diagonal Cross + 333, // 20 Horizontal + 333, // 21 Vertical + 333, // 22 Forward Diagonal + 333, // 23 Backward Diagonal + 333, // 24 Cross + 333, // 25 Diagonal Cross + // some undefined values + 500, // 26 + 500, // 27 + 500, // 28 + 500, // 29 + 500, // 30 + 500, // 31 + 500, // 32 + 500, // 33 + 500, // 34 + // different shading types + 25, // 35 + 75, // 36 + 125, // 37 + 150, // 38 + 175, // 39 + 225, // 40 + 275, // 41 + 325, // 42 + 350, // 43 + 375, // 44 + 425, // 45 + 450, // 46 + 475, // 47 + 525, // 48 + 550, // 49 + 575, // 50 + 625, // 51 + 650, // 52 + 675, // 53 + 725, // 54 + 775, // 55 + 825, // 56 + 850, // 57 + 875, // 58 + 925, // 59 + 950, // 60 + 975, // 61 + // und zu guter Letzt: + 970 + };// 62 + if( m_nShadowType >= (sal_Int32)(sizeof( eMSGrayScale ) / sizeof ( eMSGrayScale[ 0 ] )) ) + m_nShadowType = 0; + + sal_Int32 nWW8BrushStyle = eMSGrayScale[m_nShadowType]; + sal_Int32 nApplyColor = 0; + if( !nWW8BrushStyle ) + { + // Null-Brush + nApplyColor = m_nFillColor; + } + else + { + sal_Int32 nFore = m_nColor; + sal_Int32 nBack = m_nFillColor; + + sal_uInt32 nRed = ((nFore & 0xff0000)>>0x10) * nWW8BrushStyle; + sal_uInt32 nGreen = ((nFore & 0xff00)>>0x8) * nWW8BrushStyle; + sal_uInt32 nBlue = (nFore & 0xff) * nWW8BrushStyle; + nRed += ((nBack & 0xff0000)>>0x10) * (1000L - nWW8BrushStyle); + nGreen += ((nBack & 0xff00)>>0x8)* (1000L - nWW8BrushStyle); + nBlue += (nBack & 0xff) * (1000L - nWW8BrushStyle); + + nApplyColor = ( (nRed/1000) << 0x10 ) + ((nGreen/1000) << 8) + nBlue/1000; + } + + pPropertyMap->Insert( m_bParagraph ? PROP_PARA_BACK_COLOR : PROP_BACK_COLOR, false, + uno::makeAny( nApplyColor )); + return pPropertyMap; +} +} //namespace dmapper +} //namespace writerfilter |