Revision control

++ // Copyright (C) 2026 The Qt Company Ltd.
++ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
++ // Qt-Security score:significant reason:default
++
++ #include "qcustomseriescanvasrenderer.h"
++
++ QT_BEGIN_NAMESPACE
++
++ /*!
++ \class QCustomSeriesCanvasRenderer
++ \inmodule QtGraphs
++ \brief The QCustomSeriesCanvasRenderer class allows implementing
++ customized rendering for a QCustomSeries when the high-performance
++ canvas painter backend is in use.
++ \since 6.12
++
++ Implement canvasPaint() to draw a \l QCustomSeries. Set the renderer
++ on the series with \l QCustomSeries::setCustomSeriesPainter().
++
++ canvasPaint() and canvasPrePaint() are called from the \l {Scene Graph
++ and Rendering}{Qt Quick scene graph render thread} and, unlike
++ initializeResources() and synchronizeData(), do not receive the
++ \l QCustomSeries they belong to. Copy whatever canvasPaint() needs into
++ the renderer instance in synchronizeData(), which runs while the GUI
++ thread is blocked and is the only place it is safe to read GUI-thread
++ data.
++
++ \section1 How to implement a simple QCustomSeries and a QCustomSeriesCanvasRenderer
++ First, create a QCustomSeries subclass.
++ \snippet doc_src_qcustomseriescanvasrenderer.cpp customseries
++
++ Then implement a QCustomSeriesCanvasRenderer subclass
++ \snippet doc_src_qcustomseriescanvasrenderer.cpp customseries_renderer
++
++ \sa QCustomSeries, QCustomSeries::setCustomSeriesPainter()
++ */
++
++ /*!
++ \fn void QCustomSeriesCanvasRenderer::canvasPaint(QCanvasPainter *p)
++ Reimplement this method to paint the series using \a p.
++
++ \note Before painting, the series should be synchronized to the renderer
++ using \l synchronizeData().
++
++ \sa synchronizeData(), canvasPrePaint(), initializeResources()
++ */
++ QCustomSeriesCanvasRenderer::~QCustomSeriesCanvasRenderer() = default;
++
++ /*!
++ Reimplement this method to initialize resources for \a series using
++ \a p. This is called once \b before the first synchronizeData() call
++ for \a series.
++
++ \sa QCanvasPainter::addImage, QCanvasPainter::createCanvas
++ */
++ void QCustomSeriesCanvasRenderer::initializeResources(QCustomSeries *series, QCanvasPainter *p)
++ {
++ Q_UNUSED(series);
++ Q_UNUSED(p);
++ }
++
++ /*!
++ Reimplement this method to copy data needed for painting \a series out
++ of \a item and into this renderer instance. This is called before
++ canvasPaint() each time \a series needs to be repainted.
++
++ This method is the only place where it is safe to read GUI-owned state
++ of \a series or \a item directly, since it runs while the GUI thread is
++ blocked at the Qt Quick sync point. Do not access that state from
++ canvasPaint() or canvasPrePaint().
++ */
++ void QCustomSeriesCanvasRenderer::synchronizeData(QCustomSeries *series, QCanvasPainterItem *item)
++ {
++ Q_UNUSED(series);
++ Q_UNUSED(item);
++ }
++
++ /*!
++ Reimplement this method to prepare rendering using \a p, based on state
++ previously copied into this instance by synchronizeData(). This is
++ called immediately before canvasPaint() for this same instance, from the
++ render thread; do not access series or item state here.
++ */
++ void QCustomSeriesCanvasRenderer::canvasPrePaint(QCanvasPainter *p)
++ {
++ Q_UNUSED(p);
++ }
++
++ QT_END_NAMESPACE