Incular logoIncular
API ReferenceApplication

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.

On this page