From 24461cddd563755bcdf8118e47ad9489a138dd73 Mon Sep 17 00:00:00 2001 From: laserpants Date: Wed, 4 May 2016 23:44:33 +0300 Subject: [PATCH] add halo --- components/slider.cpp | 5 +++-- components/slider_p.h | 30 +++++++++++++++++++++++++----- examples/sliderexamples.cpp | 17 +++++++++++++++++ qt-material-widgets.pro | 2 +- 4 files changed, 46 insertions(+), 8 deletions(-) diff --git a/components/slider.cpp b/components/slider.cpp index ef06258..113d9cb 100644 --- a/components/slider.cpp +++ b/components/slider.cpp @@ -40,6 +40,7 @@ void Slider::paintEvent(QPaintEvent *event) QPainter painter(this); d->paintTrack(&painter); + d->paintHalo(&painter); d->paintThumb(&painter); #ifdef DEBUG_LAYOUT @@ -65,7 +66,7 @@ void Slider::mouseMoveEvent(QMouseEvent *event) setSliderPosition(d->valueFromPosition(event->pos())); } else { - QRect track(d->trackGeometry().adjusted(-2, -2, 2, 2)); + QRectF track(d->trackGeometry().adjusted(-2, -2, 2, 2)); if (track.contains(event->pos()) != d->hoverTrack) { d->hoverTrack = !d->hoverTrack; @@ -98,7 +99,7 @@ void Slider::mousePressEvent(QMouseEvent *event) return; } - QRect track(d->trackGeometry().adjusted(-2, -2, 2, 2)); + QRectF track(d->trackGeometry().adjusted(-2, -2, 2, 2)); if (track.contains(pos)) { d->step = true; diff --git a/components/slider_p.h b/components/slider_p.h index 9b29d10..f6d4cb0 100644 --- a/components/slider_p.h +++ b/components/slider_p.h @@ -5,7 +5,7 @@ #include #include "lib/style.h" -#define THUMB_OUTER_SIZE 30 +#define THUMB_OUTER_SIZE 35 class SliderPrivate { @@ -23,14 +23,14 @@ public: parent->setMouseTracking(true); } - QRect trackGeometry() const + QRectF trackGeometry() const { Q_Q(const Slider); return Qt::Horizontal == q->orientation() - ? QRect(THUMB_OUTER_SIZE/2, q->rect().height()/2 - 1, + ? QRectF(THUMB_OUTER_SIZE/2, q->rect().height()/2 - 1, q->rect().width() - THUMB_OUTER_SIZE, 2) - : QRect(q->rect().width()/2 - 1, THUMB_OUTER_SIZE/2, 2, + : QRectF(q->rect().width()/2 - 1, THUMB_OUTER_SIZE/2, 2, q->rect().height() - THUMB_OUTER_SIZE); } @@ -78,6 +78,26 @@ public: THUMB_OUTER_SIZE, THUMB_OUTER_SIZE); } + void paintHalo(QPainter *painter) + { + painter->save(); + + QBrush brush; + brush.setStyle(Qt::SolidPattern); + brush.setColor(QColor(0, 0, 0, 20)); + painter->setBrush(brush); + painter->setPen(Qt::NoPen); + + painter->setRenderHint(QPainter::Antialiasing); + + QRectF halo(0, 0, THUMB_OUTER_SIZE, THUMB_OUTER_SIZE); + halo.moveCenter(thumbGeometry().center()); + + painter->drawEllipse(halo); + + painter->restore(); + } + void paintThumb(QPainter *painter) { painter->save(); @@ -89,7 +109,7 @@ public: painter->setRenderHint(QPainter::Antialiasing); - QRectF thumb(0, 0, 12, 12); + QRectF thumb(0, 0, 11, 11); thumb.moveCenter(thumbGeometry().center()); painter->drawEllipse(thumb); diff --git a/examples/sliderexamples.cpp b/examples/sliderexamples.cpp index 7731b28..0e4768e 100644 --- a/examples/sliderexamples.cpp +++ b/examples/sliderexamples.cpp @@ -131,6 +131,23 @@ SliderExamples::SliderExamples(QWidget *parent) _slider2->setTracking(false); } + { + Slider *slider = new Slider; + slider->setDisabled(true); + slider->setMinimumWidth(250); + + ExampleView *view = new ExampleView; + view->setWidget(slider); + + Frame *frame = new Frame; + frame->setCodeSnippet( + "Slider *slider = new Slider;\n" + "slider->setDisabled(true);\n" + ); + frame->setWidget(view); + + mainLayout->addWidget(frame); + } } diff --git a/qt-material-widgets.pro b/qt-material-widgets.pro index 16b5899..b8e3d18 100644 --- a/qt-material-widgets.pro +++ b/qt-material-widgets.pro @@ -5,7 +5,7 @@ greaterThan(QT_MAJOR_VERSION, 4): QT += widgets TARGET = qt-material-widgets TEMPLATE = app -DEFINES += DEBUG_LAYOUT=1 +#DEFINES += DEBUG_LAYOUT=1 SOURCES += main.cpp\ mainwindow.cpp \