// Copyright 2016 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

library fuchsia.ui.viewsv1;

using fuchsia.math;

// Parameters and contextual information for a view provided by its container.
//
// When a container sets properties for its children, any properties which
// are set to null are inherited from the container's own ancestors.
struct ViewProperties {
  ViewLayout? view_layout;
  CustomFocusBehavior? custom_focus_behavior;
};

struct CustomFocusBehavior {
  bool allow_focus = true;
};

// Provides layout constraints for a view.
//
// TODO(jeffbrown): Decide how measurement should be performed.  Perhaps
// bring back |BoxConstraints| or introduce some other protocol just for
// measurement.
struct ViewLayout {
  // The size of the view in logical pixels.
  // Must be non-negative.
  fuchsia.math.SizeF size;

  // The inset of the view in logical pixels.
  // Must be non-negative.
  fuchsia.math.InsetF inset;
};
