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