/* * Copyright (C) 2012 Webdoc SA * * This file is part of Open-Sankoré. * * Open-Sankoré 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, version 2, * with a specific linking exception for the OpenSSL project's * "OpenSSL" library (or with modified versions of it that use the * same license as the "OpenSSL" library). * * Open-Sankoré 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 Open-Sankoré; if not, see * <http://www.gnu.org/licenses/>. */ #ifndef UBGRAPHICSPOLYGONITEM_H #define UBGRAPHICSPOLYGONITEM_H #include <QtGui> #include "core/UB.h" #include "UBItem.h" #include "UBGraphicsStrokesGroup.h" #include "domain/UBGraphicsGroupContainerItem.h" class UBItem; class UBGraphicsScene; class UBGraphicsStroke; class UBGraphicsPolygonItem : public QGraphicsPolygonItem, public UBItem { public: UBGraphicsPolygonItem(QGraphicsItem * parent = 0 ); UBGraphicsPolygonItem(const QLineF& line, qreal pWidth); UBGraphicsPolygonItem(const QPolygonF & polygon, QGraphicsItem * parent = 0); ~UBGraphicsPolygonItem(); void initialize(); void setUuid(const QUuid &pUuid); void setStrokesGroup(UBGraphicsStrokesGroup* group); UBGraphicsStrokesGroup* strokesGroup() const{return mpGroup;} void setColor(const QColor& color); QColor color() const; virtual UBGraphicsScene* scene(); inline void subtract(UBGraphicsPolygonItem *pi) { if (boundingRect().intersects(pi->boundingRect())) { QPolygonF subtractedPolygon = polygon().subtracted(pi->polygon()); if (polygon() != subtractedPolygon) { mIsNominalLine = false; QGraphicsPolygonItem::setPolygon(subtractedPolygon); } } } inline void subtractIntersecting(UBGraphicsPolygonItem *pi) { QPolygonF subtractedPolygon = polygon().subtracted(pi->polygon()); if (polygon() != subtractedPolygon) { mIsNominalLine = false; QGraphicsPolygonItem::setPolygon(subtractedPolygon); } } enum { Type = UBGraphicsItemType::PolygonItemType }; virtual int type() const { return Type; } void setPolygon(const QPolygonF pPolygon) { mIsNominalLine = false; QGraphicsPolygonItem::setPolygon(pPolygon); } virtual UBItem* deepCopy() const; virtual void copyItemParameters(UBItem *copy) const; QLineF originalLine() { return mOriginalLine;} qreal originalWidth() { return mOriginalWidth;} bool isNominalLine() {return mIsNominalLine;} QColor colorOnDarkBackground() const { return mColorOnDarkBackground; } void setColorOnDarkBackground(QColor pColorOnDarkBackground) { mColorOnDarkBackground = pColorOnDarkBackground; } QColor colorOnLightBackground() const { return mColorOnLightBackground; } void setColorOnLightBackground(QColor pColorOnLightBackground) { mColorOnLightBackground = pColorOnLightBackground; } void setStroke(UBGraphicsStroke* stroke); UBGraphicsStroke* stroke() const; protected: void paint ( QPainter * painter, const QStyleOptionGraphicsItem * option, QWidget * widget); QPainterPath shape () const; private: void clearStroke(); bool mHasAlpha; QLineF mOriginalLine; qreal mOriginalWidth; bool mIsNominalLine; QColor mColorOnDarkBackground; QColor mColorOnLightBackground; UBGraphicsStroke* mStroke; UBGraphicsStrokesGroup* mpGroup; }; #endif // UBGRAPHICSPOLYGONITEM_H