From 53a98ecbe56fde1b1d52ecc6fe4f5a8f10e3ed58 Mon Sep 17 00:00:00 2001 From: jp9000 Date: Tue, 17 Mar 2015 18:37:51 -0700 Subject: [PATCH] UI: Add 'visibility' checkbox This checkbox gives an 'eye' icon that indicates whether something is visible or not. The color of the icon is influenced by the current style's foreground color. --- obs/CMakeLists.txt | 2 ++ obs/forms/images/invisible_mask.png | Bin 0 -> 377 bytes obs/forms/images/visible_mask.png | Bin 0 -> 254 bytes obs/forms/obs.qrc | 2 ++ obs/visibility-checkbox.cpp | 36 ++++++++++++++++++++++++++++ obs/visibility-checkbox.hpp | 17 +++++++++++++ 6 files changed, 57 insertions(+) create mode 100644 obs/forms/images/invisible_mask.png create mode 100644 obs/forms/images/visible_mask.png create mode 100644 obs/visibility-checkbox.cpp create mode 100644 obs/visibility-checkbox.hpp 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 0000000000000000000000000000000000000000..4f9ece7c62b27e8b84d4c66b18b57797b79ad667 GIT binary patch literal 377 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6n3BBRT^JZv^(q?yd7K3vk;OpT z7K9lsGQBc^4E7RFUsv|~%o3t<+VdAK`^Uh*$mQwc7@~2$_M*0TGo!@OkN4xupQ)aC z#AbYQ!&)BSEF;M^YK}Z{A13|bTXa%IDNA7W4IZ_~3yA_@*HSo?n71!Vj4KE}9B0~5 z{px?gyu+3g_k0uIlDKkzlY>_fi)>iVD|M+wD*_*1T2!$))yXgLY4n7RtHe`Pd8Z1< z|IFcR)9HG6WM#{)R7=l4zswYOzPVDfS#jTn1-DnNJFvz=!*hqJ(((-VDE6Rd zOzRWRv{iL*SJfRVXXCS3uu^E2I8VhS)_gu@{cX0ljm2i&w=mOeF8`f1(dNr6&c#bz zQ&T@=ME~5~o@wcte(lJ`g6DUZx~+Dc)E0aD>Xs$`E@zMD|6VKZdG%X%*#G%oxIbuk VS%06|)C~+M22WQ%mvv4FO#u8Wl|cXi literal 0 HcmV?d00001 diff --git a/obs/forms/images/visible_mask.png b/obs/forms/images/visible_mask.png new file mode 100644 index 0000000000000000000000000000000000000000..79bcc7c5c814bffb05f504e7030534dddb0e9e14 GIT binary patch literal 254 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6n3BBRT^JZv^(q?yd7K3vk;OpT z7K9lsGQBc^4E7RFUsv|~%o3t()(pIQhk-)F+m|x7PIe)`^6yyvI3`B878=ZyNqJecsrQ`B+Dj~IOUoAC4WF&;Rufy) ude&09S+Ixg>|F6U|G6>q9Y20I&o|g`GVpTA$#|gC7(8A5T-G@yGywqakyTIt literal 0 HcmV?d00001 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; +};