View
Retained view identity, metrics, lifecycle, and anchored auxiliary views.
View pairs a ViewController (retained metrics/lifecycle/environment) with a
child tree. ViewId::PRIMARY (0) is the main view.
use incular::prelude::*;
fn main() {
let view = View::primary(Text::new("Main"));
println!("view id: {}", view.id().get());
let app = Application::new(move |_cx| view.clone().into_widget())
.expect("valid application");
incular::run(app).expect("run application");
}Controller: new(id, metrics, env) / primary(metrics) / data() /
revision() / subscribe(f) / update_metrics(m) / set_environment(env) /
set_lifecycle(l) / set_focused(b) / dispose().
ViewMetrics: new(w, h, scale) / logical_size() / logical_width() /
logical_height(). ViewLifecycle: Creating (default) / Visible /
Hidden / Focused / Unfocused / Closing / Closed
(is_closed(), is_visible()). ViewEvent: MetricsChanged /
EnvironmentChanged / LifecycleChanged / FocusChanged / Disposed.
ViewData { id, metrics, environment, lifecycle, focused }.
Anchored auxiliary views
ViewAnchor pairs a child with a host-owned auxiliary view:
ViewAnchor::new(child)
.with_view(view)
.host(host) // Rc<dyn AuxiliaryViewHost>
.anchor(Rect::from_origin_size(origin, size))
.title("Inspector")
ViewAnchorController::new().with_host(host)
controller.sync(request)? // AuxiliaryViewOutcome: Created / Updated / Unchanged
controller.update_anchor(rect)?
controller.detach()
controller.data() // ViewAnchorData { view_id, anchor, attached, last_error }AuxiliaryViewRequest { view_id, child, metrics, environment, anchor, title },
AuxiliaryViewHandle { view_id, token }, AuxiliaryViewError:
Unsupported / Rejected / Invalid; NoopAuxiliaryViewHost always
declines. ViewAnchorSubscription keeps observers alive.
ViewSubscription keeps ViewController event listeners alive (drop
unsubscribes).
Related: Application,
Native Host.