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
|
// Copyright 2019 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_OZONE_PLATFORM_WAYLAND_TEST_TEST_OUTPUT_H_
#define UI_OZONE_PLATFORM_WAYLAND_TEST_TEST_OUTPUT_H_
#include <wayland-server-protocol.h>
#include <cstdint>
#include <optional>
#include "base/functional/callback.h"
#include "base/memory/raw_ptr.h"
#include "ui/gfx/geometry/rect.h"
#include "ui/ozone/platform/wayland/test/global_object.h"
#include "ui/ozone/platform/wayland/test/test_output_metrics.h"
#include "ui/ozone/platform/wayland/test/test_zxdg_output.h"
struct wl_client;
struct wl_resource;
namespace wl {
// Handles the server-side representation of the wl_output. Values stored in
// `metrics_` are propagated to clients when `Flush()` is called. This occurs
// when the client first binds the output and output extensions are set by
// default.
class TestOutput : public GlobalObject {
public:
TestOutput();
explicit TestOutput(TestOutputMetrics metrics);
TestOutput(const TestOutput&) = delete;
TestOutput& operator=(const TestOutput&) = delete;
~TestOutput() override;
static TestOutput* FromResource(wl_resource* resource);
// Gets the name of the associated wl_output global.
uint64_t GetOutputName(wl_client* client) const;
//////////////////////////////////////////////////////////////////////////////
// Output metrics helpers.
// Sets the physical and logical bounds of the output to `bounds`. This is
// helpful for the default case.
void SetPhysicalAndLogicalBounds(const gfx::Rect& bounds);
// Applies a transpose operation on the logical size.
void ApplyLogicalTranspose();
void SetOrigin(const gfx::Point& wl_origin);
void SetScale(int32_t wl_scale);
void SetLogicalSize(const gfx::Size& xdg_logical_size);
void SetLogicalOrigin(const gfx::Point& xdg_logical_origin);
void SetPanelTransform(wl_output_transform wl_panel_transform);
const gfx::Size& GetPhysicalSize() const;
const gfx::Point& GetOrigin() const;
int32_t GetScale() const;
int64_t GetDisplayId() const;
//////////////////////////////////////////////////////////////////////////////
// Flushes `metrics_` for this output and all available extensions.
void Flush();
void SetXdgOutput(TestZXdgOutput* xdg_output);
TestZXdgOutput* xdg_output() { return xdg_output_; }
void set_suppress_implicit_flush(bool suppress_implicit_flush) {
suppress_implicit_flush_ = suppress_implicit_flush;
}
// GlobalObject:
void OnBind() override;
private:
// Disable sending metrics to clients implicitly (i.e. when the output is
// bound or when output extensions are created). If this is set `Flush()` must
// be explicitly called to propagate pending metrics.
bool suppress_implicit_flush_ = false;
TestOutputMetrics metrics_;
raw_ptr<TestZXdgOutput, DanglingUntriaged> xdg_output_ = nullptr;
};
} // namespace wl
#endif // UI_OZONE_PLATFORM_WAYLAND_TEST_TEST_OUTPUT_H_
|