diff options
Diffstat (limited to 'src/drawparts/solidshape.cpp')
-rw-r--r-- | src/drawparts/solidshape.cpp | 192 |
1 files changed, 192 insertions, 0 deletions
diff --git a/src/drawparts/solidshape.cpp b/src/drawparts/solidshape.cpp new file mode 100644 index 0000000..e60efef --- /dev/null +++ b/src/drawparts/solidshape.cpp @@ -0,0 +1,192 @@ +/*************************************************************************** + * Copyright (C) 2005 by David Saxton * + * [email protected] * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + ***************************************************************************/ + +#include "solidshape.h" +#include "libraryitem.h" +#include "resizeoverlay.h" + +#include <cmath> +#include <kiconloader.h> +#include <klocale.h> +#include <qpainter.h> + + +//BEGIN class DPRectangle +Item * DPRectangle::construct( ItemDocument *itemDocument, bool newItem, const char *id ) +{ + return new DPRectangle( itemDocument, newItem, id ); +} + +LibraryItem* DPRectangle::libraryItem() +{ + return new LibraryItem( + QString("dp/rectangle"), + i18n("Rectangle"), + i18n("Other"), + KGlobal::iconLoader()->loadIcon( "text", KIcon::Small ), + LibraryItem::lit_drawpart, + DPRectangle::construct ); +} + +DPRectangle::DPRectangle( ItemDocument *itemDocument, bool newItem, const char *id ) + : DrawPart( itemDocument, newItem, id ? id : "rectangle" ) +{ + m_pRectangularOverlay = new RectangularOverlay(this); + m_name = i18n("Rectangle"); + + createProperty( "background", Variant::Type::Bool ); + property("background")->setValue(false); + property("background")->setCaption( i18n("Display Background") ); + property("background")->setAdvanced(true); + + createProperty( "background-color", Variant::Type::Color ); + property("background-color")->setValue(Qt::white); + property("background-color")->setCaption( i18n("Background Color") ); + property("background-color")->setAdvanced(true); + + createProperty( "line-color", Variant::Type::Color ); + property("line-color")->setValue(Qt::black); + property("line-color")->setCaption( i18n("Line Color") ); + property("line-color")->setAdvanced(true); + + createProperty( "line-width", Variant::Type::Int ); + property("line-width")->setCaption( i18n("Line Width") ); + property("line-width")->setMinValue(1); + property("line-width")->setMaxValue(1000); + property("line-width")->setValue(1); + property("line-width")->setAdvanced(true); + + createProperty( "line-style", Variant::Type::PenStyle ); + property("line-style")->setAdvanced(true); + setDataPenStyle( "line-style", Qt::SolidLine ); +} + +DPRectangle::~DPRectangle() +{ +} + +void DPRectangle::setSelected( bool yes ) +{ + if ( yes == isSelected() ) + return; + + DrawPart::setSelected(yes); + m_pRectangularOverlay->showResizeHandles(yes); +} + + +void DPRectangle::dataChanged() +{ + bool displayBackground = dataBool("background"); + QColor line_color = dataColor("line-color"); + unsigned width = unsigned( dataInt("line-width") ); + Qt::PenStyle style = getDataPenStyle("line-style"); + + setPen( QPen( line_color, width, style ) ); + + if (displayBackground) + setBrush( dataColor("background-color") ); + else + setBrush( Qt::NoBrush ); + + postResize(); + update(); +} + + +QSize DPRectangle::minimumSize() const +{ + int side = QMAX(16, pen().width()+2); + return QSize( side, side ); +} + + +void DPRectangle::postResize() +{ + setItemPoints( m_sizeRect, false ); +} + + +QRect DPRectangle::drawRect() const +{ + int lw = pen().width(); + + if ( lw > m_sizeRect.width() ) + lw = m_sizeRect.width(); + + if ( lw > m_sizeRect.height() ) + lw = m_sizeRect.height(); + + return QRect( int(x() + m_sizeRect.x()+lw/2), int(y() + m_sizeRect.y()+lw/2), + m_sizeRect.width()-lw, m_sizeRect.height()-lw ); +} + + +void DPRectangle::drawShape( QPainter & p ) +{ + p.drawRect(drawRect()); +} +//END class DPRectangle + + +//BEGIN class DPEllipse +Item * DPEllipse::construct( ItemDocument *itemDocument, bool newItem, const char *id ) +{ + return new DPEllipse( itemDocument, newItem, id ); +} + +LibraryItem* DPEllipse::libraryItem() +{ + return new LibraryItem( + QString("dp/ellipse"), + i18n("Ellipse"), + i18n("Other"), + KGlobal::iconLoader()->loadIcon( "text", KIcon::Small ), + LibraryItem::lit_drawpart, + DPEllipse::construct ); +} + +DPEllipse::DPEllipse( ItemDocument *itemDocument, bool newItem, const char *id ) + : DPRectangle( itemDocument, newItem, id ? id : "ellipse" ) +{ + m_name = i18n("Ellipse"); +} + +DPEllipse::~DPEllipse() +{ +} + + +void DPEllipse::postResize() +{ + QRect br = m_sizeRect; + + // Make octagon that roughly covers ellipse + QPointArray pa(8); + pa[0] = QPoint( br.x() + br.width()/4, br.y() ); + pa[1] = QPoint( br.x() + 3*br.width()/4, br.y() ); + pa[2] = QPoint( br.x() + br.width(), br.y() + br.height()/4 ); + pa[3] = QPoint( br.x() + br.width(), br.y() + 3*br.height()/4 ); + pa[4] = QPoint( br.x() + 3*br.width()/4, br.y() + br.height() ); + pa[5] = QPoint( br.x() + br.width()/4, br.y() + br.height() ); + pa[6] = QPoint( br.x(), br.y() + 3*br.height()/4 ); + pa[7] = QPoint( br.x(), br.y() + br.height()/4 ); + + setItemPoints( pa, false ); +} + + +void DPEllipse::drawShape( QPainter & p ) +{ + p.drawEllipse(drawRect()); +} +//END class SolidShape + + |