21#include "KPrRectObject.h"
22#include "KPrGradient.h"
23#include "KPrRectObjectIface.h"
25#include <KoTextZoomHandler.h>
27#include <KoOasisContext.h>
36KPrRectObject::KPrRectObject()
43DCOPObject* KPrRectObject::dcopObject()
46 dcop =
new KPrRectObjectIface(
this );
50KPrRectObject::KPrRectObject(
const KoPen &_pen,
const TQBrush &_brush, FillType _fillType,
51 const TQColor &_gColor1,
const TQColor &_gColor2,
52 BCType _gType,
int _xRnd,
int _yRnd,
53 bool _unbalanced,
int _xfactor,
int _yfactor)
54 : KPr2DObject( _pen, _brush, _fillType, _gColor1, _gColor2, _gType,
55 _unbalanced, _xfactor, _yfactor )
61KPrRectObject &KPrRectObject::operator=(
const KPrRectObject & )
66TQDomDocumentFragment KPrRectObject::save( TQDomDocument& doc,
double offset )
68 TQDomDocumentFragment fragment=KPr2DObject::save(doc, offset);
69 if (xRnd!=0 || yRnd!=0) {
70 TQDomElement elem=doc.createElement(
"RNDS");
71 elem.setAttribute(
"x", xRnd);
72 elem.setAttribute(
"y", yRnd);
73 fragment.appendChild(elem);
78bool KPrRectObject::saveOasisObjectAttributes( KPOasisSaveContext &sc )
const
80 if ( xRnd > 0 && yRnd > 0 )
82 double cornerRadiusX = ext.width() / 200.0 * xRnd;
83 double cornerRadiusY = ext.height() / 200.0 * yRnd;
84 double cornerRadius = TQMIN( cornerRadiusX, cornerRadiusY );
85 sc.xmlWriter.addAttributePt(
"draw:corner-radius", cornerRadius );
86 if ( cornerRadiusX != cornerRadiusY )
88 sc.xmlWriter.addAttributePt(
"koffice:corner-radius-x", cornerRadiusX );
89 sc.xmlWriter.addAttributePt(
"koffice:corner-radius-y", cornerRadiusY );
96const char * KPrRectObject::getOasisElementName()
const
102void KPrRectObject::loadOasis(
const TQDomElement &element, KoOasisContext&context,
KPrLoadingInfo *info)
104 KPr2DObject::loadOasis(element, context, info);
105 if ( element.hasAttributeNS( KoXmlNS::koffice,
"corner-radius-x" ) &&
106 element.hasAttributeNS( KoXmlNS::koffice,
"corner-radius-y" ) )
108 xRnd = int( KoUnit::parseValue(
109 element.attributeNS( KoXmlNS::koffice,
"corner-radius-x", TQString() )
110 ) * 200.0 / ext.width() );
111 yRnd = int( KoUnit::parseValue(
112 element.attributeNS( KoXmlNS::koffice,
"corner-radius-y", TQString() )
113 ) * 200.0 / ext.height() );
115 else if ( element.hasAttributeNS( KoXmlNS::draw,
"corner-radius" ) )
117 xRnd = int( KoUnit::parseValue(
118 element.attributeNS( KoXmlNS::draw,
"corner-radius", TQString() )
119 ) * 200.0 / ext.width() );
122 kdDebug(33001) <<
" KPrRectObject : radius xRnd :" << xRnd <<
" yRnd :" << yRnd <<endl;
125double KPrRectObject::load(
const TQDomElement &element)
127 double offset=KPr2DObject::load(element);
128 TQDomElement e=element.namedItem(
"RNDS").toElement();
131 if(e.hasAttribute(
"x"))
132 tmp=e.attribute(
"x").toInt();
135 if(e.hasAttribute(
"y"))
136 tmp=e.attribute(
"y").toInt();
142TQPointArray KPrRectObject::boundingRegion(
int x,
int y,
int w,
int h,
int _xRnd,
int _yRnd)
const
146 int rxx = (_xRnd==0)?1: (w*_xRnd/200);
147 int ryy = (_yRnd==0)?1: (h*_yRnd/200);
156 a[0].makeArc( x, y, rxx2, ryy2, 1440, 1440);
157 a[1].makeArc( x, y+h-ryy2, rxx2, ryy2, 2880, 1440);
158 a[2].makeArc( x+w-rxx2, y+h-ryy2, rxx2, ryy2, 4320, 1440);
159 a[3].makeArc( x+w-rxx2, y, rxx2, ryy2, 0, 1440);
161 aa.resize( a[0].size() + a[1].size() + a[2].size() + a[3].size() );
163 for (
int k=0; k<4; k++ ) {
164 for ( uint i=0; i<a[k].size(); i++ ) {
165 aa.setPoint( j, a[k].point(i) );
172void KPrRectObject::paint( TQPainter* _painter, KoTextZoomHandler*_zoomHandler,
173 int ,
bool drawingShadow,
bool drawContour )
175 int ow = _zoomHandler->zoomItX( ext.width() );
176 int oh = _zoomHandler->zoomItY( ext.height() );
179 TQPen pen3( TQt::black, 1, TQt::DotLine );
180 _painter->setPen( pen3 );
181 _painter->setRasterOp( TQt::NotXorROP );
183 _painter->drawRoundRect( 0, 0, ow, oh, xRnd, yRnd );
187 TQPen pen2 = pen.zoomedPen( _zoomHandler );
188 int pw = ( pen2.style() == TQt::NoPen ) ? 1 : pen2.width();
189 _painter->setPen( pen2 );
191 if ( drawingShadow || getFillType() == FT_BRUSH || !gradient ) {
192 _painter->setPen( pen2 );
193 _painter->setBrush( getBrush() );
196 TQSize size( _zoomHandler->zoomSize( ext ) );
197 if ( m_redrawGradientPix || gradient->size() != size ) {
198 m_redrawGradientPix =
false;
199 gradient->setSize( size );
200 TQPointArray arr = boundingRegion( 0, 0, ow - pw + 1, oh - pw + 1, xRnd, yRnd );
201 TQRegion clipregion(arr);
202 m_gradientPix.resize ( ow, oh );
203 m_gradientPix.fill( TQt::white );
205 p.begin( &m_gradientPix );
206 p.setClipRegion( clipregion );
207 p.drawPixmap( 0, 0, gradient->pixmap() );
210 m_gradientPix.setMask( m_gradientPix.createHeuristicMask() );
212 _painter->drawPixmap( pw / 2, pw / 2, m_gradientPix, 0, 0, ow - pw + 1, oh - pw + 1 );
214 _painter->setBrush( TQt::NoBrush );
217 _painter->drawRoundRect( pw / 2, pw / 2, ow - pw + 1, oh - pw + 1, xRnd, yRnd );
Temporary information used only during loading.