1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
|
// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef UI_GFX_OVERLAY_PLANE_DATA_H_
#define UI_GFX_OVERLAY_PLANE_DATA_H_
#include <optional>
#include <variant>
#include "base/component_export.h"
#include "third_party/skia/include/core/SkColor.h"
#include "ui/gfx/color_space.h"
#include "ui/gfx/geometry/rect.h"
#include "ui/gfx/geometry/rect_f.h"
#include "ui/gfx/geometry/rrect_f.h"
#include "ui/gfx/geometry/transform.h"
#include "ui/gfx/hdr_metadata.h"
#include "ui/gfx/overlay_priority_hint.h"
#include "ui/gfx/overlay_transform.h"
#include "ui/gfx/overlay_type.h"
namespace gfx {
struct COMPONENT_EXPORT(GFX) OverlayPlaneData {
OverlayPlaneData();
OverlayPlaneData(
int z_order,
std::variant<gfx::OverlayTransform, gfx::Transform> plane_transform,
const RectF& display_bounds,
const RectF& crop_rect,
bool enable_blend,
const Rect& damage_rect,
float opacity,
OverlayPriorityHint priority_hint,
const gfx::RRectF& rounded_corners,
const gfx::ColorSpace& color_space,
const std::optional<HDRMetadata>& hdr_metadata,
std::optional<SkColor4f> color = std::nullopt,
bool is_solid_color = false,
bool is_root_overlay = false,
std::optional<Rect> clip_rect = std::nullopt,
gfx::OverlayType overlay_type = gfx::OverlayType::kSimple);
~OverlayPlaneData();
OverlayPlaneData(const OverlayPlaneData& other);
// Specifies the stacking order of the plane relative to the main framebuffer
// located at index 0.
int z_order = 0;
// Specifies how the buffer is to be transformed during composition.
// Note: An |OverlayTransform| transforms the buffer within its bounds and
// does not affect |display_bounds|.
std::variant<gfx::OverlayTransform, gfx::Transform> plane_transform =
OverlayTransform::OVERLAY_TRANSFORM_NONE;
// Bounds within the display to position the image in pixel coordinates. They
// are sent as floating point rect as some backends such as Wayland are able
// to do delegated compositing with sub-pixel accurate positioning.
RectF display_bounds;
// Normalized bounds of the image to be displayed in |display_bounds|.
RectF crop_rect = RectF(1.f, 1.f);
// Whether alpha blending should be enabled.
bool enable_blend = false;
// Damage in viz::Display space, the same space as |display_bounds|;
Rect damage_rect;
// Opacity of overlay plane. For a blending buffer (|enable_blend|) the total
// transparency will by = channel alpha * |opacity|.
float opacity = 1.0f;
// Hints for overlay prioritization when delegated composition is used.
OverlayPriorityHint priority_hint = OverlayPriorityHint::kNone;
// Specifies the rounded corners of overlay plane.
RRectF rounded_corners;
// ColorSpace for this overlay.
gfx::ColorSpace color_space;
// Optional HDR meta data required to display this overlay.
std::optional<HDRMetadata> hdr_metadata;
// Represents either a background of this overlay or a color of a solid color
// quad, which can be checked via the |is_solid_color|.
std::optional<SkColor4f> color;
// Set if this is a solid color quad.
bool is_solid_color = false;
bool is_root_overlay = false;
// Optional clip rect for this overlay.
std::optional<gfx::Rect> clip_rect;
// Specifies the type of this overlay based on a strategy used to propose it.
gfx::OverlayType overlay_type = gfx::OverlayType::kSimple;
};
} // namespace gfx
#endif // UI_GFX_OVERLAY_PLANE_DATA_H_
|