mirror of
https://github.com/rizinorg/cutter.git
synced 2024-12-18 10:56:11 +00:00
QT6 color handling changes
* use typedef for floating point value used in color related API * changes in screen grabbing API used by color picker
This commit is contained in:
parent
988918a038
commit
2799390314
@ -51,9 +51,9 @@ ColorThemeWorker::ColorThemeWorker(QObject *parent) : QObject(parent)
|
||||
|
||||
QColor ColorThemeWorker::mergeColors(const QColor &upper, const QColor &lower) const
|
||||
{
|
||||
qreal r1, g1, b1, a1;
|
||||
qreal r2, g2, b2, a2;
|
||||
qreal r, g, b, a;
|
||||
qhelpers::ColorFloat r1, g1, b1, a1;
|
||||
qhelpers::ColorFloat r2, g2, b2, a2;
|
||||
qhelpers::ColorFloat r, g, b, a;
|
||||
|
||||
upper.getRgbF(&r1, &g1, &b1, &a1);
|
||||
lower.getRgbF(&r2, &g2, &b2, &a2);
|
||||
|
@ -85,6 +85,12 @@ CUTTER_EXPORT void selectIndexByData(QComboBox *comboBox, QVariant data, int def
|
||||
CUTTER_EXPORT void emitColumnChanged(QAbstractItemModel *model, int column);
|
||||
|
||||
CUTTER_EXPORT bool filterStringContains(const QString &string, const QSortFilterProxyModel *model);
|
||||
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||
using ColorFloat = float;
|
||||
#else
|
||||
using ColorFloat = qreal;
|
||||
#endif
|
||||
} // qhelpers
|
||||
|
||||
#endif // HELPERS_H
|
||||
|
@ -1,11 +1,16 @@
|
||||
#include "ColorPicker.h"
|
||||
#include "ui_ColorPicker.h"
|
||||
#include "common/Helpers.h"
|
||||
|
||||
#include <QPaintEvent>
|
||||
#include <QPainter>
|
||||
#include <QPainterPath>
|
||||
#include <QMouseEvent>
|
||||
#include <QDesktopWidget>
|
||||
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
|
||||
# include <QDesktopWidget>
|
||||
#else
|
||||
# include <QWindow>
|
||||
#endif
|
||||
#include <QPixmap>
|
||||
#include <QCursor>
|
||||
#include <QScreen>
|
||||
@ -23,7 +28,7 @@ void ColorPickArea::paintEvent(QPaintEvent *event)
|
||||
|
||||
for (int x = event->rect().x(); x <= event->rect().right(); x++) {
|
||||
for (int y = event->rect().y(); y <= event->rect().bottom(); y++) {
|
||||
qreal h, s, v;
|
||||
qhelpers::ColorFloat h, s, v;
|
||||
QColor c = pointToColor(x, y);
|
||||
c.getHsvF(&h, &s, &v);
|
||||
c.setHsvF(h, s, 1);
|
||||
@ -74,7 +79,7 @@ void ColorPickerWidget::mouseMoveEvent(QMouseEvent *event)
|
||||
QColor ColorPickArea::pointToColor(int x, int y) const
|
||||
{
|
||||
QColor color;
|
||||
qreal h, s, v, a;
|
||||
qhelpers::ColorFloat h, s, v, a;
|
||||
currColor.getHsvF(&h, &s, &v, &a);
|
||||
color.setHsvF(qreal(x) / width(), 1.0 - qreal(y) / height(), v, a);
|
||||
return color;
|
||||
@ -82,7 +87,7 @@ QColor ColorPickArea::pointToColor(int x, int y) const
|
||||
|
||||
QPoint ColorPickArea::colorToPoint(const QColor &color) const
|
||||
{
|
||||
qreal h, s, v;
|
||||
qhelpers::ColorFloat h, s, v;
|
||||
color.getHsvF(&h, &s, &v);
|
||||
return QPointF(h * width(), (1.0 - s) * height()).toPoint();
|
||||
}
|
||||
@ -114,7 +119,7 @@ void ColorValueBar::paintEvent(QPaintEvent *event)
|
||||
{
|
||||
QPainter p(this);
|
||||
QColor color = currColor;
|
||||
qreal h, s, v;
|
||||
qhelpers::ColorFloat h, s, v;
|
||||
currColor.getHsvF(&h, &s, &v);
|
||||
v = 1.0 - v;
|
||||
|
||||
@ -147,7 +152,7 @@ QColor ColorValueBar::pointToColor(int x, int y) const
|
||||
{
|
||||
Q_UNUSED(x)
|
||||
QColor color = currColor;
|
||||
qreal h, s, v, a;
|
||||
qhelpers::ColorFloat h, s, v, a;
|
||||
color.getHsvF(&h, &s, &v, &a);
|
||||
color.setHsvF(h, s, 1.0 - qreal(y) / height(), a);
|
||||
return color;
|
||||
@ -155,7 +160,7 @@ QColor ColorValueBar::pointToColor(int x, int y) const
|
||||
|
||||
QPoint ColorValueBar::colorToPoint(const QColor &color) const
|
||||
{
|
||||
qreal h, s, v;
|
||||
qhelpers::ColorFloat h, s, v;
|
||||
color.getHsvF(&h, &s, &v);
|
||||
return QPoint(rect().x(), int((1.0 - v) * height()));
|
||||
}
|
||||
@ -308,12 +313,27 @@ void ColorPicker::mouseMoveEvent(QMouseEvent *event)
|
||||
|
||||
QColor ColorPicker::getColorAtMouse()
|
||||
{
|
||||
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
|
||||
const QDesktopWidget *desktop = QApplication::desktop();
|
||||
const QPixmap pixmap =
|
||||
QGuiApplication::screens()
|
||||
.at(desktop->screenNumber())
|
||||
->grabWindow(desktop->winId(), QCursor::pos().x(), QCursor::pos().y(), 1, 1);
|
||||
return QColor(pixmap.toImage().pixel(0, 0));
|
||||
#else
|
||||
QPoint pos = QCursor::pos();
|
||||
auto screen = QGuiApplication::screenAt(pos);
|
||||
if (!screen) {
|
||||
screen = QGuiApplication::primaryScreen();
|
||||
}
|
||||
if (screen) {
|
||||
auto screenRelativePos = pos - screen->geometry().topLeft();
|
||||
const QPixmap pixmap =
|
||||
screen->grabWindow(0, screenRelativePos.x(), screenRelativePos.y(), 1, 1);
|
||||
return QColor(pixmap.toImage().pixel(0, 0));
|
||||
}
|
||||
return QColorConstants::Red;
|
||||
#endif
|
||||
}
|
||||
|
||||
bool ColorPicker::isPickingFromScreen() const
|
||||
@ -378,7 +398,7 @@ void AlphaChannelBar::paintEvent(QPaintEvent *event)
|
||||
QPainter p(this);
|
||||
QRect barRect = rect();
|
||||
|
||||
qreal h, s, v, a;
|
||||
qhelpers::ColorFloat h, s, v, a;
|
||||
currColor.getHsvF(&h, &s, &v, &a);
|
||||
a = 1.0 - a;
|
||||
const int triangleSize = 10;
|
||||
@ -416,7 +436,7 @@ QColor AlphaChannelBar::pointToColor(int x, int y) const
|
||||
{
|
||||
Q_UNUSED(x)
|
||||
QColor color = currColor;
|
||||
qreal h, s, v;
|
||||
qhelpers::ColorFloat h, s, v;
|
||||
color.getHsvF(&h, &s, &v);
|
||||
color.setHsvF(h, s, v, 1.0 - qreal(y) / height());
|
||||
return color;
|
||||
|
Loading…
Reference in New Issue
Block a user