summaryrefslogtreecommitdiffstats
path: root/src/widgets
diff options
context:
space:
mode:
Diffstat (limited to 'src/widgets')
-rw-r--r--src/widgets/accessible/itemviews.cpp4
-rw-r--r--src/widgets/accessible/itemviews_p.h4
-rw-r--r--src/widgets/accessible/rangecontrols.cpp10
-rw-r--r--src/widgets/accessible/rangecontrols_p.h1
-rw-r--r--src/widgets/dialogs/qcolordialog.cpp123
-rw-r--r--src/widgets/dialogs/qfiledialog.ui10
-rw-r--r--src/widgets/dialogs/qfontdialog.cpp2
-rw-r--r--src/widgets/styles/qcommonstyle.cpp21
-rw-r--r--src/widgets/widgets/qlineedit_p.cpp7
-rw-r--r--src/widgets/widgets/qtabbar.cpp2
10 files changed, 128 insertions, 56 deletions
diff --git a/src/widgets/accessible/itemviews.cpp b/src/widgets/accessible/itemviews.cpp
index fc969e17380..265c523eae0 100644
--- a/src/widgets/accessible/itemviews.cpp
+++ b/src/widgets/accessible/itemviews.cpp
@@ -60,7 +60,7 @@ int QAccessibleTable::logicalIndex(const QModelIndex &index) const
}
QAccessibleTable::QAccessibleTable(QWidget *w)
- : QAccessibleObject(w)
+ : QAccessibleWidgetV2(w)
{
Q_ASSERT(view());
@@ -677,7 +677,7 @@ void *QAccessibleTable::interface_cast(QAccessible::InterfaceType t)
return static_cast<QAccessibleSelectionInterface*>(this);
if (t == QAccessible::TableInterface)
return static_cast<QAccessibleTableInterface*>(this);
- return nullptr;
+ return QAccessibleWidgetV2::interface_cast(t);
}
void QAccessibleTable::modelChange(QAccessibleTableModelChangeEvent *event)
diff --git a/src/widgets/accessible/itemviews_p.h b/src/widgets/accessible/itemviews_p.h
index 9b30f36ced3..79f9a7f2f05 100644
--- a/src/widgets/accessible/itemviews_p.h
+++ b/src/widgets/accessible/itemviews_p.h
@@ -31,7 +31,9 @@ QT_BEGIN_NAMESPACE
class QAccessibleTableCell;
class QAccessibleTableHeaderCell;
-class QAccessibleTable :public QAccessibleTableInterface, public QAccessibleSelectionInterface, public QAccessibleObject
+class QAccessibleTable : public QAccessibleTableInterface,
+ public QAccessibleSelectionInterface,
+ public QAccessibleWidgetV2
{
public:
explicit QAccessibleTable(QWidget *w);
diff --git a/src/widgets/accessible/rangecontrols.cpp b/src/widgets/accessible/rangecontrols.cpp
index c0de5357c9a..1f7b20833dd 100644
--- a/src/widgets/accessible/rangecontrols.cpp
+++ b/src/widgets/accessible/rangecontrols.cpp
@@ -65,6 +65,16 @@ QAccessibleInterface *QAccessibleAbstractSpinBox::lineEditIface() const
#endif
}
+QAccessible::State QAccessibleAbstractSpinBox::state() const
+{
+ QAccessible::State state = QAccessibleWidgetV2::state();
+ if (abstractSpinBox()->isReadOnly())
+ state.readOnly = true;
+ else
+ state.editable = true;
+ return state;
+}
+
QString QAccessibleAbstractSpinBox::text(QAccessible::Text t) const
{
if (t == QAccessible::Value)
diff --git a/src/widgets/accessible/rangecontrols_p.h b/src/widgets/accessible/rangecontrols_p.h
index dd5a6a4531c..5a023d2f00b 100644
--- a/src/widgets/accessible/rangecontrols_p.h
+++ b/src/widgets/accessible/rangecontrols_p.h
@@ -42,6 +42,7 @@ public:
explicit QAccessibleAbstractSpinBox(QWidget *w);
virtual ~QAccessibleAbstractSpinBox();
+ QAccessible::State state() const override;
QString text(QAccessible::Text t) const override;
void *interface_cast(QAccessible::InterfaceType t) override;
diff --git a/src/widgets/dialogs/qcolordialog.cpp b/src/widgets/dialogs/qcolordialog.cpp
index 25d742039c5..f8125204045 100644
--- a/src/widgets/dialogs/qcolordialog.cpp
+++ b/src/widgets/dialogs/qcolordialog.cpp
@@ -585,18 +585,21 @@ signals:
protected:
QSize sizeHint() const override;
void paintEvent(QPaintEvent*) override;
+ void keyPressEvent(QKeyEvent *event) override;
void mouseMoveEvent(QMouseEvent *) override;
void mousePressEvent(QMouseEvent *) override;
void resizeEvent(QResizeEvent *) override;
private:
- int hue;
- int sat;
+ QPoint m_pos;
- QPoint colPt();
- int huePt(const QPoint &pt);
- int satPt(const QPoint &pt);
- void setCol(const QPoint &pt);
+ QPixmap createColorsPixmap();
+ QPoint colPt(int hue, int sat);
+ int huePt(const QPoint &pt, const QSize &widgetSize);
+ int huePt(const QPoint &pt) { return huePt(pt, size()); }
+ int satPt(const QPoint &pt, const QSize &widgetSize);
+ int satPt(const QPoint &pt) { return satPt(pt, size()); }
+ void setCol(const QPoint &pt, bool notify = true);
QPixmap pix;
bool crossVisible;
@@ -625,6 +628,7 @@ signals:
protected:
void paintEvent(QPaintEvent*) override;
+ void keyPressEvent(QKeyEvent *event) override;
void mouseMoveEvent(QMouseEvent *) override;
void mousePressEvent(QMouseEvent *) override;
@@ -660,6 +664,7 @@ QColorLuminancePicker::QColorLuminancePicker(QWidget* parent)
hue = 100; val = 100; sat = 100;
pix = nullptr;
// setAttribute(WA_NoErase, true);
+ setFocusPolicy(Qt::StrongFocus);
}
QColorLuminancePicker::~QColorLuminancePicker()
@@ -667,6 +672,21 @@ QColorLuminancePicker::~QColorLuminancePicker()
delete pix;
}
+void QColorLuminancePicker::keyPressEvent(QKeyEvent *event)
+{
+ switch (event->key()) {
+ case Qt::Key_Down:
+ setVal(std::clamp(val - 1, 0, 255));
+ break;
+ case Qt::Key_Up:
+ setVal(std::clamp(val + 1, 0, 255));
+ break;
+ default:
+ QWidget::keyPressEvent(event);
+ break;
+ }
+}
+
void QColorLuminancePicker::mouseMoveEvent(QMouseEvent *m)
{
if (m->buttons() == Qt::NoButton) {
@@ -737,38 +757,53 @@ void QColorLuminancePicker::setCol(int h, int s , int v)
repaint();
}
-QPoint QColorPicker::colPt()
+QPoint QColorPicker::colPt(int hue, int sat)
{
QRect r = contentsRect();
return QPoint((360 - hue) * (r.width() - 1) / 360, (255 - sat) * (r.height() - 1) / 255);
}
-int QColorPicker::huePt(const QPoint &pt)
+int QColorPicker::huePt(const QPoint &pt, const QSize &widgetSize)
{
- QRect r = contentsRect();
- return 360 - pt.x() * 360 / (r.width() - 1);
+ QRect r = QRect(QPoint(0, 0), widgetSize) - contentsMargins();
+ return std::clamp(360 - pt.x() * 360 / (r.width() - 1), 0, 359);
}
-int QColorPicker::satPt(const QPoint &pt)
+int QColorPicker::satPt(const QPoint &pt, const QSize &widgetSize)
{
- QRect r = contentsRect();
- return 255 - pt.y() * 255 / (r.height() - 1);
+ QRect r = QRect(QPoint(0, 0), widgetSize) - contentsMargins();
+ return std::clamp(255 - pt.y() * 255 / (r.height() - 1), 0, 255);
}
-void QColorPicker::setCol(const QPoint &pt)
+void QColorPicker::setCol(const QPoint &pt, bool notify)
{
- setCol(huePt(pt), satPt(pt));
+ if (pt == m_pos)
+ return;
+
+ QRect r(m_pos, QSize(20, 20));
+ m_pos.setX(std::clamp(pt.x(), 0, pix.width() - 1));
+ m_pos.setY(std::clamp(pt.y(), 0, pix.height() - 1));
+ r = r.united(QRect(m_pos, QSize(20, 20)));
+ r.translate(contentsRect().x() - 9, contentsRect().y() - 9);
+ // update(r);
+ repaint(r);
+
+ if (notify)
+ emit newCol(huePt(m_pos), satPt(m_pos));
}
QColorPicker::QColorPicker(QWidget* parent)
: QFrame(parent)
, crossVisible(true)
{
- hue = 0; sat = 0;
- setCol(150, 255);
-
setAttribute(Qt::WA_NoSystemBackground);
+ setFocusPolicy(Qt::StrongFocus);
setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed) );
+ adjustSize();
+
+ pix = createColorsPixmap();
+
+ setCol(150, 255);
}
QColorPicker::~QColorPicker()
@@ -792,15 +827,31 @@ void QColorPicker::setCol(int h, int s)
{
int nhue = qMin(qMax(0,h), 359);
int nsat = qMin(qMax(0,s), 255);
- if (nhue == hue && nsat == sat)
+ if (nhue == huePt(m_pos) && nsat == satPt(m_pos))
return;
- QRect r(colPt(), QSize(20,20));
- hue = nhue; sat = nsat;
- r = r.united(QRect(colPt(), QSize(20,20)));
- r.translate(contentsRect().x()-9, contentsRect().y()-9);
- // update(r);
- repaint(r);
+ setCol(colPt(nhue, nsat), false);
+}
+
+void QColorPicker::keyPressEvent(QKeyEvent *event)
+{
+ switch (event->key()) {
+ case Qt::Key_Down:
+ setCol(m_pos + QPoint(0, 1));
+ break;
+ case Qt::Key_Left:
+ setCol(m_pos + QPoint(-1, 0));
+ break;
+ case Qt::Key_Right:
+ setCol(m_pos + QPoint(1, 0));
+ break;
+ case Qt::Key_Up:
+ setCol(m_pos + QPoint(0, -1));
+ break;
+ default:
+ QFrame::keyPressEvent(event);
+ break;
+ }
}
void QColorPicker::mouseMoveEvent(QMouseEvent *m)
@@ -811,14 +862,12 @@ void QColorPicker::mouseMoveEvent(QMouseEvent *m)
return;
}
setCol(p);
- emit newCol(hue, sat);
}
void QColorPicker::mousePressEvent(QMouseEvent *m)
{
QPoint p = m->position().toPoint() - contentsRect().topLeft();
setCol(p);
- emit newCol(hue, sat);
}
void QColorPicker::paintEvent(QPaintEvent* )
@@ -830,7 +879,7 @@ void QColorPicker::paintEvent(QPaintEvent* )
p.drawPixmap(r.topLeft(), pix);
if (crossVisible) {
- QPoint pt = colPt() + r.topLeft();
+ QPoint pt = m_pos + 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);
@@ -841,6 +890,21 @@ void QColorPicker::resizeEvent(QResizeEvent *ev)
{
QFrame::resizeEvent(ev);
+ pix = createColorsPixmap();
+
+ const QSize &oldSize = ev->oldSize();
+ if (!oldSize.isValid())
+ return;
+
+ // calculate hue/saturation based on previous widget size
+ // and update position accordingly
+ const int hue = huePt(m_pos, oldSize);
+ const int sat = satPt(m_pos, oldSize);
+ setCol(hue, sat);
+}
+
+QPixmap QColorPicker::createColorsPixmap()
+{
int w = width() - frameWidth() * 2;
int h = height() - frameWidth() * 2;
QImage img(w, h, QImage::Format_RGB32);
@@ -858,10 +922,9 @@ void QColorPicker::resizeEvent(QResizeEvent *ev)
++x;
}
}
- pix = QPixmap::fromImage(img);
+ return QPixmap::fromImage(img);
}
-
class QColSpinBox : public QSpinBox
{
public:
diff --git a/src/widgets/dialogs/qfiledialog.ui b/src/widgets/dialogs/qfiledialog.ui
index f275e20c633..97f39fa6194 100644
--- a/src/widgets/dialogs/qfiledialog.ui
+++ b/src/widgets/dialogs/qfiledialog.ui
@@ -20,7 +20,10 @@
<item row="0" column="0">
<widget class="QLabel" name="lookInLabel">
<property name="text">
- <string>Look in:</string>
+ <string>&amp;Look in:</string>
+ </property>
+ <property name="buddy">
+ <cstring>lookInCombo</cstring>
</property>
</widget>
</item>
@@ -284,7 +287,10 @@
</sizepolicy>
</property>
<property name="text">
- <string>Files of type:</string>
+ <string>Files of &amp;type:</string>
+ </property>
+ <property name="buddy">
+ <cstring>fileTypeCombo</cstring>
</property>
</widget>
</item>
diff --git a/src/widgets/dialogs/qfontdialog.cpp b/src/widgets/dialogs/qfontdialog.cpp
index 870b0c40faf..c4f8af1a639 100644
--- a/src/widgets/dialogs/qfontdialog.cpp
+++ b/src/widgets/dialogs/qfontdialog.cpp
@@ -172,7 +172,7 @@ void QFontDialogPrivate::init()
sizeAccel = new QLabel(q);
#ifndef QT_NO_SHORTCUT
- sizeAccel->setBuddy(sizeEdit);
+ sizeAccel->setBuddy(sizeList);
#endif
sizeAccel->setIndent(2);
diff --git a/src/widgets/styles/qcommonstyle.cpp b/src/widgets/styles/qcommonstyle.cpp
index c4b78539114..bb9f7ab27fc 100644
--- a/src/widgets/styles/qcommonstyle.cpp
+++ b/src/widgets/styles/qcommonstyle.cpp
@@ -5,15 +5,12 @@
#include "qcommonstyle.h"
#include "qcommonstyle_p.h"
-#include <qfile.h>
#if QT_CONFIG(itemviews)
#include <qabstractitemview.h>
#endif
#include <qapplication.h>
#include <private/qguiapplication_p.h>
#include <qpa/qplatformtheme.h>
-#include <qbitmap.h>
-#include <qcache.h>
#if QT_CONFIG(dockwidget)
#include <qdockwidget.h>
#endif
@@ -61,7 +58,6 @@
#endif
#include <private/qcommonstylepixmaps_p.h>
#include <private/qmath_p.h>
-#include <qdebug.h>
#include <qtextformat.h>
#if QT_CONFIG(wizard)
#include <qwizard.h>
@@ -69,11 +65,6 @@
#if QT_CONFIG(filedialog)
#include <qsidebar_p.h>
#endif
-#include <qfileinfo.h>
-#include <qdir.h>
-#if QT_CONFIG(settings)
-#include <qsettings.h>
-#endif
#include <qvariant.h>
#include <qpixmapcache.h>
#if QT_CONFIG(animation)
@@ -6199,17 +6190,17 @@ QPixmap QCommonStyle::generatedIconPixmap(QIcon::Mode iconMode, const QPixmap &p
return QPixmap::fromImage(std::move(im));
}
case QIcon::Selected: {
- QImage img = pixmap.toImage().convertToFormat(QImage::Format_ARGB32_Premultiplied);
QColor color = opt->palette.color(QPalette::Normal, QPalette::Highlight);
color.setAlphaF(0.3f);
- QPainter painter(&img);
+ QPixmap ret(pixmap);
+ QPainter painter(&ret);
painter.setCompositionMode(QPainter::CompositionMode_SourceAtop);
- painter.fillRect(0, 0, img.width(), img.height(), color);
+ painter.fillRect(0, 0, pixmap.width(), pixmap.height(), color);
painter.end();
- return QPixmap::fromImage(std::move(img)); }
+ return ret;
+ }
case QIcon::Active:
- return pixmap;
- default:
+ case QIcon::Normal:
break;
}
return pixmap;
diff --git a/src/widgets/widgets/qlineedit_p.cpp b/src/widgets/widgets/qlineedit_p.cpp
index 55e6137dba9..ee80cca649c 100644
--- a/src/widgets/widgets/qlineedit_p.cpp
+++ b/src/widgets/widgets/qlineedit_p.cpp
@@ -353,17 +353,16 @@ QLineEditPrivate *QLineEditIconButton::lineEditPrivate() const
void QLineEditIconButton::paintEvent(QPaintEvent *)
{
QPainter painter(this);
- QIcon::Mode state = QIcon::Disabled;
+ QIcon::Mode mode = QIcon::Disabled;
if (isEnabled())
- state = isDown() ? QIcon::Active : QIcon::Normal;
+ mode = isDown() ? QIcon::Active : QIcon::Normal;
const QLineEditPrivate *lep = lineEditPrivate();
const int iconWidth = lep ? lep->sideWidgetParameters().iconSize : 16;
const QSize iconSize(iconWidth, iconWidth);
- const QPixmap iconPixmap = icon().pixmap(iconSize, devicePixelRatio(), state, QIcon::Off);
QRect pixmapRect = QRect(QPoint(0, 0), iconSize);
pixmapRect.moveCenter(rect().center());
painter.setOpacity(m_opacity);
- painter.drawPixmap(pixmapRect, iconPixmap);
+ icon().paint(&painter, pixmapRect, Qt::AlignCenter, mode, QIcon::Off);
}
void QLineEditIconButton::actionEvent(QActionEvent *e)
diff --git a/src/widgets/widgets/qtabbar.cpp b/src/widgets/widgets/qtabbar.cpp
index 0b562a47879..8e6f497d7f5 100644
--- a/src/widgets/widgets/qtabbar.cpp
+++ b/src/widgets/widgets/qtabbar.cpp
@@ -1003,7 +1003,7 @@ int QTabBar::insertTab(int index, const QIcon& icon, const QString &text)
++tab->lastTab;
}
- if (tabAt(d->mousePosition) == index) {
+ if (isVisible() && tabAt(d->mousePosition) == index) {
d->hoverIndex = index;
d->hoverRect = tabRect(index);
}