20#include "kspread_brush.h"
22#include <KoGenStyles.h>
23#include <KoOasisStyles.h>
24#include <KoOasisContext.h>
27KSpreadBrush::KSpreadBrush()
28: m_gColor1( TQt::red )
29, m_gColor2( TQt::green )
31, m_fillType( FT_BRUSH )
32, m_unbalanced( false )
39KSpreadBrush::KSpreadBrush(
const TQBrush &brush,
const TQColor &gColor1,
const TQColor &gColor2,
40 BCType gType, FillType fillType,
bool unbalanced,
41 int xfactor,
int yfactor )
46, m_fillType( fillType )
47, m_unbalanced( unbalanced )
54KSpreadBrush & KSpreadBrush::operator=(
const KSpreadBrush &brush )
56 m_brush = brush.m_brush;
57 m_gColor1 = brush.m_gColor1;
58 m_gColor2 = brush.m_gColor2;
59 m_gType = brush.m_gType;
60 m_fillType = brush.m_fillType;
61 m_unbalanced = brush.m_unbalanced;
62 m_xfactor = brush.m_xfactor;
63 m_yfactor = brush.m_yfactor;
68void KSpreadBrush::saveOasisFillStyle( KoGenStyle &styleObjectAuto, KoGenStyles& mainStyles )
const
74 if( m_brush.style() != TQt::NoBrush )
76 KoOasisStyles::saveOasisFillStyle( styleObjectAuto, mainStyles, m_brush );
80 styleObjectAuto.addProperty(
"draw:fill",
"none" );
85 styleObjectAuto.addProperty(
"draw:fill",
"gradient" );
87 styleObjectAuto.addProperty(
"draw:fill-gradient-name", saveOasisGradientStyle( mainStyles ) );
155void KSpreadBrush::loadOasisFillStyle( KoOasisContext &context,
const char * propertyType )
157 KoStyleStack &styleStack = context.styleStack();
158 styleStack.setTypeProperties( propertyType );
160 if ( styleStack.hasAttributeNS( KoXmlNS::draw,
"fill" ) )
162 const TQString fill = styleStack.attributeNS( KoXmlNS::draw,
"fill" );
163 kdDebug(33001) <<
" load object gradient fill type :" << fill << endl;
165 if ( fill ==
"solid" || fill ==
"hatch" )
167 setBrush( KoOasisStyles::loadOasisFillStyle( styleStack, fill, context.oasisStyles() ) );
169 else if ( fill ==
"gradient" )
171 TQString style = styleStack.attributeNS( KoXmlNS::draw,
"fill-gradient-name" );
172 TQDomElement* draw = context.oasisStyles().drawStyles()[style];
176 setGColor1( draw->attributeNS( KoXmlNS::draw,
"start-color", TQString() ) );
177 setGColor2( draw->attributeNS( KoXmlNS::draw,
"end-color", TQString() ) );
179 TQString type = draw->attributeNS( KoXmlNS::draw,
"style", TQString() );
180 kdDebug()<<
" type :"<<type<<endl;
181 if ( type ==
"linear" )
183 int angle = draw->attributeNS( KoXmlNS::draw,
"angle", TQString() ).toInt() / 10;
186 angle = abs( angle );
187 angle -= ( (int) ( angle / 360 ) ) * 360;
191 int lower, upper, nearAngle = 0;
192 for ( lower = 0, upper = 45; upper < 360; lower += 45, upper += 45 )
194 if ( upper >= angle )
196 int distanceToUpper = abs( angle - upper );
197 int distanceToLower = abs( angle - lower );
198 nearAngle = distanceToUpper > distanceToLower ? lower : upper;
203 if ( nearAngle == 0 || nearAngle == 180 )
204 setGType( BCT_GHORZ );
205 else if ( nearAngle == 90 || nearAngle == 270 )
206 setGType( BCT_GVERT );
207 else if ( nearAngle == 45 || nearAngle == 225 )
208 setGType( BCT_GDIAGONAL1 );
209 else if ( nearAngle == 135 || nearAngle == 315 )
210 setGType( BCT_GDIAGONAL2 );
212 else if ( type ==
"radial" || type ==
"ellipsoid" )
213 setGType( BCT_GCIRCLE );
214 else if ( type ==
"square" || type ==
"rectangular" )
215 setGType( BCT_GRECT );
216 else if ( type ==
"axial" )
217 setGType( BCT_GPIPECROSS );
219 setGType( BCT_PLAIN );
224 if ( draw->hasAttributeNS( KoXmlNS::draw,
"cx" ) )
225 x = draw->attributeNS( KoXmlNS::draw,
"cx", TQString() ).remove(
'%' ).toInt();
229 if ( draw->hasAttributeNS( KoXmlNS::draw,
"cy" ) )
230 y = draw->attributeNS( KoXmlNS::draw,
"cy", TQString() ).remove(
'%' ).toInt();
234 if ( x == 50 && y == 50 )
236 setGUnbalanced(
false );
242 setGUnbalanced(
true );
244 setGXFactor( 4 * x - 200 );
245 setGYFactor( 4 * y - 200 );
253 tmpBrush.setStyle(
static_cast<TQt::BrushStyle
>( 1 ) );
254 setBrush( tmpBrush );
255 setFillType( FT_GRADIENT );
257 else if ( fill ==
"none" )
261 else if ( fill ==
"bitmap" )