///|
/// Canonical feature ordering for a provider report. This is a feature
/// catalogue, not a renderer/backend selection matrix.
pub fn renderer_features() -> Array[@render.RendererFeature] {
[
Rect,
RoundedRect,
Gradient,
Shadow,
Text,
Image,
Clip,
Transform,
Opacity,
LayerCompositing,
BlendMode,
FilterEffect,
PathVector,
ShaderEffect,
TextShaping,
EmojiText,
AsyncImage,
]
}
///|
/// Build one provider-owned capability row per renderer feature. Providers
/// supply the status and note functions; `render` only preserves the common
/// feature ordering and carries the provider id into the report.
pub fn renderer_provider_capabilities(
provider_id~ : String,
backend~ : @render.RendererBackendKind,
capability_for~ : (@render.RendererFeature) -> (
@render.RendererFeatureStatus,
String,
),
) -> Array[@render.RendererBackendFeatureCapability] {
renderer_features().map(feature => {
let (status, note) = capability_for(feature)
@render.RendererBackendFeatureCapability::new(
provider_id~,
feature~,
backend~,
status~,
note~,
)
})
}