summaryrefslogtreecommitdiff
path: root/chromium/ui/base/cursor/cursor_loader.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/ui/base/cursor/cursor_loader.cc')
-rw-r--r--chromium/ui/base/cursor/cursor_loader.cc22
1 files changed, 15 insertions, 7 deletions
diff --git a/chromium/ui/base/cursor/cursor_loader.cc b/chromium/ui/base/cursor/cursor_loader.cc
index cdd82eb8a21..7529e8e9a58 100644
--- a/chromium/ui/base/cursor/cursor_loader.cc
+++ b/chromium/ui/base/cursor/cursor_loader.cc
@@ -8,6 +8,7 @@
#include <vector>
#include "base/check.h"
+#include "base/memory/scoped_refptr.h"
#include "base/time/time.h"
#include "ui/base/cursor/cursor.h"
#include "ui/base/cursor/cursor_factory.h"
@@ -15,6 +16,7 @@
#include "ui/base/cursor/cursor_util.h"
#include "ui/base/cursor/cursors_aura.h"
#include "ui/base/cursor/mojom/cursor_type.mojom.h"
+#include "ui/base/cursor/platform_cursor.h"
#include "ui/gfx/geometry/point.h"
namespace ui {
@@ -31,15 +33,20 @@ constexpr base::TimeDelta kAnimatedCursorFrameDelay =
CursorLoader::CursorLoader(bool use_platform_cursors)
: use_platform_cursors_(use_platform_cursors),
- factory_(CursorFactory::GetInstance()) {}
+ factory_(CursorFactory::GetInstance()) {
+ factory_->AddObserver(this);
+}
CursorLoader::~CursorLoader() {
+ factory_->RemoveObserver(this);
+ UnloadCursors();
+}
+
+void CursorLoader::OnThemeLoaded() {
UnloadCursors();
}
void CursorLoader::UnloadCursors() {
- for (const auto& image_cursor : image_cursors_)
- factory_->UnrefImageCursor(image_cursor.second);
image_cursors_.clear();
}
@@ -91,7 +98,8 @@ void CursorLoader::LoadImageCursor(mojom::CursorType type,
}
}
-PlatformCursor CursorLoader::CursorFromType(mojom::CursorType type) {
+scoped_refptr<PlatformCursor> CursorLoader::CursorFromType(
+ mojom::CursorType type) {
// An image cursor is loaded for this type.
if (image_cursors_.count(type))
return image_cursors_[type];
@@ -99,7 +107,7 @@ PlatformCursor CursorLoader::CursorFromType(mojom::CursorType type) {
// Check if there's a default platform cursor available.
// For the none cursor, we also need to use the platform factory to take
// into account the different ways of creating an invisible cursor.
- PlatformCursor cursor;
+ scoped_refptr<PlatformCursor> cursor;
if (use_platform_cursors_ || type == mojom::CursorType::kNone) {
cursor = factory_->GetDefaultCursor(type);
if (cursor)
@@ -112,14 +120,14 @@ PlatformCursor CursorLoader::CursorFromType(mojom::CursorType type) {
cursor = LoadCursorFromAsset(type);
if (!cursor && type != mojom::CursorType::kPointer) {
cursor = CursorFromType(mojom::CursorType::kPointer);
- factory_->RefImageCursor(cursor);
image_cursors_[type] = cursor;
}
DCHECK(cursor) << "Failed to load a bitmap for the pointer cursor.";
return cursor;
}
-PlatformCursor CursorLoader::LoadCursorFromAsset(mojom::CursorType type) {
+scoped_refptr<PlatformCursor> CursorLoader::LoadCursorFromAsset(
+ mojom::CursorType type) {
int resource_id;
gfx::Point hotspot;
if (GetCursorDataFor(size(), type, scale(), &resource_id, &hotspot)) {