#include <array>#include <chrono>#include <cstdint>#include <functional>#include <limits>#include <memory>#include <optional>#include <utility>#include <vector>#include "donner/base/Box.h"#include "donner/base/Path.h"#include "donner/editor/AsyncRenderer.h"#include "donner/editor/AsyncSVGDocument.h"#include "donner/editor/CompositedPresentation.h"#include "donner/editor/DocumentPixelSampler.h"#include "donner/editor/FrameCostBreakdown.h"#include "donner/editor/FramePresentation.h"#include "donner/editor/GlTextureCache.h"#include "donner/editor/OverlayRenderer.h"#include "donner/editor/PresentationRenderScheduler.h"#include "donner/editor/SelectionAabb.h"#include "donner/editor/ViewportInteractionController.h"Classes | |
| struct | donner::editor::DocumentPixelCaptureIdentity |
| Identity shared by a worker pixel request and its accepted presentation. More... | |
| struct | donner::editor::DocumentPixelCapture |
| One immutable document-only pixel capture retained while the picker is armed. More... | |
| struct | donner::editor::PresentationRepairIdentity |
| Stable repair inputs, excluding allocation counters that cannot make a retry productive. More... | |
| struct | donner::editor::RenderAttemptIdentity |
| What a posted render request asked the worker for, as far as deciding whether a later request would repeat it. More... | |
| class | donner::editor::NothingToPresentRetry |
| Paces re-posting a render request whose worker result had nothing to present. More... | |
| class | donner::editor::RenderCoordinator |
| Owns the advanced editor's renderer-side orchestration: async rendering, overlay rasterization, composited drag presentation, and selection-bounds cache promotion. More... | |
Namespaces | |
| namespace | donner |
| Top-level Donner namespace, which is split into different sub-namespaces such as donner::svg and donner::css. | |
Typedefs | |
| using | donner::editor::FramePresentationAdmission = std::function<bool(const FramePresentation&)> |
| Prepare renderer-owned resources before publishing a sealed frame; false retains the old frame. | |
Functions | |
| bool | donner::editor::ShouldPresentCompositedPreviewForViewport (const RenderResult::CompositedPreview &preview, const Vector2i &viewportDesiredCanvas) |
| Return true when a composited preview may be presented against the current viewport. | |
| bool | donner::editor::PresentationRepairNeedsCoverage (FramePresentationFailure buildFailure, FramePresentationFailure adoptionFailure) |
| Return true when a frame repair must render more document coverage. | |
| std::uint64_t | donner::editor::PostReleaseSettleTargetVersion (std::uint64_t currentFrameVersion, bool hasPendingMutations) |
| Return the document version a released drag must settle against. | |
| bool | donner::editor::ShouldDeferSelectedViewportRefresh (Entity selectedEntity, bool hasActiveDrag, std::uint64_t currentVersion, std::uint64_t displayedDocVersion, bool hasCachedPresentation, bool rasterViewportSettled, bool needsOverviewInfill, bool pendingSelectedLayerRasterization) |
| Return true when selected-layer prewarm can wait for the viewport to settle. | |
| bool | donner::editor::ShouldUseSelectedPrewarmRasterViewport (Entity selectedEntity, bool requestOverviewInfill, bool rasterViewportBounded, bool selectionOnlyPrewarmMayTriggerRender, bool hasIndependentRenderReason, bool hasCompleteVisibleCachedCoverage, Vector2i visibleOutputSizePx, Vector2i prewarmOutputSizePx) |
| Return true when selected-layer overdraw should replace the base raster viewport. | |
| bool | donner::editor::ShouldClearPendingSelectedLayerRasterization (const std::optional< RenderRequest::DragPreview > &representedDragPreview, Entity pendingEntity, std::uint64_t resultVersion, std::uint64_t pendingVersion) |
| Return true when a render result satisfies a pending selected-layer rasterization. | |
| bool | donner::editor::CompositedPreviewClearsPendingSelectedLayerRasterization (const RenderResult::CompositedPreview &preview, Entity pendingEntity, std::uint64_t resultVersion, std::uint64_t pendingVersion) |
| A complete forced render clears stale selected pixels whether they landed in a movable layer or in the selection's owning compositor tiles. | |
| std::optional< SelectTool::ActiveDragPreview > | donner::editor::OverlayRepresentedDragPreviewForPresentation (const std::optional< SelectTool::ActiveDragPreview > &activeDragPreview, const std::optional< SelectTool::ActiveDragPreview > &displayedDragPreview, bool hasPresentableActiveDragTarget) |
| Return the drag transform that overlay chrome should represent in the current presentation frame. | |
| Transform2d | donner::editor::OverlayDocumentFromSourceDragPreview (const std::optional< SelectTool::ActiveDragPreview > &sourceDragPreview, const std::optional< SelectTool::ActiveDragPreview > &targetDragPreview) |
| Return the document transform that projects geometry from one drag frame onto another. | |
| std::optional< SelectTool::ActiveGesturePreview > | donner::editor::OverlayGesturePreviewForPresentation (const std::optional< SelectTool::ActiveGesturePreview > &activeGesturePreview, const std::optional< SelectTool::ActiveDragPreview > &liveDragPreview, const std::optional< SelectTool::ActiveDragPreview > &representedDragPreview) |
| Project live gesture chrome, including the selection size/angle chip, to the overlay state. | |
|
nodiscard |
Return the document transform that projects geometry from one drag frame onto another.
| sourceDragPreview | Drag transform represented by the source geometry. |
| targetDragPreview | Drag transform the presented content represents. |
|
nodiscard |
Project live gesture chrome, including the selection size/angle chip, to the overlay state.
| activeGesturePreview | Live gesture preview from the select tool. |
| liveDragPreview | Live drag transform currently applied to the DOM. |
| representedDragPreview | Drag transform the overlay/content presentation represents. |
|
nodiscard |
Return the drag transform that overlay chrome should represent in the current presentation frame.
| activeDragPreview | Active drag transform used by the presenter when a drag target tile is available. |
| displayedDragPreview | Drag transform represented by the currently cached content. |
| hasPresentableActiveDragTarget | True when the presenter can draw a matching drag target tile this frame. |
|
nodiscard |
Return the document version a released drag must settle against.
| currentFrameVersion | Last flushed document frame version at mouse-up. |
| hasPendingMutations | True when the release left DOM mutations queued for the next flush. |
|
nodiscard |
Return true when a frame repair must render more document coverage.
A frame can lack more than one proof at once. A result rejected for a missing overview still needs that coverage when the frame build reports another failure first, such as selection geometry that is not yet captured; otherwise an active drag never requests the overview.
| buildFailure | Missing proof reported by the frame build, or None. |
| adoptionFailure | Missing proof that rejected the latest worker result, or None. |
|
nodiscard |
Return true when a render result satisfies a pending selected-layer rasterization.
| representedDragPreview | Drag-preview metadata carried by the completed render result. |
| pendingEntity | Selected entity whose stale layer pixels must be refreshed. |
| resultVersion | Document frame version represented by the completed render result. |
| pendingVersion | Document frame version at which the pending refresh was requested. |
|
nodiscard |
Return true when selected-layer prewarm can wait for the viewport to settle.
| selectedEntity | Selected compositable entity, or entt::null. |
| hasActiveDrag | True while a drag preview is active. |
| currentVersion | Current document frame version. |
| displayedDocVersion | Document frame version currently presented. |
| hasCachedPresentation | True when any current presentation texture is already cached. The selected layer may still be warming; the existing full presentation is sufficient to keep zoom responsive while that stale prewarm is cancelled. |
| rasterViewportSettled | True when the viewport has passed the commit delay. |
| needsOverviewInfill | True when a bounded viewport still needs overview coverage. |
| pendingSelectedLayerRasterization | True when selected-layer pixels are known stale. |
|
nodiscard |
Return true when a composited preview may be presented against the current viewport.
Full-canvas previews may stretch across transient canvas-size changes. Split composited previews carry per-tile raster bounds, so presenting them against a different canvas epoch can flash stale high-resolution tiles in the wrong place during zoom/drag races.
| preview | Worker-produced composited preview. |
| viewportDesiredCanvas | Canvas size implied by the current UI-frame viewport. |
|
nodiscard |
Return true when selected-layer overdraw should replace the base raster viewport.
Direct worker surfaces disable selection-only prewarming because the UI thread cannot consume a promoted texture. They still use overdraw when a drag or another real invalidation needs a worker render.
| selectedEntity | Selected compositable entity, or entt::null. |
| requestOverviewInfill | True when the request is reserved for full-document overview fill. |
| rasterViewportBounded | True when the base raster only covers the visible viewport. |
| selectionOnlyPrewarmMayTriggerRender | Backend policy for idle selection cache misses. |
| hasIndependentRenderReason | True when drag, document invalidation, forced rasterization, or retry already requires a worker request. |
| hasCompleteVisibleCachedCoverage | True when the currently presented tiles already cover the visible raster at its requested pixel scale. Enlarging the raster in this state would invalidate every cached static segment before the first pointer move. |
| visibleOutputSizePx | Size of the visible raster. |
| prewarmOutputSizePx | Size of the proposed enlarged selection raster. |