Browse Source

UI: Add retina support and updated icons

OBS Studio currently does not support retina rendering for any of the
images in the app. This adds support for retina pixmap rendering as
well as adding higher resolution versions of each icon that was not
a high enough resolution to support 2x. The icons work when switching
themes and will only render the 2x versions when the device pixel
ratio is greater than or equal to 2.

I also added credits to the readme for images that were already being
used that require credit to the author. If the OBS community has
paid for these images already, I can remove the credits from the
readme. The credit is for the invisible, visible, and gear icons.
DungFu 7 years ago
parent
commit
d70352a6ce

+ 6 - 0
README.rst

@@ -47,3 +47,9 @@ Contributing
    you fully understand -- bad advice is worse than no advice.  When it
    comes to something that you don't fully know or understand, please
    defer to the official help or official channels.
+
+Credits
+-------
+ - Icons made by [Freepik](http://www.freepik.com) from
+   [www.flaticon.com](https://www.flaticon.com/) is licensed by
+   [CC 3.0 BY](http://creativecommons.org/licenses/by/3.0/)

BIN
UI/data/themes/Acri/[email protected]


BIN
UI/data/themes/Dark/[email protected]


BIN
UI/forms/images/[email protected]


BIN
UI/forms/images/[email protected]


BIN
UI/forms/images/[email protected]


BIN
UI/forms/images/[email protected]


BIN
UI/forms/images/settings/[email protected]


BIN
UI/forms/images/settings/[email protected]


BIN
UI/forms/images/settings/[email protected]


BIN
UI/forms/images/settings/[email protected]


BIN
UI/forms/images/settings/[email protected]


BIN
UI/forms/images/settings/[email protected]


BIN
UI/forms/images/settings/[email protected]


BIN
UI/forms/images/settings/[email protected]


BIN
UI/forms/images/settings/[email protected]


BIN
UI/forms/images/[email protected]


BIN
UI/forms/images/[email protected]


+ 14 - 0
UI/forms/obs.qrc

@@ -4,30 +4,44 @@
     <file>images/unmute.png</file>
     <file>images/refresh.png</file>
     <file>images/configuration21_16.png</file>
+    <file>images/[email protected]</file>
     <file>images/invisible_mask.png</file>
+    <file>images/[email protected]</file>
     <file>images/visible_mask.png</file>
+    <file>images/[email protected]</file>
     <file>images/list_remove.png</file>
     <file>images/add.png</file>
     <file>images/down.png</file>
     <file>images/editscene.png</file>
     <file>images/live.png</file>
     <file>images/properties.png</file>
+    <file>images/[email protected]</file>
     <file>images/up.png</file>
     <file>images/obs.png</file>
     <file>images/tray_active.png</file>
     <file>images/locked_mask.png</file>
+    <file>images/[email protected]</file>
     <file>images/unlocked_mask.png</file>
+    <file>images/[email protected]</file>
     <file>images/collapse.png</file>
     <file>images/expand.png</file>
   </qresource>
   <qresource prefix="/settings">
     <file>images/settings/advanced.png</file>
+    <file>images/settings/[email protected]</file>
     <file>images/settings/network.png</file>
+    <file>images/settings/[email protected]</file>
     <file>images/settings/video-display-3.png</file>
+    <file>images/settings/[email protected]</file>
     <file>images/settings/decibel_audio_player.png</file>
+    <file>images/settings/[email protected]</file>
     <file>images/settings/applications-system-2.png</file>
+    <file>images/settings/[email protected]</file>
     <file>images/settings/system-settings-3.png</file>
+    <file>images/settings/[email protected]</file>
     <file>images/settings/network-bluetooth.png</file>
+    <file>images/settings/[email protected]</file>
     <file>images/settings/preferences-desktop-keyboard-shortcuts.png</file>
+    <file>images/settings/[email protected]</file>
   </qresource>
 </RCC>

+ 12 - 6
UI/locked-checkbox.cpp

@@ -7,10 +7,17 @@
 
 LockedCheckBox::LockedCheckBox() : QCheckBox()
 {
-	lockedImage =
-		QPixmap::fromImage(QImage(":/res/images/locked_mask.png"));
-	unlockedImage =
-		QPixmap::fromImage(QImage(":/res/images/unlocked_mask.png"));
+	QString lockedFile;
+	QString unlockedFile;
+	if (devicePixelRatio() >= 2) {
+		lockedFile = ":/res/images/[email protected]";
+		unlockedFile = ":/res/images/[email protected]";
+	} else {
+		lockedFile = ":/res/images/locked_mask.png";
+		unlockedFile = ":/res/images/unlocked_mask.png";
+	}
+	lockedImage = QPixmap::fromImage(QImage(lockedFile));
+	unlockedImage = QPixmap::fromImage(QImage(unlockedFile));
 	setMinimumSize(16, 16);
 
 	setStyleSheet("outline: none;");
@@ -31,6 +38,5 @@ void LockedCheckBox::paintEvent(QPaintEvent *event)
 			palette().color(foregroundRole()));
 
 	QPainter p(this);
-	p.drawPixmap(0, 0, image.width(), image.height(),
-			QPixmap::fromImage(image));
+	p.drawPixmap(0, 0, 16, 16, QPixmap::fromImage(image));
 }

+ 2 - 0
UI/obs-app.cpp

@@ -1213,6 +1213,8 @@ bool OBSApp::OBSInit()
 {
 	ProfileScope("OBSApp::OBSInit");
 
+	setAttribute(Qt::AA_UseHighDpiPixmaps);
+
 	bool licenseAccepted = config_get_bool(globalConfig, "General",
 			"LicenseAccepted");
 	OBSLicenseAgreement agreement(nullptr);

+ 12 - 6
UI/visibility-checkbox.cpp

@@ -7,10 +7,17 @@
 
 VisibilityCheckBox::VisibilityCheckBox() : QCheckBox()
 {
-	checkedImage =
-		QPixmap::fromImage(QImage(":/res/images/visible_mask.png"));
-	uncheckedImage =
-		QPixmap::fromImage(QImage(":/res/images/invisible_mask.png"));
+	QString checkedFile;
+	QString uncheckedFile;
+	if (devicePixelRatio() >= 2) {
+		checkedFile = ":/res/images/[email protected]";
+		uncheckedFile = ":/res/images/[email protected]";
+	} else {
+		checkedFile = ":/res/images/visible_mask.png";
+		uncheckedFile = ":/res/images/invisible_mask.png";
+	}
+	checkedImage = QPixmap::fromImage(QImage(checkedFile));
+	uncheckedImage = QPixmap::fromImage(QImage(uncheckedFile));
 	setMinimumSize(16, 16);
 
 	setStyleSheet("outline: none;");
@@ -31,6 +38,5 @@ void VisibilityCheckBox::paintEvent(QPaintEvent *event)
 			palette().color(foregroundRole()));
 
 	QPainter p(this);
-	p.drawPixmap(0, 0, image.width(), image.height(),
-			QPixmap::fromImage(image));
+	p.drawPixmap(0, 0, 16, 16, QPixmap::fromImage(image));
 }