diff options
Diffstat (limited to 'src/widgets/graphicsview/qgraphicswidget_p.cpp')
-rw-r--r-- | src/widgets/graphicsview/qgraphicswidget_p.cpp | 111 |
1 files changed, 30 insertions, 81 deletions
diff --git a/src/widgets/graphicsview/qgraphicswidget_p.cpp b/src/widgets/graphicsview/qgraphicswidget_p.cpp index 1514fca456..6c12dc7754 100644 --- a/src/widgets/graphicsview/qgraphicswidget_p.cpp +++ b/src/widgets/graphicsview/qgraphicswidget_p.cpp @@ -1,41 +1,5 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtWidgets module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +// Copyright (C) 2016 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only #include "qglobal.h" @@ -108,10 +72,6 @@ QGraphicsWidgetPrivate::QGraphicsWidgetPrivate() QGraphicsWidgetPrivate::~QGraphicsWidgetPrivate() { - // Remove any lazily allocated data - delete[] margins; - delete[] windowFrameMargins; - delete windowData; } /*! @@ -122,11 +82,8 @@ QGraphicsWidgetPrivate::~QGraphicsWidgetPrivate() */ void QGraphicsWidgetPrivate::ensureMargins() const { - if (!margins) { - margins = new qreal[4]; - for (int i = 0; i < 4; ++i) - margins[i] = 0; - } + if (!margins) + margins = std::make_unique<QMarginsF>(); } /*! @@ -137,11 +94,8 @@ void QGraphicsWidgetPrivate::ensureMargins() const */ void QGraphicsWidgetPrivate::ensureWindowFrameMargins() const { - if (!windowFrameMargins) { - windowFrameMargins = new qreal[4]; - for (int i = 0; i < 4; ++i) - windowFrameMargins[i] = 0; - } + if (!windowFrameMargins) + windowFrameMargins = std::make_unique<QMarginsF>(); } /*! @@ -153,12 +107,12 @@ void QGraphicsWidgetPrivate::ensureWindowFrameMargins() const void QGraphicsWidgetPrivate::ensureWindowData() { if (!windowData) - windowData = new WindowData; + windowData = std::make_unique<WindowData>(); } void QGraphicsWidgetPrivate::setPalette_helper(const QPalette &palette) { - if (this->palette == palette && this->palette.resolve() == palette.resolve()) + if (this->palette == palette && this->palette.resolveMask() == palette.resolveMask()) return; updatePalette(palette); } @@ -180,7 +134,7 @@ void QGraphicsWidgetPrivate::updatePalette(const QPalette &palette) // Calculate new mask. if (q->isWindow() && !q->testAttribute(Qt::WA_WindowPropagation)) inheritedPaletteResolveMask = 0; - int mask = palette.resolve() | inheritedPaletteResolveMask; + int mask = palette.resolveMask() | inheritedPaletteResolveMask; // Propagate to children. for (int i = 0; i < children.size(); ++i) { @@ -196,7 +150,7 @@ void QGraphicsWidgetPrivate::updatePalette(const QPalette &palette) // Notify change. QEvent event(QEvent::PaletteChange); - QApplication::sendEvent(q, &event); + QCoreApplication::sendEvent(q, &event); } void QGraphicsWidgetPrivate::setLayoutDirection_helper(Qt::LayoutDirection direction) @@ -218,7 +172,7 @@ void QGraphicsWidgetPrivate::setLayoutDirection_helper(Qt::LayoutDirection direc // Send the notification event to this widget item. QEvent e(QEvent::LayoutDirectionChange); - QApplication::sendEvent(q, &e); + QCoreApplication::sendEvent(q, &e); } void QGraphicsWidgetPrivate::resolveLayoutDirection() @@ -232,9 +186,9 @@ void QGraphicsWidgetPrivate::resolveLayoutDirection() } else if (scene) { // ### shouldn't the scene have a layoutdirection really? how does // ### QGraphicsWidget get changes from QApplication::layoutDirection? - setLayoutDirection_helper(QApplication::layoutDirection()); + setLayoutDirection_helper(QGuiApplication::layoutDirection()); } else { - setLayoutDirection_helper(QApplication::layoutDirection()); + setLayoutDirection_helper(QGuiApplication::layoutDirection()); } } @@ -247,13 +201,13 @@ QPalette QGraphicsWidgetPrivate::naturalWidgetPalette() const } else if (scene) { palette = scene->palette(); } - palette.resolve(0); + palette.setResolveMask(0); return palette; } void QGraphicsWidgetPrivate::setFont_helper(const QFont &font) { - if (this->font == font && this->font.resolve() == font.resolve()) + if (this->font == font && this->font.resolveMask() == font.resolveMask()) return; updateFont(font); } @@ -278,7 +232,7 @@ void QGraphicsWidgetPrivate::updateFont(const QFont &font) // Calculate new mask. if (q->isWindow() && !q->testAttribute(Qt::WA_WindowPropagation)) inheritedFontResolveMask = 0; - int mask = font.resolve() | inheritedFontResolveMask; + int mask = font.resolveMask() | inheritedFontResolveMask; // Propagate to children. for (int i = 0; i < children.size(); ++i) { @@ -296,7 +250,7 @@ void QGraphicsWidgetPrivate::updateFont(const QFont &font) return; // Notify change. QEvent event(QEvent::FontChange); - QApplication::sendEvent(q, &event); + QCoreApplication::sendEvent(q, &event); } QFont QGraphicsWidgetPrivate::naturalWidgetFont() const @@ -308,7 +262,7 @@ QFont QGraphicsWidgetPrivate::naturalWidgetFont() const } else if (scene) { naturalFont = scene->font(); } - naturalFont.resolve(0); + naturalFont.setResolveMask(0); return naturalFont; } @@ -330,7 +284,7 @@ void QGraphicsWidgetPrivate::initStyleOptionTitleBar(QStyleOptionTitleBar *optio option->titleBarState = Qt::WindowNoState; } QFont windowTitleFont = QApplication::font("QMdiSubWindowTitleBar"); - QRect textRect = q->style()->subControlRect(QStyle::CC_TitleBar, option, QStyle::SC_TitleBarLabel, 0); + QRect textRect = q->style()->subControlRect(QStyle::CC_TitleBar, option, QStyle::SC_TitleBarLabel, nullptr); option->text = QFontMetrics(windowTitleFont).elidedText( windowData->windowTitle, Qt::ElideRight, textRect.width()); } @@ -372,8 +326,8 @@ void QGraphicsWidgetPrivate::windowFrameMouseReleaseEvent(QGraphicsSceneMouseEve bar.rect.setHeight(q->style()->pixelMetric(QStyle::PM_TitleBarHeight, &bar)); QPointF pos = event->pos(); if (windowFrameMargins) { - pos.rx() += windowFrameMargins[Left]; - pos.ry() += windowFrameMargins[Top]; + pos.rx() += windowFrameMargins->left(); + pos.ry() += windowFrameMargins->top(); } bar.subControls = QStyle::SC_TitleBarCloseButton; if (q->style()->subControlRect(QStyle::CC_TitleBar, &bar, @@ -669,8 +623,8 @@ void QGraphicsWidgetPrivate::windowFrameHoverMoveEvent(QGraphicsSceneHoverEvent QStyleOptionTitleBar bar; // make sure that the coordinates (rect and pos) we send to the style are positive. if (windowFrameMargins) { - pos.rx() += windowFrameMargins[Left]; - pos.ry() += windowFrameMargins[Top]; + pos.rx() += windowFrameMargins->left(); + pos.ry() += windowFrameMargins->top(); } initStyleOptionTitleBar(&bar); bar.rect = q->windowFrameRect().toRect(); @@ -698,14 +652,7 @@ void QGraphicsWidgetPrivate::windowFrameHoverMoveEvent(QGraphicsSceneHoverEvent break; case Qt::TitleBarArea: windowData->buttonRect = q->style()->subControlRect( - QStyle::CC_TitleBar, &bar, QStyle::SC_TitleBarCloseButton, 0); -#if 0 // Used to be included in Qt4 for Q_WS_MAC - // On mac we should hover if we are in the 'area' of the buttons - windowData->buttonRect |= q->style()->subControlRect( - QStyle::CC_TitleBar, &bar, QStyle::SC_TitleBarMinButton, 0); - windowData->buttonRect |= q->style()->subControlRect( - QStyle::CC_TitleBar, &bar, QStyle::SC_TitleBarMaxButton, 0); -#endif + QStyle::CC_TitleBar, &bar, QStyle::SC_TitleBarCloseButton, nullptr); if (windowData->buttonRect.contains(pos.toPoint())) windowData->buttonMouseOver = true; event->ignore(); @@ -722,7 +669,7 @@ void QGraphicsWidgetPrivate::windowFrameHoverMoveEvent(QGraphicsSceneHoverEvent Q_UNUSED(cursorShape); #endif // update buttons if we hover over them - windowData->hoveredSubControl = q->style()->hitTestComplexControl(QStyle::CC_TitleBar, &bar, pos.toPoint(), 0); + windowData->hoveredSubControl = q->style()->hitTestComplexControl(QStyle::CC_TitleBar, &bar, pos.toPoint(), nullptr); if (windowData->hoveredSubControl != QStyle::SC_TitleBarCloseButton) windowData->hoveredSubControl = QStyle::SC_TitleBarLabel; @@ -796,12 +743,13 @@ void QGraphicsWidgetPrivate::fixFocusChainBeforeReparenting(QGraphicsWidget *new if (!parent && oldScene && oldScene != newScene && oldScene->d_func()->tabFocusFirst == q) { // detach from old scene's top level focus chain. - oldScene->d_func()->tabFocusFirst = (focusAfter != q) ? focusAfter : 0; + oldScene->d_func()->tabFocusFirst = (focusAfter != q) ? focusAfter : nullptr; } // detach from current focus chain; skip this widget subtree. focusBefore->d_func()->focusNext = focusAfter; - focusAfter->d_func()->focusPrev = focusBefore; + if (focusAfter) + focusAfter->d_func()->focusPrev = focusBefore; if (newParent) { // attach to new parent's focus chain as the last element @@ -817,7 +765,8 @@ void QGraphicsWidgetPrivate::fixFocusChainBeforeReparenting(QGraphicsWidget *new newFocusLast->d_func()->focusNext = q; focusLast->d_func()->focusNext = newFocusAfter; - newFocusAfter->d_func()->focusPrev = focusLast; + if (newFocusAfter) + newFocusAfter->d_func()->focusPrev = focusLast; focusPrev = newFocusLast; } else { // no new parent, so just link up our own prev->last widgets. |