diff options
author | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2010-01-20 01:29:50 +0000 |
---|---|---|
committer | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2010-01-20 01:29:50 +0000 |
commit | 8362bf63dea22bbf6736609b0f49c152f975eb63 (patch) | |
tree | 0eea3928e39e50fae91d4e68b21b1e6cbae25604 /kpresenter/KPrBezierCurveObject.cpp | |
download | koffice-8362bf63dea22bbf6736609b0f49c152f975eb63.tar.gz koffice-8362bf63dea22bbf6736609b0f49c152f975eb63.zip |
Added old abandoned KDE3 version of koffice
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/applications/koffice@1077364 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'kpresenter/KPrBezierCurveObject.cpp')
-rw-r--r-- | kpresenter/KPrBezierCurveObject.cpp | 302 |
1 files changed, 302 insertions, 0 deletions
diff --git a/kpresenter/KPrBezierCurveObject.cpp b/kpresenter/KPrBezierCurveObject.cpp new file mode 100644 index 00000000..152d466d --- /dev/null +++ b/kpresenter/KPrBezierCurveObject.cpp @@ -0,0 +1,302 @@ +// -*- Mode: c++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 4; -*- +/* This file is part of the KDE project + Copyright (C) 2001 Toshitaka Fujioka <fujioka@kde.org> + Copyright (C) 2005-2006 Thorsten Zachmann <zachmann@kde.org> + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. +*/ + +#include "KPrBezierCurveObject.h" +#include "KPrCubicBezierCurveObjectIface.h" +#include "KPrQuadricBezierCurveObjectIface.h" +#include "KPrUtils.h" +#include <KoTextZoomHandler.h> +#include <qpainter.h> +#include <qwmatrix.h> +#include <qdom.h> +#include "KoPointArray.h" +#include <kdebug.h> + +#include <math.h> +using namespace std; + +KPrBezierCurveObject::KPrBezierCurveObject() +: KPrPointObject() +{ +} + +KPrBezierCurveObject::KPrBezierCurveObject( const KoPointArray &_controlPoints, + const KoPointArray &_allPoints, + const KoSize &_size, const KoPen &_pen, + LineEnd _lineBegin, LineEnd _lineEnd ) +: KPrPointObject( _pen, _lineBegin, _lineEnd ) +{ + points = KoPointArray( _controlPoints ); + allPoints = KoPointArray( _allPoints ); + + ext = _size; +} + + +KPrBezierCurveObject &KPrBezierCurveObject::operator=( const KPrBezierCurveObject & ) +{ + return *this; +} + + +bool KPrBezierCurveObject::saveOasisObjectAttributes( KPOasisSaveContext &sc ) const +{ + KoRect rect( getRect() ); + sc.xmlWriter.addAttribute("svg:viewBox", QString( "0 0 %1 %2" ).arg( int( rect.width() * 100 ) ) + .arg( int( rect.height() * 100 ) ) ); + + unsigned int pointCount = points.count(); + unsigned int pos = 0; + + QString d; + d += QString( "M%1 %2" ).arg( int( points.at(pos).x() * 100 ) ) + .arg( int( points.at(pos).y() * 100 ) ); + + while ( pos + 4 <= pointCount ) + { + d += QString( "C%1 %2 %3 %4 %5 %6" ).arg( int( points.at( pos + 2 ).x() * 100 ) ) + .arg( int( points.at( pos + 2 ).y() * 100 ) ) + .arg( int( points.at( pos + 3 ).x() * 100 ) ) + .arg( int( points.at( pos + 3 ).y() * 100 ) ) + .arg( int( points.at( pos + 1 ).x() * 100 ) ) + .arg( int( points.at( pos + 1 ).y() * 100 ) ); + pos += 4; + } + + if ( pos < pointCount ) + { + d += QString( "L%1 %2" ).arg( int( points.at( pos + 1 ).x() * 100 ) ) + .arg( int( points.at( pos + 1 ).y() * 100 ) ); + } + + sc.xmlWriter.addAttribute( "svg:d", d ); + + return true; +} + + +const char * KPrBezierCurveObject::getOasisElementName() const +{ + return "draw:path"; +} + + +void KPrBezierCurveObject::loadOasis( const QDomElement &element, KoOasisContext & context, KPrLoadingInfo* info ) +{ + kdDebug(33001) << "KPrBezierCurveObject::loadOasis" << endl; + KPrPointObject::loadOasis( element, context, info ); + + allPoints = bezier2polyline( points ); + + //load marker + loadOasisMarker( context ); +} + +QDomDocumentFragment KPrBezierCurveObject::save( QDomDocument& doc, double offset ) +{ + return KPrPointObject::save( doc,offset ); +} + +double KPrBezierCurveObject::load(const QDomElement &element) +{ + double offset = KPrPointObject::load( element ); + + allPoints = bezier2polyline( points ); + + return offset; +} + +void KPrBezierCurveObject::updatePoints( double _fx, double _fy ) +{ + KPrPointObject::updatePoints( _fx, _fy ); + + int index = 0; + KoPointArray tmpPoints; + KoPointArray::ConstIterator it; + for ( it = allPoints.begin(); it != allPoints.end(); ++it ) { + KoPoint point = (*it); + double tmpX = point.x() * _fx; + double tmpY = point.y() * _fy; + + tmpPoints.putPoints( index, 1, tmpX,tmpY ); + ++index; + } + allPoints = tmpPoints; +} + +KoPointArray KPrBezierCurveObject::bezier2polyline( const KoPointArray &bezierPoints ) +{ + if ( bezierPoints.isNull() ) + return bezierPoints; + + KoPointArray _points( bezierPoints ); + KoPointArray _allPoints; + unsigned int pointCount = _points.count(); + + if ( pointCount == 2 ) // line + { + _allPoints = _points; + } + else // cubic bezier curve + { + KoPointArray tmpPointArray; + unsigned int _tmpIndex = 0; + unsigned int count = 0; + while ( count < pointCount ) + { + if ( pointCount >= ( count + 4 ) ) // for cubic bezier curve + { + double _firstX = _points.at( count ).x(); + double _firstY = _points.at( count ).y(); + + double _fourthX = _points.at( count + 1 ).x(); + double _fourthY = _points.at( count + 1 ).y(); + + double _secondX = _points.at( count + 2 ).x(); + double _secondY = _points.at( count + 2 ).y(); + + double _thirdX = _points.at( count + 3 ).x(); + double _thirdY = _points.at( count + 3 ).y(); + + KoPointArray bezierPoint; + bezierPoint.putPoints( 0, 4, _firstX,_firstY, _secondX,_secondY, + _thirdX,_thirdY, _fourthX,_fourthY ); + bezierPoint = bezierPoint.cubicBezier(); + + KoPointArray::ConstIterator it; + for ( it = bezierPoint.begin(); it != bezierPoint.end(); ++it ) + { + KoPoint _point = (*it); + tmpPointArray.putPoints( _tmpIndex, 1, _point.x(), _point.y() ); + ++_tmpIndex; + } + + count += 4; + } + else // for line + { + double _x1 = _points.at( count ).x(); + double _y1 = _points.at( count ).y(); + + double _x2 = _points.at( count + 1 ).x(); + double _y2 = _points.at( count + 1 ).y(); + + tmpPointArray.putPoints( _tmpIndex, 2, _x1,_y1, _x2,_y2 ); + _tmpIndex += 2; + count += 2; + } + } + + _allPoints = tmpPointArray; + } + + return _allPoints; +} + +void KPrBezierCurveObject::flip(bool horizontal ) +{ + KPrPointObject::flip( horizontal ); + + KoPointArray tmpPoints; + int index = 0; + if ( ! horizontal ) + { + KoPointArray::ConstIterator it; + double horiz = getSize().height()/2; + for ( it = allPoints.begin(); it != allPoints.end(); ++it ) + { + KoPoint point = (*it); + if ( point.y()> horiz ) + tmpPoints.putPoints( index, 1, point.x(),point.y()- 2*(point.y()-horiz) ); + else + tmpPoints.putPoints( index, 1, point.x(),point.y()+ 2*(horiz - point.y()) ); + ++index; + } + } + else + { + KoPointArray::ConstIterator it; + double vert = getSize().width()/2; + for ( it = allPoints.begin(); it != allPoints.end(); ++it ) + { + KoPoint point = (*it); + if ( point.y()> vert ) + tmpPoints.putPoints( index, 1, point.x()- 2*(point.x()-vert), point.y() ); + else + tmpPoints.putPoints( index, 1, point.x()+ 2*(vert - point.x()),point.y() ); + ++index; + } + } + + allPoints = tmpPoints; +} + + +KoPointArray KPrBezierCurveObject::getDrawingPoints() const +{ + return allPoints; +} + + +KPrCubicBezierCurveObject::KPrCubicBezierCurveObject() +: KPrBezierCurveObject() +{ +} + + +KPrCubicBezierCurveObject::KPrCubicBezierCurveObject( const KoPointArray &_controlPoints, + const KoPointArray &_allPoints, + const KoSize & _size, const KoPen &_pen, + LineEnd _lineBegin, LineEnd _lineEnd ) +: KPrBezierCurveObject( _controlPoints, _allPoints, _size, _pen, _lineBegin, _lineEnd ) +{ +} + + +DCOPObject* KPrCubicBezierCurveObject::dcopObject() +{ + if ( !dcop ) + dcop = new KPrCubicBezierCurveObjectIface( this ); + return dcop; +} + + +KPrQuadricBezierCurveObject::KPrQuadricBezierCurveObject() +: KPrBezierCurveObject() +{ +} + + +KPrQuadricBezierCurveObject::KPrQuadricBezierCurveObject( const KoPointArray &_controlPoints, + const KoPointArray &_allPoints, + const KoSize & _size, const KoPen &_pen, + LineEnd _lineBegin, LineEnd _lineEnd ) +: KPrBezierCurveObject( _controlPoints, _allPoints, _size, _pen, _lineBegin, _lineEnd ) +{ +} + + +DCOPObject* KPrQuadricBezierCurveObject::dcopObject() +{ + if ( !dcop ) + dcop = new KPrQuadricBezierCurveObjectIface( this ); + return dcop; +} |