|  | // Copyright 2019 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; | 
|  |  | 
|  | using fuchsia.hardware.display; | 
|  | using zx; | 
|  |  | 
|  | /// Unique identifier for a display. | 
|  | /// Also serves as a capability, enabling the owner to perform certain | 
|  | /// operations on displays in the DisplayManager protocol and other protocols | 
|  | /// (like Scenic). | 
|  | type DisplayRef = resource struct { | 
|  | reference zx.handle:EVENT; | 
|  | }; | 
|  |  | 
|  | // === Mode flags === | 
|  |  | 
|  | const MODES_MAX_LEN int32 = 256; | 
|  |  | 
|  | // Flag for interlaced display modes. | 
|  | const MODE_INTERLACED int32 = 0x1; | 
|  |  | 
|  | const IDENTIFIER_MAX_LEN uint32 = 128; | 
|  | alias DisplayIdentifier = string:IDENTIFIER_MAX_LEN; | 
|  |  | 
|  | type Info = resource table { | 
|  | // Unique identifier for the display. | 
|  | 1: display_ref DisplayRef; | 
|  |  | 
|  | // Modes supported by the attached display. The first entry is the | 
|  | // preferred mode. | 
|  | 2: modes vector<fuchsia.hardware.display.Mode>:MODES_MAX_LEN; | 
|  |  | 
|  | 3: manufacturer_name DisplayIdentifier; | 
|  | 4: monitor_name DisplayIdentifier; | 
|  | }; | 
|  |  | 
|  | const DISPLAYS_MAX_LEN int32 = 1024; | 
|  |  | 
|  | /// Display Listener protocol implemented by clients. | 
|  | protocol DisplayListener { | 
|  | /// Called when displays are added. This method will also be called when | 
|  | /// the listener is registered for any connected displays. | 
|  | OnDisplayAdded(resource struct { | 
|  | display Info; | 
|  | }); | 
|  |  | 
|  | /// Called when displays are removed. | 
|  | OnDisplayRemoved(resource struct { | 
|  | display DisplayRef; | 
|  | }); | 
|  |  | 
|  | /// Called when the client gains or loses ownership of the displays. | 
|  | /// | 
|  | /// New clients should assume they do not have ownership of the display | 
|  | /// until informed otherwise by this method. Ownership can be lost and | 
|  | /// gained more than once. | 
|  | OnDisplayOwnershipChanged(resource struct { | 
|  | displays vector<DisplayRef>:DISPLAYS_MAX_LEN; | 
|  | owned_by_display_controller bool; | 
|  | }); | 
|  | }; | 
|  |  | 
|  | /// `DisplayManager` is a service that informs the client of new or removed | 
|  | /// displays and allows changing of display configuration. Every display is | 
|  | /// associated with a DisplayRef which can also be used as a parameter to other | 
|  | /// apis (e.g. Scenic). | 
|  | protocol DisplayManager { | 
|  | AddDisplayListener(resource struct { | 
|  | listener client_end:DisplayListener; | 
|  | }); | 
|  | }; |