#include "content/common/cursors/webcursor.h"
#include <stddef.h>
#include <optional>
#include "build/build_config.h"
#include "build/chromeos_buildflags.h"
#include "content/public/test/test_renderer_host.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/skia/include/core/SkBitmap.h"
#include "ui/base/cursor/cursor.h"
#include "ui/base/cursor/mojom/cursor_type.mojom-shared.h"
#include "ui/display/display.h"
#include "ui/display/screen.h"
#include "ui/display/screen_base.h"
#include "ui/display/test/test_screen.h"
#include "ui/gfx/geometry/size.h"
#include "ui/gfx/geometry/skia_conversions.h"
#include "ui/gfx/image/image_unittest_util.h"
#if BUILDFLAG(IS_WIN)
#include <windows.h>
#include "ui/base/win/win_cursor.h"
#endif
namespace content {
namespace {
class TestScreen : public display::test::TestScreen { … };
TEST(WebCursorTest, DefaultConstructor) { … }
TEST(WebCursorTest, WebCursorCursorConstructor) { … }
TEST(WebCursorTest, WebCursorCursorConstructorCustom) { … }
#if defined(USE_AURA)
TEST(WebCursorTest, CursorScaleFactor) { … }
#endif
#if BUILDFLAG(IS_WIN)
void ScaleCursor(float scale, int hotspot_x, int hotspot_y) {
WebCursor webcursor(ui::Cursor::NewCustom(
gfx::test::CreateBitmap(10), gfx::Point(hotspot_x, hotspot_y)));
display::Display display(1);
display.set_device_scale_factor(scale);
TestScreen screen(display);
webcursor.UpdateDisplayInfoForWindow(nullptr);
HCURSOR windows_cursor_handle =
ui::WinCursor::FromPlatformCursor(webcursor.GetNativeCursor().platform())
->hcursor();
EXPECT_NE(nullptr, windows_cursor_handle);
ICONINFO windows_icon_info;
EXPECT_TRUE(GetIconInfo(windows_cursor_handle, &windows_icon_info));
EXPECT_FALSE(windows_icon_info.fIcon);
EXPECT_EQ(static_cast<DWORD>(scale * hotspot_x), windows_icon_info.xHotspot);
EXPECT_EQ(static_cast<DWORD>(scale * hotspot_y), windows_icon_info.yHotspot);
}
TEST(WebCursorTest, WindowsCursorScaledAtHiDpi) {
ScaleCursor(2.0f, 4, 6);
ScaleCursor(1.5f, 2, 8);
ScaleCursor(1.25f, 3, 7);
}
#endif
}
}