Files
StarPilot/selfdrive/ui/qt/widgets/toggle.cc
T
Adeeb Shihadeh 4d2ccb3a79 qt settings style (#19588)
* dark mode

* inter

* frame

* this looks pretty good

* revert that

* fix bg hack

* don't override style sheet
old-commit-hash: 550b5e422f5ee7f7ca23d569cbd58f78bfdda9c5
2020-12-24 14:10:43 -08:00

54 lines
1.4 KiB
C++

#include "toggle.hpp"
Toggle::Toggle(QWidget *parent) : QAbstractButton(parent),
_height(80),
_height_rect(60),
_on(false),
_anim(new QPropertyAnimation(this, "offset_circle", this))
{
_radius = _height / 2;
_x_circle = _radius;
_y_circle = _radius;
_y_rect = (_height - _height_rect)/2;
}
void Toggle::paintEvent(QPaintEvent *e) {
this->setFixedHeight(_height);
QPainter p(this);
p.setPen(Qt::NoPen);
p.setRenderHint(QPainter::Antialiasing, true);
// Draw toggle background left
p.setBrush(QColor(0x33ab4c));
p.drawRoundedRect(QRect(0, _y_rect, _x_circle + _radius, _height_rect), _height_rect/2, _height_rect/2);
// Draw toggle background right
p.setBrush(QColor(0x393939));
p.drawRoundedRect(QRect(_x_circle - _radius, _y_rect, width() - (_x_circle - _radius), _height_rect), _height_rect/2, _height_rect/2);
// Draw toggle circle
p.setBrush(QColor(0xfafafa));
p.drawEllipse(QRectF(_x_circle - _radius, _y_circle - _radius, 2 * _radius, 2 * _radius));
}
void Toggle::mouseReleaseEvent(QMouseEvent *e) {
if (e->button() & Qt::LeftButton) {
togglePosition();
emit stateChanged(_on);
}
}
void Toggle::togglePosition() {
_on = !_on;
const int left = _radius;
const int right = width() - _radius;
_anim->setStartValue(_on ? left : right);
_anim->setEndValue(_on ? right : left);
_anim->setDuration(120);
_anim->start();
}
void Toggle::enterEvent(QEvent *e) {
QAbstractButton::enterEvent(e);
}