Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1471)

Unified Diff: ui/base/cursor/ozone/cursor_data_factory_ozone.cc

Issue 2798883003: [ozone,views-mus] Build CursorDataFactoryOzone. (Closed)
Patch Set: sadrul comments Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/base/cursor/ozone/cursor_data_factory_ozone.h ('k') | ui/ozone/platform/x11/x11_cursor_factory_ozone.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/base/cursor/ozone/cursor_data_factory_ozone.cc
diff --git a/ui/base/cursor/ozone/cursor_data_factory_ozone.cc b/ui/base/cursor/ozone/cursor_data_factory_ozone.cc
new file mode 100644
index 0000000000000000000000000000000000000000..7d900d4b89fc7e44d1ee542c4654273cec6d9a5d
--- /dev/null
+++ b/ui/base/cursor/ozone/cursor_data_factory_ozone.cc
@@ -0,0 +1,108 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ui/base/cursor/ozone/cursor_data_factory_ozone.h"
+
+#include "ui/base/cursor/cursor.h"
+
+namespace ui {
+
+namespace {
+
+// A magic value that we store at the start of an instance.
+const uint32_t kCookie = 0xF60D214C;
+
+const uint32_t kBadCookie = 0xBADBADCC;
+
+CursorDataOzone* ToCursorDataOzone(PlatformCursor cursor) {
+ CursorDataOzone* ozone = static_cast<CursorDataOzone*>(cursor);
+#if DCHECK_IS_ON()
+ ozone->AssertIsACusrorDataOzone();
+#endif
+ return ozone;
+}
+
+PlatformCursor ToPlatformCursor(CursorDataOzone* cursor) {
+ return static_cast<PlatformCursor>(cursor);
+}
+
+} // namespace
+
+CursorDataOzone::CursorDataOzone(const ui::CursorData& data)
+ : magic_cookie_(kCookie), data_(data) {}
+
+void CursorDataOzone::AssertIsACusrorDataOzone() {
+ CHECK_EQ(magic_cookie_, kCookie);
+}
+
+CursorDataOzone::~CursorDataOzone() {
+ magic_cookie_ = kBadCookie;
+}
+
+CursorDataFactoryOzone::CursorDataFactoryOzone() {}
+
+CursorDataFactoryOzone::~CursorDataFactoryOzone() {}
+
+// static
+const ui::CursorData& CursorDataFactoryOzone::GetCursorData(
+ PlatformCursor platform_cursor) {
+ return ToCursorDataOzone(platform_cursor)->data();
+}
+
+PlatformCursor CursorDataFactoryOzone::GetDefaultCursor(int type) {
+ // Unlike BitmapCursorFactoryOzone, we aren't making heavyweight bitmaps, but
+ // we still have to cache these forever because objects that come out of the
+ // GetDefaultCursor() method aren't treated as refcounted by the ozone
+ // interfaces.
+ return GetDefaultCursorInternal(type).get();
+}
+
+PlatformCursor CursorDataFactoryOzone::CreateImageCursor(
+ const SkBitmap& bitmap,
+ const gfx::Point& hotspot,
+ float bitmap_dpi) {
+ CursorDataOzone* cursor = new CursorDataOzone(
+ ui::CursorData(hotspot, {bitmap}, bitmap_dpi, base::TimeDelta()));
+ cursor->AddRef(); // Balanced by UnrefImageCursor.
+ return ToPlatformCursor(cursor);
+}
+
+PlatformCursor CursorDataFactoryOzone::CreateAnimatedCursor(
+ const std::vector<SkBitmap>& bitmaps,
+ const gfx::Point& hotspot,
+ int frame_delay_ms,
+ float bitmap_dpi) {
+ CursorDataOzone* cursor = new CursorDataOzone(
+ ui::CursorData(hotspot, bitmaps, bitmap_dpi,
+ base::TimeDelta::FromMilliseconds(frame_delay_ms)));
+ cursor->AddRef(); // Balanced by UnrefImageCursor.
+ return ToPlatformCursor(cursor);
+}
+
+void CursorDataFactoryOzone::RefImageCursor(PlatformCursor cursor) {
+ ToCursorDataOzone(cursor)->AddRef();
+}
+
+void CursorDataFactoryOzone::UnrefImageCursor(PlatformCursor cursor) {
+ ToCursorDataOzone(cursor)->Release();
+}
+
+scoped_refptr<CursorDataOzone> CursorDataFactoryOzone::GetDefaultCursorInternal(
+ int type) {
+ if (type == kCursorNone)
+ return nullptr; // nullptr is used for hidden cursor.
+
+ if (!default_cursors_.count(type)) {
+ // We hold a ref forever because clients do not do refcounting for default
+ // cursors.
+ scoped_refptr<CursorDataOzone> cursor =
+ make_scoped_refptr(new CursorDataOzone(ui::CursorData(type)));
+ default_cursors_[type] = std::move(cursor);
+ }
+
+ // Returned owned default cursor for this type.
+ return default_cursors_[type];
+}
+
+} // namespace ui
« no previous file with comments | « ui/base/cursor/ozone/cursor_data_factory_ozone.h ('k') | ui/ozone/platform/x11/x11_cursor_factory_ozone.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698