// 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/gfx/composition/interfaces/scenes.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 scene 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 |result| 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.ViewLayoutResult result);

  // 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.
  //
  // See |mojo.ui.InputConnection|.
  GetServiceProvider(mojo.ServiceProvider& service_provider);

  // Creates the view's scene, replacing any previous scene the view
  // might have had.
  //
  // The |scene| is used to supply content for the scene.  The scene pipe
  // is private to the scene and should not be shared with anyone else.
  //
  // To destroy the scene, simply close the |scene| message pipe.
  //
  // See also: |mojo.gfx.composition.Compositor.CreateScene()|.
  CreateScene(mojo.gfx.composition.Scene& scene);

  // 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);
};
