summary refs log tree commit diff
path: root/src/ui/ToggleButton.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/ui/ToggleButton.cpp')
-rw-r--r--src/ui/ToggleButton.cpp222
1 files changed, 0 insertions, 222 deletions
diff --git a/src/ui/ToggleButton.cpp b/src/ui/ToggleButton.cpp
deleted file mode 100644

index 11a2fbd1..00000000 --- a/src/ui/ToggleButton.cpp +++ /dev/null
@@ -1,222 +0,0 @@ -// SPDX-FileCopyrightText: 2021 Nheko Contributors -// SPDX-FileCopyrightText: 2022 Nheko Contributors -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#include <QColor> -#include <QCoreApplication> -#include <QEvent> -#include <QPainter> - -#include "ToggleButton.h" - -void -Toggle::paintEvent(QPaintEvent *event) -{ - Q_UNUSED(event); -} - -Toggle::Toggle(QWidget *parent) - : QAbstractButton{parent} -{ - init(); - - connect(this, &QAbstractButton::toggled, this, &Toggle::setState); -} - -void -Toggle::setState(bool isEnabled) -{ - setChecked(isEnabled); - thumb_->setShift(isEnabled ? Position::Left : Position::Right); - setupProperties(); -} - -void -Toggle::init() -{ - track_ = new ToggleTrack(this); - thumb_ = new ToggleThumb(this); - - setCursor(QCursor(Qt::PointingHandCursor)); - setCheckable(true); - setChecked(false); - - setState(false); - setupProperties(); - - QCoreApplication::processEvents(); -} - -void -Toggle::setupProperties() -{ - if (isEnabled()) { - Position position = thumb_->shift(); - - thumb_->setThumbColor(trackColor()); - - if (position == Position::Left) - track_->setTrackColor(activeColor()); - else if (position == Position::Right) - track_->setTrackColor(inactiveColor()); - } - - update(); -} - -void -Toggle::setDisabledColor(const QColor &color) -{ - disabledColor_ = color; - setupProperties(); - emit disabledColorChanged(); -} - -void -Toggle::setActiveColor(const QColor &color) -{ - activeColor_ = color; - setupProperties(); - emit activeColorChanged(); -} - -void -Toggle::setInactiveColor(const QColor &color) -{ - inactiveColor_ = color; - setupProperties(); - emit inactiveColorChanged(); -} - -void -Toggle::setTrackColor(const QColor &color) -{ - trackColor_ = color; - setupProperties(); - emit trackColorChanged(); -} - -ToggleThumb::ToggleThumb(Toggle *parent) - : QWidget{parent} - , toggle_{parent} - , position_{Position::Right} - , offset_{0} -{ - parent->installEventFilter(this); -} - -void -ToggleThumb::setShift(Position position) -{ - if (position_ != position) { - position_ = position; - updateOffset(); - } -} - -bool -ToggleThumb::eventFilter(QObject *obj, QEvent *event) -{ - const QEvent::Type type = event->type(); - - if (QEvent::Resize == type || QEvent::Move == type) { - setGeometry(toggle_->rect().adjusted(8, 8, -8, -8)); - updateOffset(); - } - - return QWidget::eventFilter(obj, event); -} - -void -ToggleThumb::paintEvent(QPaintEvent *event) -{ - Q_UNUSED(event) - - QPainter painter(this); - painter.setRenderHint(QPainter::Antialiasing); - - QBrush brush; - brush.setStyle(Qt::SolidPattern); - brush.setColor(toggle_->isEnabled() ? thumbColor_ : Qt::white); - - painter.setBrush(brush); - painter.setPen(Qt::NoPen); - - int s; - QRectF r; - - s = height() - 10; - r = QRectF(5 + offset_, 5, s, s); - - painter.drawEllipse(r); - - if (!toggle_->isEnabled()) { - brush.setColor(toggle_->disabledColor()); - painter.setBrush(brush); - painter.drawEllipse(r); - } -} - -void -ToggleThumb::updateOffset() -{ - const QSize s(size()); - offset_ = position_ == Position::Left ? static_cast<qreal>(s.width() - s.height()) : 0; - update(); -} - -ToggleTrack::ToggleTrack(Toggle *parent) - : QWidget{parent} - , toggle_{parent} -{ - Q_ASSERT(parent); - - parent->installEventFilter(this); -} - -void -ToggleTrack::setTrackColor(const QColor &color) -{ - trackColor_ = color; - emit trackColorChanged(); - update(); -} - -bool -ToggleTrack::eventFilter(QObject *obj, QEvent *event) -{ - const QEvent::Type type = event->type(); - - if (QEvent::Resize == type || QEvent::Move == type) { - setGeometry(toggle_->rect()); - } - - return QWidget::eventFilter(obj, event); -} - -void -ToggleTrack::paintEvent(QPaintEvent *event) -{ - Q_UNUSED(event) - - QPainter painter(this); - painter.setRenderHint(QPainter::Antialiasing); - - QBrush brush; - if (toggle_->isEnabled()) { - brush.setColor(trackColor_); - painter.setOpacity(0.8); - } else { - brush.setColor(toggle_->disabledColor()); - painter.setOpacity(0.6); - } - - brush.setStyle(Qt::SolidPattern); - painter.setBrush(brush); - painter.setPen(Qt::NoPen); - - const int h = height() / 2; - const QRect r(0, h / 2, width(), h); - painter.drawRoundedRect(r.adjusted(14, 4, -14, -4), h / 2 - 4, h / 2 - 4); -}