From b188560ae57304676fb10d8015dc2e3985e44c42 Mon Sep 17 00:00:00 2001 From: Berthold Stoeger Date: Sun, 3 Jan 2021 12:46:56 +0100 Subject: [PATCH] ui: create a RoundRectItem class Factor out code from ProfileWidget's ToolTipItem, but make the radius of the corners dynamic. Move into backend-shared, though a new ui-shared might be preferred. Signed-off-by: Berthold Stoeger --- Subsurface-mobile.pro | 2 ++ backend-shared/CMakeLists.txt | 2 ++ backend-shared/roundrectitem.cpp | 18 ++++++++++++++++++ backend-shared/roundrectitem.h | 15 +++++++++++++++ profile-widget/divetooltipitem.cpp | 13 +------------ profile-widget/divetooltipitem.h | 5 ++--- 6 files changed, 40 insertions(+), 15 deletions(-) create mode 100644 backend-shared/roundrectitem.cpp create mode 100644 backend-shared/roundrectitem.h diff --git a/Subsurface-mobile.pro b/Subsurface-mobile.pro index d9ea5bc99..db1ef8911 100644 --- a/Subsurface-mobile.pro +++ b/Subsurface-mobile.pro @@ -126,6 +126,7 @@ SOURCES += subsurface-mobile-main.cpp \ core/subsurface-qt/divelistnotifier.cpp \ backend-shared/exportfuncs.cpp \ backend-shared/plannershared.cpp \ + backend-shared/roundrectitem.cpp \ mobile-widgets/qmlinterface.cpp \ mobile-widgets/qmlmanager.cpp \ mobile-widgets/themeinterface.cpp \ @@ -260,6 +261,7 @@ HEADERS += \ core/subsurface-qt/divelistnotifier.h \ backend-shared/exportfuncs.h \ backend-shared/plannershared.h \ + backend-shared/roundrectitem.h \ mobile-widgets/qmlinterface.h \ mobile-widgets/qmlmanager.h \ mobile-widgets/themeinterface.h \ diff --git a/backend-shared/CMakeLists.txt b/backend-shared/CMakeLists.txt index fdfdb1e05..736b03279 100644 --- a/backend-shared/CMakeLists.txt +++ b/backend-shared/CMakeLists.txt @@ -5,6 +5,8 @@ set(BACKEND_SRCS exportfuncs.h plannershared.cpp plannershared.h + roundrectitem.cpp + roundrectitem.h ) add_library(subsurface_backend_shared STATIC ${BACKEND_SRCS}) diff --git a/backend-shared/roundrectitem.cpp b/backend-shared/roundrectitem.cpp new file mode 100644 index 000000000..2dbfd7b03 --- /dev/null +++ b/backend-shared/roundrectitem.cpp @@ -0,0 +1,18 @@ +#include "roundrectitem.h" +#include +#include + +RoundRectItem::RoundRectItem(double radius, QGraphicsItem *parent) : QGraphicsRectItem(parent), + radius(radius) +{ +} + +void RoundRectItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *) +{ + painter->save(); + painter->setClipRect(option->rect); + painter->setPen(pen()); + painter->setBrush(brush()); + painter->drawRoundedRect(rect(), radius, radius, Qt::AbsoluteSize); + painter->restore(); +} diff --git a/backend-shared/roundrectitem.h b/backend-shared/roundrectitem.h new file mode 100644 index 000000000..d3f58782f --- /dev/null +++ b/backend-shared/roundrectitem.h @@ -0,0 +1,15 @@ +// SPDX-License-Identifier: GPL-2.0 +#ifndef ROUNDRECTITEM_H +#define ROUNDRECTITEM_H + +#include + +class RoundRectItem : public QGraphicsRectItem { +public: + RoundRectItem(double radius, QGraphicsItem *parent); +private: + void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override; + double radius; +}; + +#endif diff --git a/profile-widget/divetooltipitem.cpp b/profile-widget/divetooltipitem.cpp index 908f40070..f62a68ad8 100644 --- a/profile-widget/divetooltipitem.cpp +++ b/profile-widget/divetooltipitem.cpp @@ -7,7 +7,6 @@ #include "core/settings/qPrefDisplay.h" #include #include -#include #include "core/qthelper.h" void ToolTipItem::addToolTip(const QString &toolTip, const QIcon &icon, const QPixmap& pixmap) @@ -133,7 +132,7 @@ void ToolTipItem::expand() status = EXPANDED; } -ToolTipItem::ToolTipItem(QGraphicsItem *parent) : QGraphicsRectItem(parent), +ToolTipItem::ToolTipItem(QGraphicsItem *parent) : RoundRectItem(parent), title(new QGraphicsSimpleTextItem(tr("Information"), this)), status(COLLAPSED), timeAxis(0), @@ -194,16 +193,6 @@ void ToolTipItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) } } -void ToolTipItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget*) -{ - painter->save(); - painter->setClipRect(option->rect); - painter->setPen(pen()); - painter->setBrush(brush()); - painter->drawRoundedRect(rect(), 8, 8, Qt::AbsoluteSize); - painter->restore(); -} - void ToolTipItem::persistPos() { qPrefDisplay::set_tooltip_position(pos()); diff --git a/profile-widget/divetooltipitem.h b/profile-widget/divetooltipitem.h index 268159621..c9e61b6d4 100644 --- a/profile-widget/divetooltipitem.h +++ b/profile-widget/divetooltipitem.h @@ -2,12 +2,12 @@ #ifndef DIVETOOLTIPITEM_H #define DIVETOOLTIPITEM_H -#include #include #include #include #include #include +#include "backend-shared/roundrectitem.h" #include "core/display.h" class DiveCartesianAxis; @@ -18,7 +18,7 @@ class QGraphicsPixmapItem; /* To use a tooltip, simply ->setToolTip on the QGraphicsItem that you want * or, if it's a "global" tooltip, set it on the mouseMoveEvent of the ProfileGraphicsView. */ -class ToolTipItem : public QObject, public QGraphicsRectItem { +class ToolTipItem : public QObject, public RoundRectItem { Q_OBJECT void updateTitlePosition(); Q_PROPERTY(QRectF rect READ rect WRITE setRect) @@ -45,7 +45,6 @@ public: void setTimeAxis(DiveCartesianAxis *axis); void setPlotInfo(const plot_info &plot); void clearPlotInfo(); - void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); public slots: void setRect(const QRectF &rect);