37 if (m_outputLayer == layer) {
43 m_outputLayer = layer;
44 for (
RenderLayer *sublayer : std::as_const(m_sublayers)) {
45 sublayer->setOutputLayer(layer);
56 if (m_superlayer == layer) {
60 m_superlayer->removeSublayer(
this);
64 m_superlayer->addSublayer(
this);
66 updateEffectiveVisibility();
76 m_sublayers.append(sublayer);
81void RenderLayer::removeSublayer(RenderLayer *sublayer)
83 m_sublayers.removeOne(sublayer);
84 sublayer->setOutputLayer(
nullptr);
95 return m_delegate.get();
101 m_delegate->setLayer(
this);
106 return QRect(0, 0, m_geometry.width(), m_geometry.height());
111 return m_boundingRect;
124 if (m_effectiveVisible && m_outputLayer) {
131 updateBoundingRect();
133 m_superlayer->updateBoundingRect();
139 m_repaintScheduled =
true;
145 if (m_repaintScheduled) {
148 if (!m_repaints.isEmpty()) {
151 return std::any_of(m_sublayers.constBegin(), m_sublayers.constEnd(), [](
RenderLayer *layer) {
152 return layer->needsRepaint();
156void RenderLayer::updateBoundingRect()
159 for (
const RenderLayer *sublayer : std::as_const(m_sublayers)) {
160 boundingRect |= sublayer->boundingRect().translated(sublayer->geometry().topLeft());
166 m_superlayer->updateBoundingRect();
188 if (!m_effectiveVisible) {
191 if (!region.isEmpty()) {
192 m_repaints += region;
204 m_repaints = QRegion();
205 m_repaintScheduled =
false;
210 return m_effectiveVisible;
215 if (m_explicitVisible != visible) {
216 m_explicitVisible = visible;
217 updateEffectiveVisibility();
221bool RenderLayer::computeEffectiveVisibility()
const
223 return m_explicitVisible && (!m_superlayer || m_superlayer->
isVisible());
226void RenderLayer::updateEffectiveVisibility()
228 const bool effectiveVisible = computeEffectiveVisibility();
229 if (m_effectiveVisible == effectiveVisible) {
233 m_effectiveVisible = effectiveVisible;
235 if (effectiveVisible) {
244 for (
RenderLayer *sublayer : std::as_const(m_sublayers)) {
245 sublayer->updateEffectiveVisibility();
256 QPointF result = point;
259 result += layer->
geometry().topLeft();
277 if (region.isEmpty()) {
280 return region.translated(
mapToGlobal(QPoint(0, 0)));
290 QPointF result = point;
293 result -= layer->
geometry().topLeft();
311 if (region.isEmpty()) {
319#include "moc_renderlayer.cpp"
void setOutputLayer(OutputLayer *layer)
void setVisible(bool visible)
RenderLoop * loop() const
OutputLayer * outputLayer() const
void setGeometry(const QRectF &rect)
RenderLayer(RenderLoop *loop, RenderLayer *superlayer=nullptr)
void addRepaint(const QRegion ®ion)
QList< RenderLayer * > sublayers() const
void setDelegate(std::unique_ptr< RenderLayerDelegate > delegate)
QPoint mapFromGlobal(const QPoint &point) const
QRectF boundingRect() const
void setSuperlayer(RenderLayer *layer)
QPoint mapToGlobal(const QPoint &point) const
void scheduleRepaint(Item *item)
RenderLayerDelegate * delegate() const
RenderLayer * superlayer() const
bool needsRepaint() const
void scheduleRepaint(Item *item=nullptr)