widgets/coloredit.cpp

Tue, 11 Apr 2023 20:27:04 +0300

author
Teemu Piippo <teemu.s.piippo@gmail.com>
date
Tue, 11 Apr 2023 20:27:04 +0300
changeset 375
21a5ecbe34e4
parent 348
98776f54a8d0
permissions
-rw-r--r--

Simplify signature of updateRenderPreferences

#include <QColorDialog>
#include <QHBoxLayout>
#include "widgets/coloredit.h"

ColorEdit::ColorEdit(const QColor& color, QWidget* parent) :
	ColorEdit{parent}
{
	this->setColor(color);
}

ColorEdit::ColorEdit(QWidget* parent) :
	QWidget{parent},
	lineEdit{new QLineEdit{this}},
	button{new QPushButton{"…", this}}
{
	auto*const layout = new QHBoxLayout{};
	layout->addWidget(this->lineEdit);
	layout->addWidget(this->button);
	layout->setStretch(0, 1);
	layout->setStretch(1, 0);
	this->setLayout(layout);
	connect(this->button, &QPushButton::clicked, [&](){
		const QColor color = QColorDialog::getColor(this->color(), this->parentWidget());
		if (color.isValid()) {
			this->setColor(color);
		}
	});
	connect(this->lineEdit, &QLineEdit::textChanged, [&]{
		const QColor color = this->color();
		const qreal lightness = color.lightnessF();
		const QColor foreground = lightness < 0.4 ? Qt::white : Qt::black;
		this->setStyleSheet(
			QStringLiteral("QLineEdit{background-color: %1; color: %2;}")
				.arg(color.name())
				.arg(foreground.name()));
		Q_EMIT this->colorChanged(this->color());
	});
	this->setColor(Qt::black);
}

QColor ColorEdit::color() const
{
	return QColor{this->lineEdit->text()};
}

void ColorEdit::setColor(const QColor& color)
{
	if (color.isValid() and this->color() != color) {
		this->lineEdit->setText(color.name());
	}
}

mercurial