summaryrefslogtreecommitdiffstats
path: root/src/widgets/dialogs/qcolordialog.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/widgets/dialogs/qcolordialog.cpp')
-rw-r--r--src/widgets/dialogs/qcolordialog.cpp34
1 files changed, 25 insertions, 9 deletions
diff --git a/src/widgets/dialogs/qcolordialog.cpp b/src/widgets/dialogs/qcolordialog.cpp
index 45cde3c966..d0040c0afe 100644
--- a/src/widgets/dialogs/qcolordialog.cpp
+++ b/src/widgets/dialogs/qcolordialog.cpp
@@ -627,6 +627,7 @@ public:
QColorPicker(QWidget* parent);
~QColorPicker();
+ void setCrossVisible(bool visible);
public slots:
void setCol(int h, int s);
@@ -650,6 +651,7 @@ private:
void setCol(const QPoint &pt);
QPixmap pix;
+ bool crossVisible;
};
static int pWidth = 220;
@@ -805,6 +807,7 @@ void QColorPicker::setCol(const QPoint &pt)
QColorPicker::QColorPicker(QWidget* parent)
: QFrame(parent)
+ , crossVisible(true)
{
hue = 0; sat = 0;
setCol(150, 255);
@@ -817,6 +820,14 @@ QColorPicker::~QColorPicker()
{
}
+void QColorPicker::setCrossVisible(bool visible)
+{
+ if (crossVisible != visible) {
+ crossVisible = visible;
+ update();
+ }
+}
+
QSize QColorPicker::sizeHint() const
{
return QSize(pWidth + 2*frameWidth(), pHeight + 2*frameWidth());
@@ -858,12 +869,13 @@ void QColorPicker::paintEvent(QPaintEvent* )
QRect r = contentsRect();
p.drawPixmap(r.topLeft(), pix);
- QPoint pt = colPt() + r.topLeft();
- p.setPen(Qt::black);
-
- p.fillRect(pt.x()-9, pt.y(), 20, 2, Qt::black);
- p.fillRect(pt.x(), pt.y()-9, 2, 20, Qt::black);
+ if (crossVisible) {
+ QPoint pt = colPt() + r.topLeft();
+ p.setPen(Qt::black);
+ p.fillRect(pt.x()-9, pt.y(), 20, 2, Qt::black);
+ p.fillRect(pt.x(), pt.y()-9, 2, 20, Qt::black);
+ }
}
void QColorPicker::resizeEvent(QResizeEvent *ev)
@@ -1477,8 +1489,8 @@ bool QColorDialogPrivate::selectColor(const QColor &col)
const QRgb *match = std::find(standardColors, standardColorsEnd, color);
if (match != standardColorsEnd) {
const int index = int(match - standardColors);
- const int row = index / standardColorRows;
- const int column = index % standardColorRows;
+ const int column = index / standardColorRows;
+ const int row = index % standardColorRows;
_q_newStandard(row, column);
standard->setCurrent(row, column);
standard->setSelected(row, column);
@@ -1493,8 +1505,8 @@ bool QColorDialogPrivate::selectColor(const QColor &col)
const QRgb *match = std::find(customColors, customColorsEnd, color);
if (match != customColorsEnd) {
const int index = int(match - customColors);
- const int row = index / customColorRows;
- const int column = index % customColorRows;
+ const int column = index / customColorRows;
+ const int row = index % customColorRows;
_q_newCustom(row, column);
custom->setCurrent(row, column);
custom->setSelected(row, column);
@@ -1578,6 +1590,7 @@ void QColorDialogPrivate::_q_pickScreenColor()
void QColorDialogPrivate::releaseColorPicking()
{
Q_Q(QColorDialog);
+ cp->setCrossVisible(true);
q->removeEventFilter(colorPickingEventFilter);
q->releaseMouse();
q->releaseKeyboard();
@@ -2174,6 +2187,9 @@ void QColorDialog::changeEvent(QEvent *e)
bool QColorDialogPrivate::handleColorPickingMouseMove(QMouseEvent *e)
{
+ // If the cross is visible the grabbed color will be black most of the times
+ cp->setCrossVisible(!cp->geometry().contains(e->pos()));
+
const QPoint globalPos = e->globalPos();
const QColor color = grabScreenColor(globalPos);
// QTBUG-39792, do not change standard, custom color selectors while moving as