diff options
Diffstat (limited to 'src/widgets')
-rw-r--r-- | src/widgets/graphicsview/qgraphicsgridlayout.cpp | 9 | ||||
-rw-r--r-- | src/widgets/graphicsview/qgraphicslinearlayout.cpp | 10 | ||||
-rw-r--r-- | src/widgets/graphicsview/qgraphicsview.cpp | 2 | ||||
-rw-r--r-- | src/widgets/itemviews/qabstractitemview.cpp | 6 | ||||
-rw-r--r-- | src/widgets/itemviews/qtreeview.cpp | 6 | ||||
-rw-r--r-- | src/widgets/styles/qcommonstyle.cpp | 6 | ||||
-rw-r--r-- | src/widgets/styles/qmacstyle_mac.mm | 3 | ||||
-rw-r--r-- | src/widgets/util/qscroller.cpp | 2 | ||||
-rw-r--r-- | src/widgets/widgets/qplaintextedit.cpp | 32 | ||||
-rw-r--r-- | src/widgets/widgets/qprogressbar.cpp | 2 | ||||
-rw-r--r-- | src/widgets/widgets/qtabbar.cpp | 27 | ||||
-rw-r--r-- | src/widgets/widgets/qtabbar_p.h | 15 | ||||
-rw-r--r-- | src/widgets/widgets/qtextedit.cpp | 30 |
13 files changed, 93 insertions, 57 deletions
diff --git a/src/widgets/graphicsview/qgraphicsgridlayout.cpp b/src/widgets/graphicsview/qgraphicsgridlayout.cpp index 422193d4dd..ae761d3478 100644 --- a/src/widgets/graphicsview/qgraphicsgridlayout.cpp +++ b/src/widgets/graphicsview/qgraphicsgridlayout.cpp @@ -89,6 +89,7 @@ #include "qgraphicswidget.h" #include "qgraphicsgridlayoutengine_p.h" #include "qgraphicslayoutstyleinfo_p.h" +#include "qscopedpointer.h" #ifdef QT_DEBUG # include <QtCore/qdebug.h> #endif @@ -98,10 +99,10 @@ QT_BEGIN_NAMESPACE class QGraphicsGridLayoutPrivate : public QGraphicsLayoutPrivate { public: - QGraphicsGridLayoutPrivate(): m_styleInfo(0) { } + QGraphicsGridLayoutPrivate() { } QGraphicsLayoutStyleInfo *styleInfo() const; - mutable QGraphicsLayoutStyleInfo *m_styleInfo; + mutable QScopedPointer<QGraphicsLayoutStyleInfo> m_styleInfo; QGraphicsGridLayoutEngine engine; #ifdef QGRIDLAYOUTENGINE_DEBUG @@ -113,8 +114,8 @@ public: QGraphicsLayoutStyleInfo *QGraphicsGridLayoutPrivate::styleInfo() const { if (!m_styleInfo) - m_styleInfo = new QGraphicsLayoutStyleInfo(this); - return m_styleInfo; + m_styleInfo.reset(new QGraphicsLayoutStyleInfo(this)); + return m_styleInfo.data(); } /*! diff --git a/src/widgets/graphicsview/qgraphicslinearlayout.cpp b/src/widgets/graphicsview/qgraphicslinearlayout.cpp index 524649bf12..6763af7905 100644 --- a/src/widgets/graphicsview/qgraphicslinearlayout.cpp +++ b/src/widgets/graphicsview/qgraphicslinearlayout.cpp @@ -122,6 +122,7 @@ #include "qgraphicswidget.h" #include "qgraphicsgridlayoutengine_p.h" #include "qgraphicslayoutstyleinfo_p.h" +#include "qscopedpointer.h" #ifdef QT_DEBUG #include <QtCore/qdebug.h> #endif @@ -132,8 +133,7 @@ class QGraphicsLinearLayoutPrivate : public QGraphicsLayoutPrivate { public: QGraphicsLinearLayoutPrivate(Qt::Orientation orientation) - : orientation(orientation), - m_styleInfo(0) + : orientation(orientation) { } void removeGridItem(QGridLayoutItem *gridItem); @@ -143,7 +143,7 @@ public: int gridColumn(int index) const; Qt::Orientation orientation; - mutable QGraphicsLayoutStyleInfo *m_styleInfo; + mutable QScopedPointer<QGraphicsLayoutStyleInfo> m_styleInfo; QGraphicsGridLayoutEngine engine; }; @@ -178,8 +178,8 @@ int QGraphicsLinearLayoutPrivate::gridColumn(int index) const QGraphicsLayoutStyleInfo *QGraphicsLinearLayoutPrivate::styleInfo() const { if (!m_styleInfo) - m_styleInfo = new QGraphicsLayoutStyleInfo(this); - return m_styleInfo; + m_styleInfo.reset(new QGraphicsLayoutStyleInfo(this)); + return m_styleInfo.data(); } /*! diff --git a/src/widgets/graphicsview/qgraphicsview.cpp b/src/widgets/graphicsview/qgraphicsview.cpp index 450d5a7d9c..fc5dbdd80a 100644 --- a/src/widgets/graphicsview/qgraphicsview.cpp +++ b/src/widgets/graphicsview/qgraphicsview.cpp @@ -3831,7 +3831,7 @@ QTransform QGraphicsView::transform() const } /*! - Returns a matrix that maps viewport coordinates to scene coordinates. + Returns a matrix that maps scene coordinates to viewport coordinates. \sa mapToScene(), mapFromScene() */ diff --git a/src/widgets/itemviews/qabstractitemview.cpp b/src/widgets/itemviews/qabstractitemview.cpp index 1bdb4352af..6c38c53a77 100644 --- a/src/widgets/itemviews/qabstractitemview.cpp +++ b/src/widgets/itemviews/qabstractitemview.cpp @@ -2981,7 +2981,11 @@ void QAbstractItemView::keyboardSearch(const QString &search) : d->model->index(0, 0, d->root); bool skipRow = false; bool keyboardTimeWasValid = d->keyboardInputTime.isValid(); - qint64 keyboardInputTimeElapsed = d->keyboardInputTime.restart(); + qint64 keyboardInputTimeElapsed; + if (keyboardTimeWasValid) + keyboardInputTimeElapsed = d->keyboardInputTime.restart(); + else + d->keyboardInputTime.start(); if (search.isEmpty() || !keyboardTimeWasValid || keyboardInputTimeElapsed > QApplication::keyboardInputInterval()) { d->keyboardInput = search; diff --git a/src/widgets/itemviews/qtreeview.cpp b/src/widgets/itemviews/qtreeview.cpp index 95f14bec78..8031d538a6 100644 --- a/src/widgets/itemviews/qtreeview.cpp +++ b/src/widgets/itemviews/qtreeview.cpp @@ -1024,7 +1024,11 @@ void QTreeView::keyboardSearch(const QString &search) bool skipRow = false; bool keyboardTimeWasValid = d->keyboardInputTime.isValid(); - qint64 keyboardInputTimeElapsed = d->keyboardInputTime.restart(); + qint64 keyboardInputTimeElapsed; + if (keyboardTimeWasValid) + keyboardInputTimeElapsed = d->keyboardInputTime.restart(); + else + d->keyboardInputTime.start(); if (search.isEmpty() || !keyboardTimeWasValid || keyboardInputTimeElapsed > QApplication::keyboardInputInterval()) { d->keyboardInput = search; diff --git a/src/widgets/styles/qcommonstyle.cpp b/src/widgets/styles/qcommonstyle.cpp index 5ac2293751..63024360ae 100644 --- a/src/widgets/styles/qcommonstyle.cpp +++ b/src/widgets/styles/qcommonstyle.cpp @@ -1616,7 +1616,7 @@ void QCommonStyle::drawControl(ControlElement element, const QStyleOption *opt, if (!hasArrow) { proxy()->drawItemPixmap(p, pr, Qt::AlignCenter, pm); } else { - drawArrow(this, toolbutton, pr, p, widget); + drawArrow(proxy(), toolbutton, pr, p, widget); } alignment |= Qt::AlignCenter; } else { @@ -1626,7 +1626,7 @@ void QCommonStyle::drawControl(ControlElement element, const QStyleOption *opt, if (!hasArrow) { proxy()->drawItemPixmap(p, QStyle::visualRect(opt->direction, rect, pr), Qt::AlignCenter, pm); } else { - drawArrow(this, toolbutton, pr, p, widget); + drawArrow(proxy(), toolbutton, pr, p, widget); } alignment |= Qt::AlignLeft | Qt::AlignVCenter; } @@ -1637,7 +1637,7 @@ void QCommonStyle::drawControl(ControlElement element, const QStyleOption *opt, } else { rect.translate(shiftX, shiftY); if (hasArrow) { - drawArrow(this, toolbutton, rect, p, widget); + drawArrow(proxy(), toolbutton, rect, p, widget); } else { proxy()->drawItemPixmap(p, rect, Qt::AlignCenter, pm); } diff --git a/src/widgets/styles/qmacstyle_mac.mm b/src/widgets/styles/qmacstyle_mac.mm index d29ff93382..e51f750916 100644 --- a/src/widgets/styles/qmacstyle_mac.mm +++ b/src/widgets/styles/qmacstyle_mac.mm @@ -4954,6 +4954,9 @@ QRect QMacStyle::subElementRect(SubElement sr, const QStyleOption *opt, break; } case SE_ProgressBarGroove: + // Wrong in the secondary dimension, but accurate enough in the main dimension. + rect = opt->rect; + break; case SE_ProgressBarLabel: break; case SE_ProgressBarContents: diff --git a/src/widgets/util/qscroller.cpp b/src/widgets/util/qscroller.cpp index 2e48208402..f3b442928a 100644 --- a/src/widgets/util/qscroller.cpp +++ b/src/widgets/util/qscroller.cpp @@ -193,7 +193,7 @@ class QScrollTimer : public QAbstractAnimation { public: QScrollTimer(QScrollerPrivate *_d) - : d(_d), ignoreUpdate(false), skip(0) + : QAbstractAnimation(_d), d(_d), ignoreUpdate(false), skip(0) { } int duration() const Q_DECL_OVERRIDE diff --git a/src/widgets/widgets/qplaintextedit.cpp b/src/widgets/widgets/qplaintextedit.cpp index 3772a7866e..17eac9db58 100644 --- a/src/widgets/widgets/qplaintextedit.cpp +++ b/src/widgets/widgets/qplaintextedit.cpp @@ -2194,27 +2194,25 @@ QVariant QPlainTextEdit::inputMethodQuery(Qt::InputMethodQuery property) const /*!\internal */ -QVariant QPlainTextEdit::inputMethodQuery(Qt::InputMethodQuery property, QVariant argument) const +QVariant QPlainTextEdit::inputMethodQuery(Qt::InputMethodQuery query, QVariant argument) const { Q_D(const QPlainTextEdit); - QVariant v; - switch (property) { - case Qt::ImHints: - v = QWidget::inputMethodQuery(property); - break; + if (query == Qt::ImHints) + return QWidget::inputMethodQuery(query); + const QVariant v = d->control->inputMethodQuery(query, argument); + const QPointF offset = contentOffset(); + switch (v.type()) { + case QVariant::RectF: + return v.toRectF().translated(offset); + case QVariant::PointF: + return v.toPointF() + offset; + case QVariant::Rect: + return v.toRect().translated(offset.toPoint()); + case QVariant::Point: + return v.toPoint() + offset.toPoint(); default: - v = d->control->inputMethodQuery(property, argument); - const QPoint offset(-d->horizontalOffset(), -0); - if (v.type() == QVariant::RectF) - v = v.toRectF().toRect().translated(offset); - else if (v.type() == QVariant::PointF) - v = v.toPointF().toPoint() + offset; - else if (v.type() == QVariant::Rect) - v = v.toRect().translated(offset); - else if (v.type() == QVariant::Point) - v = v.toPoint() + offset; + break; } - return v; } diff --git a/src/widgets/widgets/qprogressbar.cpp b/src/widgets/widgets/qprogressbar.cpp index 1ba0d78622..10f005e6d3 100644 --- a/src/widgets/widgets/qprogressbar.cpp +++ b/src/widgets/widgets/qprogressbar.cpp @@ -161,7 +161,7 @@ bool QProgressBarPrivate::repaintRequired() const QStyleOptionProgressBar opt; q->initStyleOption(&opt); int cw = q->style()->pixelMetric(QStyle::PM_ProgressBarChunkWidth, &opt, q); - QRect groove = q->style()->subElementRect(QStyle::SE_ProgressBarGroove, &opt, q); + QRect groove = q->style()->subElementRect(QStyle::SE_ProgressBarGroove, &opt, q); // This expression is basically // (valueDifference / (maximum - minimum) > cw / groove.width()) // transformed to avoid integer division. diff --git a/src/widgets/widgets/qtabbar.cpp b/src/widgets/widgets/qtabbar.cpp index f56830c14b..6c748c09bb 100644 --- a/src/widgets/widgets/qtabbar.cpp +++ b/src/widgets/widgets/qtabbar.cpp @@ -70,6 +70,23 @@ QT_BEGIN_NAMESPACE +QMovableTabWidget::QMovableTabWidget(QWidget *parent) + : QWidget(parent) +{ +} + +void QMovableTabWidget::setPixmap(const QPixmap &pixmap) +{ + m_pixmap = pixmap; + update(); +} + +void QMovableTabWidget::paintEvent(QPaintEvent *e) +{ + Q_UNUSED(e); + QPainter p(this); + p.drawPixmap(0, 0, m_pixmap); +} inline static bool verticalTabs(QTabBar::Shape shape) { @@ -1992,13 +2009,14 @@ void QTabBarPrivate::setupMovableTab() { Q_Q(QTabBar); if (!movingTab) - movingTab = new QWidget(q); + movingTab = new QMovableTabWidget(q); int taboverlap = q->style()->pixelMetric(QStyle::PM_TabBarTabOverlap, 0 ,q); QRect grabRect = q->tabRect(pressedIndex); grabRect.adjust(-taboverlap, 0, taboverlap, 0); - QPixmap grabImage(grabRect.size()); + QPixmap grabImage(grabRect.size() * q->devicePixelRatioF()); + grabImage.setDevicePixelRatio(q->devicePixelRatioF()); grabImage.fill(Qt::transparent); QStylePainter p(&grabImage, q); p.initFrom(q); @@ -2009,11 +2027,8 @@ void QTabBarPrivate::setupMovableTab() p.drawControl(QStyle::CE_TabBarTab, tab); p.end(); - QPalette pal; - pal.setBrush(QPalette::All, QPalette::Window, grabImage); - movingTab->setPalette(pal); + movingTab->setPixmap(grabImage); movingTab->setGeometry(grabRect); - movingTab->setAutoFillBackground(true); movingTab->raise(); // Re-arrange widget order to avoid overlaps diff --git a/src/widgets/widgets/qtabbar_p.h b/src/widgets/widgets/qtabbar_p.h index c5eb0d42d7..48f235f050 100644 --- a/src/widgets/widgets/qtabbar_p.h +++ b/src/widgets/widgets/qtabbar_p.h @@ -67,6 +67,19 @@ QT_BEGIN_NAMESPACE +class QMovableTabWidget : public QWidget +{ +public: + explicit QMovableTabWidget(QWidget *parent = Q_NULLPTR); + void setPixmap(const QPixmap &pixmap); + +protected: + void paintEvent(QPaintEvent *e) Q_DECL_OVERRIDE; + +private: + QPixmap m_pixmap; +}; + class QTabBarPrivate : public QWidgetPrivate { Q_DECLARE_PUBLIC(QTabBar) @@ -207,7 +220,7 @@ public: int switchTabCurrentIndex; int switchTabTimerId; - QWidget *movingTab; + QMovableTabWidget *movingTab; #ifdef Q_DEAD_CODE_FROM_QT4_MAC int previousPressedIndex; #endif diff --git a/src/widgets/widgets/qtextedit.cpp b/src/widgets/widgets/qtextedit.cpp index 3f2e4728ed..1dd774cf7a 100644 --- a/src/widgets/widgets/qtextedit.cpp +++ b/src/widgets/widgets/qtextedit.cpp @@ -1727,24 +1727,22 @@ QVariant QTextEdit::inputMethodQuery(Qt::InputMethodQuery property) const QVariant QTextEdit::inputMethodQuery(Qt::InputMethodQuery query, QVariant argument) const { Q_D(const QTextEdit); - QVariant v; - switch (query) { - case Qt::ImHints: - v = QWidget::inputMethodQuery(query); - break; + if (query == Qt::ImHints) + return QWidget::inputMethodQuery(query); + const QVariant v = d->control->inputMethodQuery(query, argument); + const QPointF offset(-d->horizontalOffset(), -d->verticalOffset()); + switch (v.type()) { + case QVariant::RectF: + return v.toRectF().translated(offset); + case QVariant::PointF: + return v.toPointF() + offset; + case QVariant::Rect: + return v.toRect().translated(offset.toPoint()); + case QVariant::Point: + return v.toPoint() + offset.toPoint(); default: - v = d->control->inputMethodQuery(query, argument); - const QPoint offset(-d->horizontalOffset(), -d->verticalOffset()); - if (v.type() == QVariant::RectF) - v = v.toRectF().toRect().translated(offset); - else if (v.type() == QVariant::PointF) - v = v.toPointF().toPoint() + offset; - else if (v.type() == QVariant::Rect) - v = v.toRect().translated(offset); - else if (v.type() == QVariant::Point) - v = v.toPoint() + offset; + break; } - return v; } |