blob: ad3ed108693cf1c24e31ad1c485db4e6fa683011 [file] [log] [blame]
// Copyright 2021 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_BASE_CURSOR_PLATFORM_CURSOR_H_
#define UI_BASE_CURSOR_PLATFORM_CURSOR_H_
#include "base/component_export.h"
#include "base/memory/ref_counted.h"
namespace ui {
// Ref-counted base class for platform-specific cursors.
//
// Sub-classes of PlatformCursor are expected to wrap platform-specific cursor
// resources (e.g. HCURSOR on Windows). Those resources also have
// platform-specific deletion methods that must only be called once the last
// cursor is destroyed, thus requiring a ref-counted type.
// While default cursors (all other than kCustom in
// ui/base/cursor/cursor_type.mojom) are used often during any Chrome session
// and could perhaps be kept alive for the duration of the program, custom
// cursors might incur in high memory usage. Because of this, all types of
// cursors are expected to be ref-counted.
class COMPONENT_EXPORT(UI_BASE_CURSOR) PlatformCursor
: public base::RefCounted<PlatformCursor> {
public:
REQUIRE_ADOPTION_FOR_REFCOUNTED_TYPE();
protected:
friend class base::RefCounted<PlatformCursor>;
virtual ~PlatformCursor() = default;
};
} // namespace ui
#endif // UI_BASE_CURSOR_PLATFORM_CURSOR_H_