// Copyright 2022 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.display.singleton;

using fuchsia.math;

/// Describes the physical display, and how to map between physical and logical pixels.
type Metrics = table {
    /// Same meaning as `horizontal_resolution` and `vertical_resolution`
    /// in `fuchsia.hardware.display.Mode`. Given in physical pixels.
    1: extent_in_px fuchsia.math.SizeU;
    /// Same meaning as `horizontal_size_mm` and `vertical_size_mm`
    /// in `fuchsia.hardware.display.Info`.
    2: extent_in_mm fuchsia.math.SizeU;
    /// The number of physical pixels per "logical" pixel, for example as in
    /// `fuchsia.ui.composition.LayoutInfo.logical_size`.  It provides an indication
    /// of the size of image buffers that should be allocated.  This value would typically
    /// be used by a component near the root of the scene graph to set a scale for the rest
    /// of the scene beneath.
    3: recommended_device_pixel_ratio fuchsia.math.VecF;
};

/// Get information about Scenic's primary display.
// TODO(fxbug.dev/23687): in the future there will probably be a DisplayManager, and
// info about which displays to use will be explicitly specified to Scenic.
@discoverable
closed protocol Info {
    strict GetMetrics() -> (struct {
        info Metrics;
    });
};
