Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(251)

Unified Diff: mojo/services/ui/views/interfaces/views.mojom

Issue 1410693003: mozart: Introduce new view manager interfaces. (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « mojo/services/ui/views/interfaces/view_trees.mojom ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: mojo/services/ui/views/interfaces/views.mojom
diff --git a/mojo/services/ui/views/interfaces/views.mojom b/mojo/services/ui/views/interfaces/views.mojom
new file mode 100644
index 0000000000000000000000000000000000000000..49ca8417fce08877926d6648a689cf5a7feccb82
--- /dev/null
+++ b/mojo/services/ui/views/interfaces/views.mojom
@@ -0,0 +1,167 @@
+// 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/public/interfaces/application/service_provider.mojom";
+import "mojo/services/ui/views/interfaces/layouts.mojom";
+
+// A view token is an opaque transferable reference to a view.
+//
+// The ViewManager provides each view with a unique view token when
+// it is registered. The token can subsequently be passed to other
+// applications and may be used to add the view as a child of some
+// other view or to set it as the root of a view tree.
+//
+// View tokens should be kept secret and should only be shared with
+// the view's intended container.
+//
+// TODO(jeffbrown): This implementation is a temporary placeholder until
+// we extend Mojo to provide a way to create tokens which cannot be forged.
+struct ViewToken {
+ uint32 value;
+};
+
+// A view is a graphical user interface component which is responsible
+// for drawing and supporting user interactions in the area of the screen
+// that it occupies.
+//
+// A view may also act as a container for other views (known as the
+// view's children) which it may freely layout and position anywhere
+// within its bounds to form a composite user interface. The hierarchy
+// of views thus formed is called a view tree.
+//
+// A view must registered with the view manager before it can be shown.
+interface View {
+ // Called when the view needs to update its layout and provide its size.
+ //
+ // This method may be called for one or more of the following reasons:
+ //
+ // 1. The view called RequestLayout() to mark itself as needing layout.
+ // 2. The view's parent called LayoutChild() for the first time to
+ // provide layout parameters to this view.
+ // 3. The view's parent called LayoutChild() and provided a
+ // set of layout parameters which differ from its prior call to
+ // OnLayout().
+ // 4. One or more of the view's children were just added to the view
+ // tree using AddChild() or removed from the tree using RemoveChild().
+ // 5. One or more of the view's children produced different layout
+ // information during their last layout pass causing a recursive
+ // layout to occur.
+ //
+ // The |children_needing_layout| array includes the keys of all children
+ // which require a layout. The view is responsible for calling LayoutChild()
+ // at least once for each child in the array in addition to any other
+ // children which might also need to be updated.
+ //
+ // Layout requests are coalesced for efficiency. Certain intermediate
+ // updates may be dropped if the view 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 is ready to be shown in its new aspect.
+ //
+ // The result of the layout may cause the parent's layout to be invalidated.
+ // When this happens, the parent's own OnLayout() method will be called
+ // and will be informed that this child needs layout.
+ //
+ // Recursive layout happens in any of the following circumstances:
+ //
+ // 1. If the resulting surface has changed since the last layout.
+ // 2. If the resulting size has changed since the last layout.
+ //
+ // It is an error to return a malformed |info| which does not satisfy
+ // the requested |layout_params|, such as by returning a size which
+ // exceeds the requested constraints; the view's connection will be closed.
+ OnLayout(mojo.ui.ViewLayoutParams layout_params,
+ array<uint32> children_needing_layout) => (mojo.ui.ViewLayoutInfo info);
+
+ // Called when a child view has become unavailable.
+ //
+ // A child may become unavailable for many reasons such being unregistered
+ // by its application, abnormal termination of its application, or
+ // cycles being introduced in the view tree.
+ //
+ // To complete removal of an unavailable child, this view component must
+ // call RemoveChild() on its view host with |child_key|.
+ //
+ // The implementation should invoke the callback once the event has
+ // been handled.
+ OnChildUnavailable(uint32 child_key) => ();
+};
+
+// The view host provides an interface for a view to configure itself and
+// interact with its local environment, such as adding and removing
+// children and specifying layout constraints.
+//
+// Each view obtains its own view host when registered with the ViewManager.
+// To unregister the view, close its view host message pipe.
+interface ViewHost {
+ // Gets a service provider to access services which are associated with
+ // the view such as input, accessibility and editing capabilities.
+ // The view service provider is private to the view and should not be
+ // shared with anyone else.
+ GetServiceProvider(mojo.ServiceProvider& service_provider);
+
+ // Requests that the view's OnLayout() method be called to compute a
+ // new layout due to a change in the view's layout information.
+ RequestLayout();
+
+ // Adds the view referenced by |child_view_token| as a child and assigns
+ // it the provided |child_key| to identify it among its children.
+ // The parent may remove the child later by passing the same |child_key|
+ // to RemoveChild().
+ //
+ // It is important for the parent to choose locally unique values for
+ // |child_key| to ensure that each child can be distinguished even as
+ // more children are added or removed. We recommend using a simple
+ // counter which is incremented on each (re-)addition.
+ //
+ // If the child becomes unavailable at any time prior to being removed
+ // then an OnChildUnavailable() message will be sent.
+ //
+ // If |child_view_token| refers to a view which is already unavailable or
+ // if adding the view would create a cycle in the view tree then the
+ // call proceeds as if it succeeded but an OnChildUnavailable() message
+ // will be sent.
+ //
+ // If |child_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
+ // (re-)added to its new parent as usual. This special case also applies
+ // when the specified view is already a child of this view, in which
+ // case the behavior is similar to the view having been transferred to
+ // some other parent and then back again.
+ //
+ // Note that an unavailable child will remain in its parent's list of
+ // children until its parent explicitly calls RemoveChild() to remove
+ // it.
+ //
+ // It is an error to add a view whose |child_key| already appears
+ // in the view's list of children; the connection will be closed.
+ AddChild(uint32 child_key, mojo.ui.ViewToken child_view_token);
+
+ // Removes the view referenced by |child_key| from the view's
+ // list of children.
+ //
+ // It is an error to remove a view whose |child_key| does not appear
+ // in the parent's list of children; the connection will be closed.
+ RemoveChild(uint32 child_key);
+
+ // Sets the layout parameters of the child view referenced by |child_key|
+ // 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 child has become unavailable.
+ //
+ // It is an error to specify a |child_key| that does not appear in
+ // the parent's list of children; the connection will be closed.
+ //
+ // It is an error to specify malformed |child_layout_params| such
+ // as invalid size constraints; the connection will be closed.
+ LayoutChild(uint32 child_key, mojo.ui.ViewLayoutParams child_layout_params)
+ => (mojo.ui.ViewLayoutInfo? info);
+};
« no previous file with comments | « mojo/services/ui/views/interfaces/view_trees.mojom ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698