From 81238c98c2aa0509ddb832b4959949cad161e385 2012-04-12 09:37:59 From: Tero Ahola Date: 2012-04-12 09:37:59 Subject: [PATCH] Added drop shadow effect for light themes --- diff --git a/src/chartbackground.cpp b/src/chartbackground.cpp index 7a2d1fa..76be154 100644 --- a/src/chartbackground.cpp +++ b/src/chartbackground.cpp @@ -23,11 +23,14 @@ #include #include #include +#include QTCOMMERCIALCHART_BEGIN_NAMESPACE -ChartBackground::ChartBackground(QGraphicsItem* parent):QGraphicsRectItem(parent), -m_diameter(15) +ChartBackground::ChartBackground(QGraphicsItem* parent) : + QGraphicsRectItem(parent), + m_diameter(15), + m_dropShadow(0) { } @@ -36,6 +39,21 @@ ChartBackground::~ChartBackground() } +void ChartBackground::setDropShadowEnabled(bool enabled) +{ + if (enabled) { + if (!m_dropShadow) { + m_dropShadow = new QGraphicsDropShadowEffect(); + m_dropShadow->setBlurRadius(10); + m_dropShadow->setOffset(5, 5); + setGraphicsEffect(m_dropShadow); + } + } else { + delete m_dropShadow; + m_dropShadow = 0; + } +} + void ChartBackground::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) { Q_UNUSED(option); diff --git a/src/chartbackground_p.h b/src/chartbackground_p.h index 93870ce..0525db6 100644 --- a/src/chartbackground_p.h +++ b/src/chartbackground_p.h @@ -24,6 +24,7 @@ #include "qchartglobal.h" #include +class QGraphicsDropShadowEffect; QTCOMMERCIALCHART_BEGIN_NAMESPACE class ChartBackground: public QGraphicsRectItem @@ -34,7 +35,8 @@ public: void setDimeter(int dimater); int diameter() const; - + void setDropShadowEnabled(bool enabled); + bool isDropShadowEnabled() {return m_dropShadow != 0;} protected: void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); @@ -44,8 +46,8 @@ private: int roundness(qreal size) const; private: - int m_diameter; - + int m_diameter; + QGraphicsDropShadowEffect *m_dropShadow; }; QTCOMMERCIALCHART_END_NAMESPACE diff --git a/src/charttheme.cpp b/src/charttheme.cpp index e3f0f67..d395d64 100644 --- a/src/charttheme.cpp +++ b/src/charttheme.cpp @@ -20,6 +20,7 @@ #include "charttheme_p.h" #include "qchart.h" +#include "qchart_p.h" #include "qchartview.h" #include "qlegend.h" #include "qchartaxis.h" @@ -69,6 +70,7 @@ ChartTheme::ChartTheme(QChart::ChartTheme id) : m_backgroundShadesPen(Qt::NoPen), m_backgroundShadesBrush(Qt::NoBrush), m_backgroundShades(BackgroundShadesNone), + m_backgroundDropShadowEnabled(false), m_gridLinePen(QPen(QRgb(0x000000))), m_force(false) { @@ -107,6 +109,7 @@ void ChartTheme::decorate(QChart *chart) chart->setBackgroundBrush(m_chartBackgroundGradient); chart->setTitleFont(m_masterFont); chart->setTitleBrush(m_titleBrush); + chart->setBackgroundDropShadowEnabled(m_backgroundDropShadowEnabled); } void ChartTheme::decorate(QLegend *legend) @@ -118,7 +121,6 @@ void ChartTheme::decorate(QLegend *legend) legend->setPen(Qt::NoPen); } - if (brush == legend->brush() || m_force) { legend->setBrush(m_chartBackgroundGradient); } diff --git a/src/charttheme_p.h b/src/charttheme_p.h index eae6593..019fdf6 100644 --- a/src/charttheme_p.h +++ b/src/charttheme_p.h @@ -92,6 +92,7 @@ protected: QPen m_backgroundShadesPen; QBrush m_backgroundShadesBrush; BackgroundShadesMode m_backgroundShades; + bool m_backgroundDropShadowEnabled; QPen m_gridLinePen; bool m_force; }; diff --git a/src/qchart.cpp b/src/qchart.cpp index afb7271..97eee52 100644 --- a/src/qchart.cpp +++ b/src/qchart.cpp @@ -379,10 +379,26 @@ void QChart::setBackgroundVisible(bool visible) bool QChart::isBackgroundVisible() const { //TODO: refactor me - if (!d_ptr->m_presenter->m_backgroundItem) return false; + if (!d_ptr->m_presenter->m_backgroundItem) + return false; + return d_ptr->m_presenter->m_backgroundItem->isVisible(); } +void QChart::setBackgroundDropShadowEnabled(bool enabled) +{ + d_ptr->m_presenter->createChartBackgroundItem(); + d_ptr->m_presenter->m_backgroundItem->setDropShadowEnabled(enabled); +} + +bool QChart::isBackgroundDropShadowEnabled() const +{ + if (!d_ptr->m_presenter->m_backgroundItem) + return false; + + return d_ptr->m_presenter->m_backgroundItem->isDropShadowEnabled(); +} + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// QChartPrivate::QChartPrivate(): diff --git a/src/qchart.h b/src/qchart.h index 8194eb8..2a45700 100644 --- a/src/qchart.h +++ b/src/qchart.h @@ -81,9 +81,10 @@ public: QBrush backgroundBrush() const; void setBackgroundPen(const QPen &pen); QPen backgroundPen() const; - void setBackgroundVisible(bool visible = true); bool isBackgroundVisible() const; + void setBackgroundDropShadowEnabled(bool enabled = true); + bool isBackgroundDropShadowEnabled() const; void setAnimationOptions(AnimationOptions options); AnimationOptions animationOptions() const; diff --git a/src/themes/chartthemeblueicy_p.h b/src/themes/chartthemeblueicy_p.h index 3a75acb..7a5dc49 100644 --- a/src/themes/chartthemeblueicy_p.h +++ b/src/themes/chartthemeblueicy_p.h @@ -44,6 +44,7 @@ public: backgroundGradient.setColorAt(1.0, QRgb(0xffffff)); backgroundGradient.setCoordinateMode(QGradient::ObjectBoundingMode); m_chartBackgroundGradient = backgroundGradient; + m_backgroundDropShadowEnabled = true; // Axes and other m_titleBrush = QBrush(QRgb(0x404044)); diff --git a/src/themes/chartthemehighcontrast_p.h b/src/themes/chartthemehighcontrast_p.h index a45b574..e6719df 100644 --- a/src/themes/chartthemehighcontrast_p.h +++ b/src/themes/chartthemehighcontrast_p.h @@ -44,6 +44,7 @@ public: backgroundGradient.setColorAt(1.0, QRgb(0xffffff)); backgroundGradient.setCoordinateMode(QGradient::ObjectBoundingMode); m_chartBackgroundGradient = backgroundGradient; + m_backgroundDropShadowEnabled = true; // Axes and other m_titleBrush = QBrush(QRgb(0x181818)); diff --git a/src/themes/chartthemelight_p.h b/src/themes/chartthemelight_p.h index bbbe922..22e68a6 100644 --- a/src/themes/chartthemelight_p.h +++ b/src/themes/chartthemelight_p.h @@ -44,6 +44,7 @@ public: backgroundGradient.setColorAt(1.0, QRgb(0xffffff)); backgroundGradient.setCoordinateMode(QGradient::ObjectBoundingMode); m_chartBackgroundGradient = backgroundGradient; + m_backgroundDropShadowEnabled = true; // Axes and other m_axisLinePen = QPen(0xd6d6d6);