diff --git a/obs/CMakeLists.txt b/obs/CMakeLists.txt index eedb360bf..f25227d85 100644 --- a/obs/CMakeLists.txt +++ b/obs/CMakeLists.txt @@ -107,6 +107,7 @@ set(obs_SOURCES double-slider.cpp volume-control.cpp adv-audio-control.cpp + visibility-checkbox.cpp vertical-scroll-area.cpp source-list-widget.cpp crash-report.cpp @@ -135,6 +136,7 @@ set(obs_HEADERS double-slider.hpp volume-control.hpp adv-audio-control.hpp + visibility-checkbox.hpp vertical-scroll-area.hpp source-list-widget.hpp qt-display.hpp diff --git a/obs/forms/images/invisible_mask.png b/obs/forms/images/invisible_mask.png new file mode 100644 index 000000000..4f9ece7c6 Binary files /dev/null and b/obs/forms/images/invisible_mask.png differ diff --git a/obs/forms/images/visible_mask.png b/obs/forms/images/visible_mask.png new file mode 100644 index 000000000..79bcc7c5c Binary files /dev/null and b/obs/forms/images/visible_mask.png differ diff --git a/obs/forms/obs.qrc b/obs/forms/obs.qrc index be69e0bee..ed435cdb9 100644 --- a/obs/forms/obs.qrc +++ b/obs/forms/obs.qrc @@ -1,6 +1,8 @@ images/configuration21_16.png + images/invisible_mask.png + images/visible_mask.png images/list_remove.png images/add.png images/down.png diff --git a/obs/visibility-checkbox.cpp b/obs/visibility-checkbox.cpp new file mode 100644 index 000000000..5b73084e0 --- /dev/null +++ b/obs/visibility-checkbox.cpp @@ -0,0 +1,36 @@ +#include +#include +#include +#include "visibility-checkbox.hpp" + +#include + +VisibilityCheckBox::VisibilityCheckBox() : QCheckBox() +{ + checkedImage = + QPixmap::fromImage(QImage(":/res/images/visible_mask.png")); + uncheckedImage = + QPixmap::fromImage(QImage(":/res/images/invisible_mask.png")); + setMinimumSize(16, 16); + + setStyleSheet("outline: none;"); +} + +void VisibilityCheckBox::paintEvent(QPaintEvent *event) +{ + UNUSED_PARAMETER(event); + + QPixmap &pixmap = isChecked() ? checkedImage : uncheckedImage; + QImage image(pixmap.size(), QImage::Format_ARGB32); + + QPainter draw(&image); + draw.setCompositionMode(QPainter::CompositionMode_Source); + draw.drawPixmap(0, 0, pixmap.width(), pixmap.height(), pixmap); + draw.setCompositionMode(QPainter::CompositionMode_SourceIn); + draw.fillRect(QRectF(QPointF(0.0f, 0.0f), pixmap.size()), + palette().color(foregroundRole())); + + QPainter p(this); + p.drawPixmap(0, 0, image.width(), image.height(), + QPixmap::fromImage(image)); +} diff --git a/obs/visibility-checkbox.hpp b/obs/visibility-checkbox.hpp new file mode 100644 index 000000000..47c5d8990 --- /dev/null +++ b/obs/visibility-checkbox.hpp @@ -0,0 +1,17 @@ +#include +#include + +class QPaintEvernt; + +class VisibilityCheckBox : public QCheckBox { + Q_OBJECT + + QPixmap checkedImage; + QPixmap uncheckedImage; + +public: + VisibilityCheckBox(); + +protected: + void paintEvent(QPaintEvent *event) override; +};