瀏覽代碼

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.
jp9000 10 年之前
父節點
當前提交
53a98ecbe5
共有 6 個文件被更改,包括 57 次插入0 次删除
  1. 2 0
      obs/CMakeLists.txt
  2. 二進制
      obs/forms/images/invisible_mask.png
  3. 二進制
      obs/forms/images/visible_mask.png
  4. 2 0
      obs/forms/obs.qrc
  5. 36 0
      obs/visibility-checkbox.cpp
  6. 17 0
      obs/visibility-checkbox.hpp

+ 2 - 0
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

二進制
obs/forms/images/invisible_mask.png


二進制
obs/forms/images/visible_mask.png


+ 2 - 0
obs/forms/obs.qrc

@@ -1,6 +1,8 @@
 <RCC>
   <qresource prefix="/res">
     <file>images/configuration21_16.png</file>
+    <file>images/invisible_mask.png</file>
+    <file>images/visible_mask.png</file>
     <file>images/list_remove.png</file>
     <file>images/add.png</file>
     <file>images/down.png</file>

+ 36 - 0
obs/visibility-checkbox.cpp

@@ -0,0 +1,36 @@
+#include <QPaintEvent>
+#include <QPixmap>
+#include <QPainter>
+#include "visibility-checkbox.hpp"
+
+#include <util/c99defs.h>
+
+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));
+}

+ 17 - 0
obs/visibility-checkbox.hpp

@@ -0,0 +1,17 @@
+#include <QCheckBox>
+#include <QPixmap>
+
+class QPaintEvernt;
+
+class VisibilityCheckBox : public QCheckBox {
+	Q_OBJECT
+
+	QPixmap checkedImage;
+	QPixmap uncheckedImage;
+
+public:
+	VisibilityCheckBox();
+
+protected:
+	void paintEvent(QPaintEvent *event) override;
+};