diff --git a/src/annotations/items/AnnotationNumber.cpp b/src/annotations/items/AnnotationNumber.cpp index b2257c2..d11af8f 100644 --- a/src/annotations/items/AnnotationNumber.cpp +++ b/src/annotations/items/AnnotationNumber.cpp @@ -1,98 +1,105 @@ /* * Copyright (C) 2018 Damir Porobic * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program 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 General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. */ #include "AnnotationNumber.h" namespace kImageAnnotator { AnnotationNumber::AnnotationNumber(const QPointF ¢erPosition, AnnotationTextProperties *properties) : AbstractAnnotationRect(centerPosition, properties) { mRect->moveCenter(centerPosition); } AnnotationNumber::AnnotationNumber(const AnnotationNumber &other) : AbstractAnnotationRect(other) { updateShape(); } void AnnotationNumber::addPoint(const QPointF &position, bool modified) { Q_UNUSED(position); Q_UNUSED(modified); // Nothing to do here } const AnnotationTextProperties *AnnotationNumber::properties() const { return dynamic_cast(AbstractAnnotationItem::properties()); } ToolTypes AnnotationNumber::toolType() const { return ToolTypes::Number; } void AnnotationNumber::setNumber(int number) { mNumberString = QString::number(number); updateRect(); } int AnnotationNumber::number() const { return mNumberString.toInt(); } +QPainterPath AnnotationNumber::shape() const +{ + auto path = AbstractAnnotationItem::shape(); + path.addRect(*mRect); + return path; +} + void AnnotationNumber::updateRect() { prepareGeometryChange(); auto center = mRect->center(); auto size = getTextRectSize(); mRect->setSize(size); mRect->moveCenter(center); updateShape(); } void AnnotationNumber::updateShape() { QPainterPath path; path.addEllipse(*mRect); setShape(path); } void AnnotationNumber::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) { AbstractAnnotationRect::paint(painter, option, widget); painter->setFont(properties()->font()); painter->setPen(properties()->textColor()); painter->drawText(boundingRect(), Qt::AlignCenter, mNumberString); } QSizeF AnnotationNumber::getTextRectSize() const { QFontMetricsF metrics(properties()->font()); auto boundingRect = metrics.boundingRect(mNumberString).adjusted(-5, -5, 5, 5); auto largestSite = boundingRect.width() > boundingRect.height() ? boundingRect.width() : boundingRect.height(); return { largestSite, largestSite }; } } // namespace kImageAnnotator diff --git a/src/annotations/items/AnnotationNumber.h b/src/annotations/items/AnnotationNumber.h index ae5a03b..467dd94 100644 --- a/src/annotations/items/AnnotationNumber.h +++ b/src/annotations/items/AnnotationNumber.h @@ -1,55 +1,56 @@ /* * Copyright (C) 2018 Damir Porobic * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program 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 General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. */ #ifndef KIMAGEANNOTATOR_ANNOTATIONNUMBER_H #define KIMAGEANNOTATOR_ANNOTATIONNUMBER_H #include "AbstractAnnotationRect.h" #include "src/annotations/properties/AnnotationTextProperties.h" namespace kImageAnnotator { class AnnotationNumber : public AbstractAnnotationRect { Q_OBJECT public: AnnotationNumber(const QPointF ¢erPosition, AnnotationTextProperties *properties); AnnotationNumber(const AnnotationNumber &other); ~AnnotationNumber() override = default; void addPoint(const QPointF &position, bool modified = false) override; const AnnotationTextProperties *properties() const override; ToolTypes toolType() const override; void setNumber(int number); int number() const; + QPainterPath shape() const override; protected: void updateShape() override; void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override; private: QString mNumberString; QSizeF getTextRectSize() const; void updateRect(); }; } // namespace kImageAnnotator #endif // KIMAGEANNOTATOR_ANNOTATIONNUMBER_H