blob: ac3439c11b8e27677d3a0e5cf9cdbb1940a0581c [file] [log] [blame]
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
[DartPackage="mojo_services"]
module mojo.ui;
import "mojo/services/ui/views/interfaces/layouts.mojom";
import "mojo/services/ui/views/interfaces/views.mojom";
// A view tree is a top-level container for a hierarchy of views.
//
// A view tree must registered with the view manager before it can be shown.
interface ViewTree {
// Called when the tree needs to update its layout.
//
// This method may be called for one or more of the following reasons:
//
// 1. The root was just set.
// 2. The root produced different layout information during its last
// layout pass causing a recursive layout to occur.
//
// Layout requests are coalesced for efficiency. Certain intermediate
// updates may be dropped if the view tree is unable to keep up with them
// in a timely manner. Do nothing updates are always dropped.
//
// The implementation should invoke the callback once the event has
// been handled and the view tree is ready to be shown in its new aspect.
OnLayout() => ();
// Called when the root view has become unavailable.
//
// The root may become unavailable for many reasons such being unregistered
// by its application, abnormal termination of its application, or
// being reparented into a different view tree.
//
// The implementation should invoke the callback once the event has
// been handled.
OnRootUnavailable(uint32 root_key) => ();
};
// The view tree host provides an interface for a view tree to configure itself
// and interact with its views.
//
// Each view tree obtains its own view tree host when registered with the
// ViewManager. To unregister the view tree, close its view tree
// and/or view tree host message pipes.
interface ViewTreeHost {
// Requests that the view tree's OnLayout() method be called to compute a
// new layout due to a change in the view tree's layout information.
RequestLayout();
// Sets the root of the view tree and assigns it the provided |root_key|
// to distinguish it from any other roots this view tree has had.
//
// It is a good idea to provide a distinct |root_key| each time a new root
// is set so that callbacks related to the root can be clearly distinguished
// across these changes.
//
// If |root_view_token| refers to a view which is already unavailable
// then the call proceeds as if it succeeded but an OnChildUnavailable()
// message will be sent.
//
// If |root_view_token| refers to a view which already has a parent or is
// the root of a view tree then an OnChildUnavailable() or OnRootUnavailable()
// message will be sent to its old parent or root and the the view will be
// used as the root of the new view tree as usual. This special case also
// applies when the specified view is already the root of this view tree, in
// which case the behavior is similar to the view having been transferred to
// some other view tree and then back again.
SetRoot(uint32 root_key, mojo.ui.ViewToken root_view_token);
// Removes the root of the view tree.
//
// Does nothing if the view tree currently does not have a root.
ResetRoot();
// Sets the layout parameters of the root of the view tree and retrieves
// its layout information.
//
// The returned |info| is null if this layout request was canceled either
// because it has been superceded by a subsequently issued layout request
// or because the root has become unavailable.
//
// It is an error to call this function if the view tree does not currently
// have a root; the connection will be closed.
//
// It is an error to specify malformed |root_layout_params| such
// as invalid size constraints; the connection will be closed.
LayoutRoot(mojo.ui.ViewLayoutParams root_layout_params) =>
(mojo.ui.ViewLayoutInfo? info);
};