From f2b77e3ff71511944ad8da56cb63c4ca8daf6417 Mon Sep 17 00:00:00 2001 From: Samuel Gaist Date: Sun, 27 Oct 2013 22:11:38 +0100 Subject: Qt 5 to-do in qpainterengineex_p.h This patch apply the recommended cleanup in qpainterengineex_p.h Task-number: QTBUG-25069 Change-Id: Ice2c3298c88ba6a7141642470aeeefa782af7f3a Reviewed-by: Alex Blasche --- src/widgets/effects/qpixmapfilter.cpp | 45 ++--------------------------------- 1 file changed, 2 insertions(+), 43 deletions(-) (limited to 'src/widgets') diff --git a/src/widgets/effects/qpixmapfilter.cpp b/src/widgets/effects/qpixmapfilter.cpp index 6f618b8914..216b19ca48 100644 --- a/src/widgets/effects/qpixmapfilter.cpp +++ b/src/widgets/effects/qpixmapfilter.cpp @@ -416,17 +416,7 @@ void QPixmapConvolutionFilter::draw(QPainter *painter, const QPointF &p, const Q if (src.isNull()) return; - QPixmapFilter *filter = painter->paintEngine() && painter->paintEngine()->isExtended() ? - static_cast(painter->paintEngine())->pixmapFilter(type(), this) : 0; - QPixmapConvolutionFilter *convolutionFilter = static_cast(filter); - if (convolutionFilter) { - convolutionFilter->setConvolutionKernel(d->convolutionKernel, d->kernelWidth, d->kernelHeight); - convolutionFilter->d_func()->convoluteAlpha = d->convoluteAlpha; - convolutionFilter->draw(painter, p, src, srcRect); - return; - } - - // falling back to raster implementation + // raster implementation QImage *target = 0; if (painter->paintEngine()->paintDevice()->devType() == QInternal::Image) { @@ -924,16 +914,6 @@ void QPixmapBlurFilter::draw(QPainter *painter, const QPointF &p, const QPixmap if (qt_scaleForTransform(painter->transform(), &scale)) scaledRadius /= scale; - QPixmapFilter *filter = painter->paintEngine() && painter->paintEngine()->isExtended() ? - static_cast(painter->paintEngine())->pixmapFilter(type(), this) : 0; - QPixmapBlurFilter *blurFilter = static_cast(filter); - if (blurFilter) { - blurFilter->setRadius(scaledRadius); - blurFilter->setBlurHints(d->hints); - blurFilter->draw(painter, p, src, srcRect); - return; - } - QImage srcImage; QImage destImage; @@ -1094,17 +1074,7 @@ void QPixmapColorizeFilter::draw(QPainter *painter, const QPointF &dest, const Q if (src.isNull()) return; - QPixmapFilter *filter = painter->paintEngine() && painter->paintEngine()->isExtended() ? - static_cast(painter->paintEngine())->pixmapFilter(type(), this) : 0; - QPixmapColorizeFilter *colorizeFilter = static_cast(filter); - if (colorizeFilter) { - colorizeFilter->setColor(d->color); - colorizeFilter->setStrength(d->strength); - colorizeFilter->draw(painter, dest, src, srcRect); - return; - } - - // falling back to raster implementation + // raster implementation if (!d->opaque) { painter->drawPixmap(dest, src, srcRect); @@ -1328,17 +1298,6 @@ void QPixmapDropShadowFilter::draw(QPainter *p, if (px.isNull()) return; - QPixmapFilter *filter = p->paintEngine() && p->paintEngine()->isExtended() ? - static_cast(p->paintEngine())->pixmapFilter(type(), this) : 0; - QPixmapDropShadowFilter *dropShadowFilter = static_cast(filter); - if (dropShadowFilter) { - dropShadowFilter->setColor(d->color); - dropShadowFilter->setBlurRadius(d->radius); - dropShadowFilter->setOffset(d->offset); - dropShadowFilter->draw(p, pos, px, src); - return; - } - QImage tmp(px.size(), QImage::Format_ARGB32_Premultiplied); tmp.fill(0); QPainter tmpPainter(&tmp); -- cgit v1.2.3 From b4491c358ddc4d87258d92bc7fc99832bc3cd526 Mon Sep 17 00:00:00 2001 From: Laszlo Agocs Date: Thu, 29 Jan 2015 17:06:21 +0100 Subject: Document that setGraphicsEffect is not suitable for GL widgets Task-number: QTBUG-44188 Change-Id: Ie5bea14ffb804124421e97e5f49975ac9ad6d838 Reviewed-by: Shawn Rutledge --- src/widgets/kernel/qwidget.cpp | 3 +++ 1 file changed, 3 insertions(+) (limited to 'src/widgets') diff --git a/src/widgets/kernel/qwidget.cpp b/src/widgets/kernel/qwidget.cpp index 27d45ccea6..68715413d1 100644 --- a/src/widgets/kernel/qwidget.cpp +++ b/src/widgets/kernel/qwidget.cpp @@ -5227,6 +5227,9 @@ QGraphicsEffect *QWidget::graphicsEffect() const \note This function will apply the effect on itself and all its children. + \note Graphics effects are not supported for OpenGL-based widgets, such as QGLWidget, + QOpenGLWidget and QQuickWidget. + \since 4.6 \sa graphicsEffect() -- cgit v1.2.3 From e558e71791bb0cdcf77f81fe904c61597c01ae1e Mon Sep 17 00:00:00 2001 From: Andy Shaw Date: Thu, 29 Jan 2015 15:25:53 +0100 Subject: Fix the look of inactive checkboxes in itemviews on OS X 10.10 Task-number: QTBUG-43875 Change-Id: I4734647e2f3f9e3f68a3ae77fb5c825c7d99f8b4 Reviewed-by: Gabriel de Dietrich --- src/widgets/styles/qmacstyle_mac.mm | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'src/widgets') diff --git a/src/widgets/styles/qmacstyle_mac.mm b/src/widgets/styles/qmacstyle_mac.mm index 38c082baf5..0a9fb19fa4 100644 --- a/src/widgets/styles/qmacstyle_mac.mm +++ b/src/widgets/styles/qmacstyle_mac.mm @@ -1970,6 +1970,7 @@ void QMacStylePrivate::drawColorlessButton(const HIRect &macRect, HIThemeButtonD || bdi->kind == kThemeComboBoxSmall || bdi->kind == kThemeComboBoxMini; const bool button = opt->type == QStyleOption::SO_Button; + const bool viewItem = opt->type == QStyleOption::SO_ViewItem; const bool pressed = bdi->state == kThemeStatePressed; const bool usingYosemiteOrLater = QSysInfo::MacintoshVersion > QSysInfo::MV_10_9; @@ -2010,6 +2011,8 @@ void QMacStylePrivate::drawColorlessButton(const HIRect &macRect, HIThemeButtonD HIRect newRect = CGRectMake(xoff, yoff, macRect.size.width, macRect.size.height); if (button && pressed) bdi->state = kThemeStateActive; + else if (usingYosemiteOrLater && viewItem) + bdi->state = kThemeStateInactive; HIThemeDrawButton(&newRect, bdi, cg, kHIThemeOrientationNormal, 0); } } @@ -2057,7 +2060,7 @@ void QMacStylePrivate::drawColorlessButton(const HIRect &macRect, HIThemeButtonD rect.adjust(0, 0, -5, 0); drawNSViewInRect(cw, bc, rect, p); return; - } else if (usingYosemiteOrLater && editableCombo) { + } else if (usingYosemiteOrLater && (editableCombo || viewItem)) { QImage image = activePixmap.toImage(); for (int y = 0; y < height; ++y) { -- cgit v1.2.3 From 3ab6653d97a5dd01fd5f5cb4e52d5816274e4cbd Mon Sep 17 00:00:00 2001 From: Jan Arve Saether Date: Fri, 6 Feb 2015 14:47:16 +0100 Subject: Fixed crash when adding items with spans This only occurred if the item added was the only item in the last row/column, since then the the internal grid failed to expand (in this case it would always call expand(0, 0), which would not create the extra row/column). [ChangeLog][QtWidgets][QGridLayout] Fixed crash that sometimes happened when adding items with spans that spanned to the bottom/right edge. Task-number: QTBUG-38052 Change-Id: Iba95f6d9d9356b4d1c84c7b93f4af9b4ea0cf714 Reviewed-by: Paul Olav Tvete --- src/widgets/kernel/qgridlayout.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/widgets') diff --git a/src/widgets/kernel/qgridlayout.cpp b/src/widgets/kernel/qgridlayout.cpp index 10d338c40c..3de0eb7960 100644 --- a/src/widgets/kernel/qgridlayout.cpp +++ b/src/widgets/kernel/qgridlayout.cpp @@ -565,7 +565,7 @@ void QGridLayoutPrivate::add(QGridBox *box, int row1, int row2, int col1, int co add(box, row1, col1); return; } - expand(row2 + 1, col2 + 1); + expand(qMax(row1, row2) + 1, qMax(col1, col2) + 1); box->row = row1; box->col = col1; -- cgit v1.2.3 From 3f25eda0ed669e61cc5e77f8d75771049ffab0c0 Mon Sep 17 00:00:00 2001 From: Joerg Bornemann Date: Thu, 12 Feb 2015 17:07:46 +0100 Subject: QFileDialog: fix overwritten filter Consider the following code: QFileDialog dlg; dlg.setFilter(QDir::Hidden | ...); dlg.setOption(QFileDialog::DontUseNativeDialog) setFilter stores the filter value in QDialogPrivate::options. setOption will overwrite this value with the default value from a newly created QFileSystemModel. The intention was to set the filter in the model to the value in options. Change-Id: I561c5cf1ad4d9d729a56620d86ec549eb3105a07 Task-number: QTBUG-37085 Reviewed-by: Friedemann Kleint --- src/widgets/dialogs/qfiledialog.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/widgets') diff --git a/src/widgets/dialogs/qfiledialog.cpp b/src/widgets/dialogs/qfiledialog.cpp index 6065ad015e..9d5d8d2e24 100644 --- a/src/widgets/dialogs/qfiledialog.cpp +++ b/src/widgets/dialogs/qfiledialog.cpp @@ -2716,7 +2716,7 @@ void QFileDialogPrivate::createWidgets() return; Q_Q(QFileDialog); model = new QFileSystemModel(q); - options->setFilter(model->filter()); + model->setFilter(options->filter()); model->setObjectName(QLatin1String("qt_filesystem_model")); if (QPlatformFileDialogHelper *helper = platformFileDialogHelper()) model->setNameFilterDisables(helper->defaultNameFilterDisables()); -- cgit v1.2.3 From bcfacd4b6f35dfd00f0f04d562f345bbc98cec13 Mon Sep 17 00:00:00 2001 From: Andy Shaw Date: Fri, 24 Oct 2014 19:33:30 +0200 Subject: Make sure the QSplashScreen isn't closed instantly when calling finish() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Most of the time the widget passed in to finish() will not yet have a window handle so it would just call close() straight away. This way it ensures has a window handle. Task-number: QTBUG-35757 Change-Id: I2e212a2ea496cc4e4bba57a8c2d0d127afc43e48 Reviewed-by: Friedemann Kleint Reviewed-by: Thorbjørn Lund Martsum Reviewed-by: Alex Blasche --- src/widgets/widgets/qsplashscreen.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'src/widgets') diff --git a/src/widgets/widgets/qsplashscreen.cpp b/src/widgets/widgets/qsplashscreen.cpp index d6b94803d7..30d6baa899 100644 --- a/src/widgets/widgets/qsplashscreen.cpp +++ b/src/widgets/widgets/qsplashscreen.cpp @@ -262,8 +262,11 @@ inline static bool waitForWindowExposed(QWindow *window, int timeout = 1000) void QSplashScreen::finish(QWidget *mainWin) { - if (mainWin && mainWin->windowHandle()) + if (mainWin) { + if (!mainWin->windowHandle()) + mainWin->createWinId(); waitForWindowExposed(mainWin->windowHandle()); + } close(); } -- cgit v1.2.3 From 395f0181ee6d8a9decedea62a096c69a01a48a7c Mon Sep 17 00:00:00 2001 From: Jan Arve Saether Date: Mon, 16 Feb 2015 17:17:23 +0100 Subject: Fix crash in QAccessibleTextWidget::attributes() Task-number: QTBUG-44006 Change-Id: I79d7d84206a3e4abcd49c7c6e5e91b7c9c753dd6 Reviewed-by: Frederik Gladhorn --- src/widgets/accessible/qaccessiblewidgets.cpp | 28 +++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) (limited to 'src/widgets') diff --git a/src/widgets/accessible/qaccessiblewidgets.cpp b/src/widgets/accessible/qaccessiblewidgets.cpp index f459affd07..6e1e3df89a 100644 --- a/src/widgets/accessible/qaccessiblewidgets.cpp +++ b/src/widgets/accessible/qaccessiblewidgets.cpp @@ -727,19 +727,31 @@ QString QAccessibleTextWidget::attributes(int offset, int *startOffset, int *end int blockEnd = blockStart + block.length(); QTextBlock::iterator iter = block.begin(); - while (!iter.fragment().contains(offset)) + int lastFragmentIndex = blockStart; + while (!iter.atEnd()) { + QTextFragment f = iter.fragment(); + if (f.contains(offset)) + break; + lastFragmentIndex = f.position() + f.length(); ++iter; + } - QTextFragment fragment = iter.fragment(); - int pos = fragment.position(); - - // text block and fragment may overlap, use the smallest common range - *startOffset = qMax(pos, blockStart); + QTextCharFormat charFormat; + if (!iter.atEnd()) { + QTextFragment fragment = iter.fragment(); + charFormat = fragment.charFormat(); + int pos = fragment.position(); + // text block and fragment may overlap, use the smallest common range + *startOffset = qMax(pos, blockStart); + *endOffset = qMin(pos + fragment.length(), blockEnd); + } else { + charFormat = block.charFormat(); + *startOffset = lastFragmentIndex; + *endOffset = blockEnd; + } Q_ASSERT(*startOffset <= offset); - *endOffset = qMin(pos + fragment.length(), blockEnd); Q_ASSERT(*endOffset >= offset); - QTextCharFormat charFormat = fragment.charFormat(); QTextBlockFormat blockFormat = cursor.blockFormat(); QMap attrs; -- cgit v1.2.3 From 8fccfef424e7d2b7a2019b1f828234145d4011df Mon Sep 17 00:00:00 2001 From: Albert Astals Cid Date: Tue, 17 Feb 2015 09:53:27 +0100 Subject: Make sure there's a scene before using it MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes crash hovering links in quassel Task-number: QTBUG-44509 Change-Id: I77d8d9118ad185ed70a46e91445e2960200e562b Reviewed-by: Michael Brüning Reviewed-by: Frederik Gladhorn Reviewed-by: Marc Mutz --- src/widgets/kernel/qwidget.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/widgets') diff --git a/src/widgets/kernel/qwidget.cpp b/src/widgets/kernel/qwidget.cpp index 68715413d1..cb2e9e0bec 100644 --- a/src/widgets/kernel/qwidget.cpp +++ b/src/widgets/kernel/qwidget.cpp @@ -12272,7 +12272,7 @@ QPoint QWidget::mapToGlobal(const QPoint &pos) const { #ifndef QT_NO_GRAPHICSVIEW Q_D(const QWidget); - if (d->extra && d->extra->proxyWidget) { + if (d->extra && d->extra->proxyWidget && d->extra->proxyWidget->scene()) { const QList views = d->extra->proxyWidget->scene()->views(); if (!views.isEmpty()) { const QPointF scenePos = d->extra->proxyWidget->mapToScene(pos); @@ -12307,7 +12307,7 @@ QPoint QWidget::mapFromGlobal(const QPoint &pos) const { #ifndef QT_NO_GRAPHICSVIEW Q_D(const QWidget); - if (d->extra && d->extra->proxyWidget) { + if (d->extra && d->extra->proxyWidget && d->extra->proxyWidget->scene()) { const QList views = d->extra->proxyWidget->scene()->views(); if (!views.isEmpty()) { const QPoint viewPortPos = views.first()->viewport()->mapFromGlobal(pos); -- cgit v1.2.3 From c97445945501acf13ba6d4f314161bf9689a8a95 Mon Sep 17 00:00:00 2001 From: Marko Kangas Date: Mon, 16 Feb 2015 16:37:05 +0200 Subject: Fix fusion style QPushButton icon on HiDPI mode Change-Id: Ie05012266abe52bc33bb9c2e19c93353cac3307f Task-number: QTBUG-44502 Reviewed-by: Jens Bache-Wiig --- src/widgets/styles/qfusionstyle.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'src/widgets') diff --git a/src/widgets/styles/qfusionstyle.cpp b/src/widgets/styles/qfusionstyle.cpp index cf2f3ea26b..0cc1211cc0 100644 --- a/src/widgets/styles/qfusionstyle.cpp +++ b/src/widgets/styles/qfusionstyle.cpp @@ -1738,8 +1738,8 @@ void QFusionStyle::drawControl(ControlElement element, const QStyleOption *optio state = QIcon::On; QPixmap pixmap = button->icon.pixmap(button->iconSize, mode, state); - int w = pixmap.width(); - int h = pixmap.height(); + int w = pixmap.width() / pixmap.devicePixelRatio(); + int h = pixmap.height() / pixmap.devicePixelRatio(); if (!button->text.isEmpty()) w += button->fontMetrics.boundingRect(option->rect, tf, button->text).width() + 2; @@ -1747,15 +1747,17 @@ void QFusionStyle::drawControl(ControlElement element, const QStyleOption *optio point = QPoint(ir.x() + ir.width() / 2 - w / 2, ir.y() + ir.height() / 2 - h / 2); + w = pixmap.width() / pixmap.devicePixelRatio(); + if (button->direction == Qt::RightToLeft) - point.rx() += pixmap.width(); + point.rx() += w; painter->drawPixmap(visualPos(button->direction, button->rect, point), pixmap); if (button->direction == Qt::RightToLeft) ir.translate(-point.x() - 2, 0); else - ir.translate(point.x() + pixmap.width(), 0); + ir.translate(point.x() + w, 0); // left-align text if there is if (!button->text.isEmpty()) -- cgit v1.2.3 From fb4d8c21c4924023227a1c01e3315af79e2d5607 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Mon, 23 Feb 2015 10:30:33 +0100 Subject: QWidgetWindow check valid widget geometry before marking the backingstore as dirty. The QWidgetBackingstore has an assert that the region or the rect passed in is not empty, hence its programming error not to check before calling this function. Task-number: QTBUG-43489 Change-Id: Ic67fb6ca7959466e1758ce91827cd4b8acdf73fc Reviewed-by: Friedemann Kleint --- src/widgets/kernel/qwidgetwindow.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/widgets') diff --git a/src/widgets/kernel/qwidgetwindow.cpp b/src/widgets/kernel/qwidgetwindow.cpp index b31f9a51dd..87baaa13de 100644 --- a/src/widgets/kernel/qwidgetwindow.cpp +++ b/src/widgets/kernel/qwidgetwindow.cpp @@ -639,7 +639,7 @@ void QWidgetWindow::handleScreenChange() void QWidgetWindow::repaintWindow() { - if (!m_widget->isVisible() || !m_widget->updatesEnabled()) + if (!m_widget->isVisible() || !m_widget->updatesEnabled() || !m_widget->rect().isValid()) return; QTLWExtra *tlwExtra = m_widget->window()->d_func()->maybeTopData(); -- cgit v1.2.3