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
|
// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "ui/ozone/platform/wayland/test/test_fractional_scale.h"
#include <fractional-scale-v1-server-protocol.h>
#include "base/check.h"
#include "ui/ozone/platform/wayland/test/mock_surface.h"
namespace wl {
namespace {
constexpr uint32_t kTestFractionalScaleManagerVersion = 1;
constexpr struct wp_fractional_scale_v1_interface kTestFractionalScaleImpl = {
.destroy = DestroyResource};
void GetFractionalScale(struct wl_client* client,
struct wl_resource* resource,
uint32_t id,
struct wl_resource* surface) {
auto* mock_surface = GetUserDataAs<MockSurface>(surface);
if (mock_surface->fractional_scale()) {
wl_resource_post_error(
resource, WP_FRACTIONAL_SCALE_MANAGER_V1_ERROR_FRACTIONAL_SCALE_EXISTS,
"fractional scale exists");
return;
}
wl_resource* fractional_scale_resource =
CreateResourceWithImpl<::testing::NiceMock<TestFractionalScale>>(
client, &wp_fractional_scale_v1_interface,
wl_resource_get_version(resource), &kTestFractionalScaleImpl, id,
surface);
CHECK(fractional_scale_resource);
mock_surface->set_fractional_scale(
GetUserDataAs<TestFractionalScale>(fractional_scale_resource));
}
constexpr struct wp_fractional_scale_manager_v1_interface
kTestFractionalScaleManagerImpl = {
.destroy = DestroyResource,
.get_fractional_scale = GetFractionalScale,
};
} // namespace
TestFractionalScaleManager::TestFractionalScaleManager()
: GlobalObject(&wp_fractional_scale_manager_v1_interface,
&kTestFractionalScaleManagerImpl,
kTestFractionalScaleManagerVersion) {}
TestFractionalScaleManager::~TestFractionalScaleManager() = default;
TestFractionalScale::TestFractionalScale(wl_resource* resource,
wl_resource* surface)
: ServerObject(resource), surface_(surface) {
CHECK(surface_);
}
TestFractionalScale::~TestFractionalScale() {
if (auto* mock_surface = GetUserDataAs<MockSurface>(surface_)) {
mock_surface->set_fractional_scale(nullptr);
}
}
void TestFractionalScale::SendPreferredScale(float scale) {
const uint32_t scale_int = scale == 1.0f ? 0 : static_cast<int>(scale * 120);
wp_fractional_scale_v1_send_preferred_scale(resource(), scale_int);
}
} // namespace wl
|