// Copyright (C) 2016 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 #include "qdesigner_widget_p.h" #include "formwindowbase_p.h" #include "grid_p.h" #include #include #include #include #include QT_BEGIN_NAMESPACE /* QDesignerDialog / QDesignerWidget are used to paint a grid on QDialog and QWidget main containers * and container extension pages. * The paint routines work as follows: * We need to clean the background here (to make the parent grid disappear in case we are a container page * and to make palette background settings take effect), * which would normally break style sheets with background settings. * So, we manually make the style paint after cleaning. On top comes the grid * In addition, this code works around * the QStyleSheetStyle setting Qt::WA_StyledBackground to false for subclasses of QWidget. */ QDesignerDialog::QDesignerDialog(QDesignerFormWindowInterface *fw, QWidget *parent) : QDialog(parent), m_formWindow(qobject_cast(fw)) { } void QDesignerDialog::paintEvent(QPaintEvent *e) { QPainter p(this); QStyleOption opt; opt.initFrom(this); p.fillRect(e->rect(), palette().brush(backgroundRole())); style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this); if (m_formWindow && m_formWindow->gridVisible()) m_formWindow->designerGrid().paint(p, this, e); } QDesignerWidget::QDesignerWidget(QDesignerFormWindowInterface* formWindow, QWidget *parent) : QWidget(parent), m_formWindow(qobject_cast(formWindow)) { } QDesignerWidget::~QDesignerWidget() = default; QDesignerFormWindowInterface* QDesignerWidget::formWindow() const { return m_formWindow; } void QDesignerWidget::paintEvent(QPaintEvent *e) { QPainter p(this); QStyleOption opt; opt.initFrom(this); p.fillRect(e->rect(), palette().brush(backgroundRole())); style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this); if (m_formWindow && m_formWindow->gridVisible()) m_formWindow->designerGrid().paint(p, this, e); } QT_END_NAMESPACE