载入中...
搜索中...
未找到
EditorUiOffscreen.cpp
浏览该文件的文档.
2
4
5namespace eve::editor {
6
8 int height) const {
9 if (!previews_ || !rectangles_)
10 return eve::editing::failed<OffscreenPreviewArtifact>(
11 EditorStatus::Rejected, RuleId("editor.ui.offscreen-renderer"),
12 "UI offscreen preview requires Canvas and 2D graphics services");
13 if ((assets_ == nullptr) != (skins_ == nullptr))
14 return eve::editing::failed<OffscreenPreviewArtifact>(
15 EditorStatus::Rejected, RuleId("editor.ui.offscreen-skin-services"),
16 "UI skin preview requires both an asset resolver and plan renderer");
18 const UiPreviewSnapshot snapshot = layout.build(document, width, height);
19 if (snapshot.status != EditorStatus::Applied)
21 Status(snapshot.status, snapshot.diagnostics));
22 UiSkinDrawPlan skinPlan;
23 if (assets_ && skins_) {
24 skinPlan = UiSkinPreviewPlanner().build(document, snapshot, *assets_);
25 if (skinPlan.status != EditorStatus::Applied)
27 Status(skinPlan.status, skinPlan.diagnostics));
28 }
30 request.previewId = StableId(document.targetId().value() + ":ui-preview");
31 request.sourceRevision = document.revision();
32 request.width = width;
33 request.height = height;
34 return previews_->render(request, [&](graphics::Graphics*, graphics::Canvas*) {
35 for (const auto& rectangle : snapshot.widgets) {
36 if (!rectangle.visible) continue;
37 auto widget = document.widget(rectangle.id);
38 if (!widget.ok())
39 return eve::editing::failed<void>(EditorStatus::Conflict, RuleId("editor.ui.offscreen-widget-stale"),
40 "UI widget changed during offscreen rendering");
41 const UiStyleValue& style = widget.value().style;
42 rectangles_->drawSolidRectRGBA(static_cast<float>(rectangle.x), static_cast<float>(rectangle.y),
43 static_cast<float>(rectangle.width), static_cast<float>(rectangle.height),
44 static_cast<float>(style.tintR), static_cast<float>(style.tintG),
45 static_cast<float>(style.tintB), static_cast<float>(style.tintA));
46 }
47 if (skins_) {
48 auto rendered = skins_->render(skinPlan);
49 if (!rendered.ok()) return rendered;
50 }
51 return eve::editing::applied<void>();
52 });
53}
54
55} // namespace eve::editor
std::string widget
std::string layout
const GltfImportRequest & request
std::uint32_t height
std::uint32_t width
Move-only operation result carrying either a value or Status.
Definition Result.h:155
static Result failure(Status status)
Construct a failed result from a structured status.
Definition Result.h:175
Structured status and zero or more diagnostics for an operation.
Definition Status.h:68
std::uint64_t revision() const override
Return the current revision.
virtual Result< void > render(const UiSkinDrawPlan &plan)=0
Draw all commands in document order into the active target.
Result< OffscreenPreviewArtifact > render(const UiDocumentTarget &document, int width, int height) const
Layout and rasterize visible widget tint rectangles into a readback artifact.
Builds deterministic text/texture commands without touching runtime graphics.
UiSkinDrawPlan build(const UiDocumentTarget &document, const UiPreviewSnapshot &preview, const IUiSkinAssetResolver &assets) const
Resolve assets and fit/clamp widget content against a layout preview.
Canvas public API.
Definition Canvas.h:17
virtual void drawSolidRectRGBA(float x, float y, float width, float height, float red, float green, float blue, float alpha=1.0F)=0
Draws solid rect rgba.
Result< OffscreenPreviewArtifact > render(const OffscreenPreviewRequest &request, const DrawCallback &draw, int maximumDimension=4096, std::uint64_t maximumPixels=16777216)
Clear, draw and read back one isolated offscreen Canvas.
UI-neutral preview, picking and anchor-gizmo geometry service.
Definition UiDocument.h:255
Serializable UI authoring document with hierarchy and inspector capabilities.
Definition UiDocument.h:149
TargetId targetId() const override
Target id.
Definition UiDocument.h:155
Result< UiWidgetSnapshot > widget(const ObjectId &id) const override
Widget.
eve::editing::StableId StableId
Definition EditorIds.h:36
eve::editing::RuleId RuleId
Definition EditorIds.h:32
Revision-bound content plan suitable for graphics or UI-host presenters.
std::vector< EditorDiagnostic > diagnostics
Immutable request for one isolated Canvas render and CPU readback.
Deterministic UI layout preview used by canvas rendering and picking.
Definition UiDocument.h:246
std::vector< UiPreviewWidget > widgets
Definition UiDocument.h:250
std::vector< EditorDiagnostic > diagnostics
Definition UiDocument.h:251
Renderer-neutral visual and box-model style authored per widget.
Definition UiDocument.h:63