diff options
Diffstat (limited to 'examples/widgets/painting/shared')
-rw-r--r-- | examples/widgets/painting/shared/CMakeLists.txt | 19 | ||||
-rw-r--r-- | examples/widgets/painting/shared/arthurwidgets.cpp | 80 | ||||
-rw-r--r-- | examples/widgets/painting/shared/arthurwidgets.h | 17 | ||||
-rw-r--r-- | examples/widgets/painting/shared/fbopaintdevice.cpp | 66 | ||||
-rw-r--r-- | examples/widgets/painting/shared/fbopaintdevice.h | 44 | ||||
-rw-r--r-- | examples/widgets/painting/shared/hoverpoints.cpp | 27 | ||||
-rw-r--r-- | examples/widgets/painting/shared/shared.pri | 6 | ||||
-rw-r--r-- | examples/widgets/painting/shared/use_lib.cmake | 7 |
8 files changed, 20 insertions, 246 deletions
diff --git a/examples/widgets/painting/shared/CMakeLists.txt b/examples/widgets/painting/shared/CMakeLists.txt index a81b1413c7..5eaa3b42e1 100644 --- a/examples/widgets/painting/shared/CMakeLists.txt +++ b/examples/widgets/painting/shared/CMakeLists.txt @@ -1,3 +1,6 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause + add_library(painting_shared OBJECT) add_library(painting_shared::painting_shared ALIAS painting_shared) qt6_wrap_cpp(moc_files arthurwidgets.h hoverpoints.h) # no automoc for OBJECT libs:-/ @@ -8,17 +11,7 @@ target_sources(painting_shared PRIVATE ${moc_files} ) -target_link_libraries(painting_shared PUBLIC Qt::Widgets) -target_include_directories(painting_shared PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}") - -## Scopes: -##################################################################### +set_target_properties(painting_shared PROPERTIES UNITY_BUILD OFF) -if (TARGET Qt::OpenGL OR QT_FEATURE_opengles2) - target_compile_definitions(painting_shared PRIVATE QT_OPENGL_SUPPORT) - target_link_libraries(painting_shared PUBLIC - Qt::OpenGL - ) - qt6_wrap_cpp(moc_files_gl fbopaintdevice.h) # no automoc for OBJECT libs - target_sources(painting_shared PRIVATE fbopaintdevice.cpp fbopaintdevice.h ${moc_files_gl}) -endif() +target_link_libraries(painting_shared PUBLIC Qt6::Widgets) +target_include_directories(painting_shared PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}") diff --git a/examples/widgets/painting/shared/arthurwidgets.cpp b/examples/widgets/painting/shared/arthurwidgets.cpp index 7f3e50f5e6..4ff435783b 100644 --- a/examples/widgets/painting/shared/arthurwidgets.cpp +++ b/examples/widgets/painting/shared/arthurwidgets.cpp @@ -14,11 +14,6 @@ #include <QBoxLayout> #include <QRegularExpression> #include <QOffscreenSurface> -#include <QOpenGLContext> -#if QT_CONFIG(opengl) -#include <QtOpenGL/QOpenGLPaintDevice> -#include <QtOpenGL/QOpenGLWindow> -#endif extern QPixmap cached(const QString &img); @@ -34,61 +29,13 @@ ArthurFrame::ArthurFrame(QWidget *parent) pt.end(); } - -#if QT_CONFIG(opengl) -void ArthurFrame::enableOpenGL(bool use_opengl) -{ - if (m_use_opengl == use_opengl) - return; - - m_use_opengl = use_opengl; - - if (!m_glWindow && use_opengl) { - createGlWindow(); - QApplication::postEvent(this, new QResizeEvent(size(), size())); - } - - if (use_opengl) { - m_glWidget->show(); - } else { - if (m_glWidget) - m_glWidget->hide(); - } - - update(); -} - -void ArthurFrame::createGlWindow() -{ - Q_ASSERT(m_use_opengl); - - m_glWindow = new QOpenGLWindow(); - QSurfaceFormat f = QSurfaceFormat::defaultFormat(); - f.setSamples(4); - f.setAlphaBufferSize(8); - f.setStencilBufferSize(8); - m_glWindow->setFormat(f); - m_glWindow->setFlags(Qt::WindowTransparentForInput); - m_glWindow->resize(width(), height()); - m_glWidget = QWidget::createWindowContainer(m_glWindow, this); - // create() must be called after createWindowContainer() otherwise - // an incorrect offsetting of the position will occur. - m_glWindow->create(); -} -#endif - - void ArthurFrame::paintEvent(QPaintEvent *e) { static QImage *static_image = nullptr; QPainter painter; - if (preferImage() -#if QT_CONFIG(opengl) - && !m_use_opengl -#endif - ) { + if (preferImage()) { if (!static_image || static_image->size() != size()) { delete static_image; static_image = new QImage(size(), QImage::Format_RGB32); @@ -103,18 +50,7 @@ void ArthurFrame::paintEvent(QPaintEvent *e) painter.fillRect(0, height() - o, o, o, bg); painter.fillRect(width() - o, height() - o, o, o, bg); } else { -#if QT_CONFIG(opengl) - if (m_use_opengl && m_glWindow->isValid()) { - m_glWindow->makeCurrent(); - - painter.begin(m_glWindow); - painter.fillRect(QRectF(0, 0, m_glWindow->width(), m_glWindow->height()), palette().color(backgroundRole())); - } else { - painter.begin(this); - } -#else painter.begin(this); -#endif } painter.setClipRect(e->rect()); @@ -158,27 +94,15 @@ void ArthurFrame::paintEvent(QPaintEvent *e) painter.setBrush(Qt::NoBrush); painter.drawPath(clipPath); - if (preferImage() -#if QT_CONFIG(opengl) - && !m_use_opengl -#endif - ) { + if (preferImage()) { painter.end(); painter.begin(this); painter.drawImage(e->rect(), *static_image, e->rect()); } -#if QT_CONFIG(opengl) - if (m_use_opengl) - m_glWindow->update(); -#endif } void ArthurFrame::resizeEvent(QResizeEvent *e) { -#if QT_CONFIG(opengl) - if (m_glWidget) - m_glWidget->setGeometry(0, 0, e->size().width(), e->size().height()); -#endif QWidget::resizeEvent(e); } diff --git a/examples/widgets/painting/shared/arthurwidgets.h b/examples/widgets/painting/shared/arthurwidgets.h index bf50b24346..e508e811cb 100644 --- a/examples/widgets/painting/shared/arthurwidgets.h +++ b/examples/widgets/painting/shared/arthurwidgets.h @@ -9,7 +9,6 @@ #include <QPushButton> #include <QGroupBox> -QT_FORWARD_DECLARE_CLASS(QOpenGLWindow) QT_FORWARD_DECLARE_CLASS(QTextDocument) QT_FORWARD_DECLARE_CLASS(QTextEdit) QT_FORWARD_DECLARE_CLASS(QVBoxLayout) @@ -30,20 +29,12 @@ public: void loadSourceFile(const QString &fileName); bool preferImage() const { return m_preferImage; } -#if QT_CONFIG(opengl) - QOpenGLWindow *glWindow() const { return m_glWindow; } -#endif public slots: void setPreferImage(bool pi) { m_preferImage = pi; } void setDescriptionEnabled(bool enabled); void showSource(); -#if QT_CONFIG(opengl) - void enableOpenGL(bool use_opengl); - bool usesOpenGL() { return m_use_opengl; } -#endif - signals: void descriptionEnabledChanged(bool); @@ -51,17 +42,11 @@ protected: void paintEvent(QPaintEvent *) override; void resizeEvent(QResizeEvent *) override; -#if QT_CONFIG(opengl) - virtual void createGlWindow(); - QOpenGLWindow *m_glWindow = nullptr; - QWidget *m_glWidget = nullptr; - bool m_use_opengl = false; -#endif QPixmap m_tile; bool m_showDoc = false; bool m_preferImage = false; - QTextDocument *m_document = nullptr;; + QTextDocument *m_document = nullptr; QString m_sourceFileName; }; diff --git a/examples/widgets/painting/shared/fbopaintdevice.cpp b/examples/widgets/painting/shared/fbopaintdevice.cpp deleted file mode 100644 index 305f4f2c2c..0000000000 --- a/examples/widgets/painting/shared/fbopaintdevice.cpp +++ /dev/null @@ -1,66 +0,0 @@ -// Copyright (C) 2018 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause - -#include "fbopaintdevice.h" - -#include <QOffscreenSurface> -#include <QOpenGLFunctions> - -QFboPaintDevice::QFboPaintDevice(const QSize &size, bool flipped, bool clearOnInit, - QOpenGLFramebufferObject::Attachment attachment) - : QOpenGLPaintDevice(size) -{ - QOpenGLFramebufferObjectFormat format; - format.setAttachment(attachment); - format.setSamples(4); - m_framebufferObject = new QOpenGLFramebufferObject(size, format); - QOffscreenSurface *surface = new QOffscreenSurface(); - surface->create(); - m_surface = surface; - setPaintFlipped(flipped); - if (clearOnInit) { - m_framebufferObject->bind(); - - context()->functions()->glClearColor(0, 0, 0, 0); - context()->functions()->glClear(GL_COLOR_BUFFER_BIT); - } -} - -QFboPaintDevice::~QFboPaintDevice() -{ - delete m_framebufferObject; - delete m_surface; -} - -void QFboPaintDevice::ensureActiveTarget() -{ - if (QOpenGLContext::currentContext() != context()) - context()->makeCurrent(m_surface); - - m_framebufferObject->bind(); -} - -GLuint QFboPaintDevice::takeTexture() -{ - // We have multisamples so we can't just forward takeTexture(). - QOpenGLFramebufferObject resolvedFbo(m_framebufferObject->size(), m_framebufferObject->attachment()); - QOpenGLFramebufferObject::blitFramebuffer(&resolvedFbo, m_framebufferObject); - return resolvedFbo.takeTexture(); -} - -QImage QFboPaintDevice::toImage() const -{ - QOpenGLContext *currentContext = QOpenGLContext::currentContext(); - QSurface *currentSurface = currentContext ? currentContext->surface() : nullptr; - - context()->makeCurrent(m_surface); - - QImage image = m_framebufferObject->toImage(!paintFlipped()); - - if (currentContext) - currentContext->makeCurrent(currentSurface); - else - context()->doneCurrent(); - - return image; -} diff --git a/examples/widgets/painting/shared/fbopaintdevice.h b/examples/widgets/painting/shared/fbopaintdevice.h deleted file mode 100644 index a46166217b..0000000000 --- a/examples/widgets/painting/shared/fbopaintdevice.h +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright (C) 2018 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause - -#ifndef QFBOPAINTDEVICE_H -#define QFBOPAINTDEVICE_H - -#ifndef QT_NO_OPENGL - -#include <QImage> -#include <QOpenGLFramebufferObject> -#include <QOpenGLPaintDevice> -#include <QSurface> - -class QFboPaintDevice : public QOpenGLPaintDevice { -public: - QFboPaintDevice(const QSize &size, bool flipped = false, bool clearOnInit = true, - QOpenGLFramebufferObject::Attachment = QOpenGLFramebufferObject::CombinedDepthStencil); - ~QFboPaintDevice(); - - // QOpenGLPaintDevice: - void ensureActiveTarget() override; - - bool isValid() const { return m_framebufferObject->isValid(); } - GLuint handle() const { return m_framebufferObject->handle(); } - GLuint takeTexture(); - QImage toImage() const; - - bool bind() { return m_framebufferObject->bind(); } - bool release() { return m_framebufferObject->release(); } - QSize size() const { return m_framebufferObject->size(); } - - QOpenGLFramebufferObject* framebufferObject() { return m_framebufferObject; } - const QOpenGLFramebufferObject* framebufferObject() const { return m_framebufferObject; } - - static bool isSupported() { return QOpenGLFramebufferObject::hasOpenGLFramebufferObjects(); } - -private: - QOpenGLFramebufferObject *m_framebufferObject; - QSurface *m_surface; -}; - -#endif // QT_NO_OPENGL - -#endif // QFBOPAINTDEVICE_H diff --git a/examples/widgets/painting/shared/hoverpoints.cpp b/examples/widgets/painting/shared/hoverpoints.cpp index 7d2bb81538..a917139613 100644 --- a/examples/widgets/painting/shared/hoverpoints.cpp +++ b/examples/widgets/painting/shared/hoverpoints.cpp @@ -6,10 +6,6 @@ #include <algorithm> -#if QT_CONFIG(opengl) -#include <QtOpenGL/QOpenGLWindow> -#endif - HoverPoints::HoverPoints(QWidget *widget, PointShape shape) : QObject(widget), m_widget(widget), @@ -131,6 +127,7 @@ bool HoverPoints::eventFilter(QObject *object, QEvent *event) const int id = point.id(); switch (point.state()) { case QEventPoint::Pressed: + case QEventPoint::Stationary: { // find the point, move it const auto mappedPoints = m_fingerPointMapping.values(); @@ -155,7 +152,7 @@ bool HoverPoints::eventFilter(QObject *object, QEvent *event) } } if (activePoint != -1) { - m_fingerPointMapping.insert(point.id(), activePoint); + m_fingerPointMapping.insert(id, activePoint); movePoint(activePoint, point.position()); } } @@ -163,9 +160,11 @@ bool HoverPoints::eventFilter(QObject *object, QEvent *event) case QEventPoint::Released: { // move the point and release - const auto it = m_fingerPointMapping.find(id); - movePoint(it.value(), point.position()); - m_fingerPointMapping.erase(it); + const auto it = m_fingerPointMapping.constFind(id); + if (it != m_fingerPointMapping.constEnd()) { + movePoint(it.value(), point.position()); + m_fingerPointMapping.erase(it); + } } break; case QEventPoint::Updated: @@ -230,17 +229,7 @@ bool HoverPoints::eventFilter(QObject *object, QEvent *event) void HoverPoints::paintPoints() { QPainter p; -#if QT_CONFIG(opengl) - ArthurFrame *af = qobject_cast<ArthurFrame *>(m_widget); - if (af && af->usesOpenGL() && af->glWindow()->isValid()) { - af->glWindow()->makeCurrent(); - p.begin(af->glWindow()); - } else { - p.begin(m_widget); - } -#else p.begin(m_widget); -#endif p.setRenderHint(QPainter::Antialiasing); @@ -268,7 +257,7 @@ void HoverPoints::paintPoints() p.setPen(m_pointPen); p.setBrush(m_pointBrush); - for (const auto &point : qAsConst(m_points)) { + for (const auto &point : std::as_const(m_points)) { QRectF bounds = pointBoundingRect(point); if (m_shape == CircleShape) p.drawEllipse(bounds); diff --git a/examples/widgets/painting/shared/shared.pri b/examples/widgets/painting/shared/shared.pri index 7e2b4df8cb..77881b03cc 100644 --- a/examples/widgets/painting/shared/shared.pri +++ b/examples/widgets/painting/shared/shared.pri @@ -1,11 +1,5 @@ INCLUDEPATH += $$PWD -qtConfig(opengl) { - QT += opengl - SOURCES += $$PWD/fbopaintdevice.cpp - HEADERS += $$PWD/fbopaintdevice.h -} - SOURCES += \ $$PWD/arthurstyle.cpp\ $$PWD/arthurwidgets.cpp \ diff --git a/examples/widgets/painting/shared/use_lib.cmake b/examples/widgets/painting/shared/use_lib.cmake index 11e9c2cf71..84684a3444 100644 --- a/examples/widgets/painting/shared/use_lib.cmake +++ b/examples/widgets/painting/shared/use_lib.cmake @@ -1,3 +1,6 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause + # Include this file in your example project to use the library defined in this directory. # This avoids find_package calls in a directory scope different from the directory scope of the # consuming target. @@ -6,8 +9,4 @@ if(NOT TARGET Qt::Widgets) find_package(Qt6 REQUIRED COMPONENTS Widgets) endif() -if(NOT TARGET Qt::OpenGL) - find_package(Qt6 OPTIONAL_COMPONENTS OpenGL) -endif() - add_subdirectory("${CMAKE_CURRENT_LIST_DIR}" painting_shared) |