obs-studio/UI/visibility-checkbox.cpp
DungFu d70352a6ce 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.
2018-08-31 23:00:23 -07:00

43 lines
1.2 KiB
C++

#include <QPaintEvent>
#include <QPixmap>
#include <QPainter>
#include "visibility-checkbox.hpp"
#include <util/c99defs.h>
VisibilityCheckBox::VisibilityCheckBox() : QCheckBox()
{
QString checkedFile;
QString uncheckedFile;
if (devicePixelRatio() >= 2) {
checkedFile = ":/res/images/visible_mask@2x.png";
uncheckedFile = ":/res/images/invisible_mask@2x.png";
} 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;");
}
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, 16, 16, QPixmap::fromImage(image));
}