blob: 1d05a24723c1af86d51482a66b50bca87df465b3 [file] [log] [blame]
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'dom.dart';
import 'embedder.dart';
import 'util.dart';
/// Provides mouse cursor bindings, such as the `flutter/mousecursor` channel.
class MouseCursor {
/// Initializes the [MouseCursor] singleton.
///
/// Use the [instance] getter to get the singleton after calling this method.
static void initialize() {
_instance ??= MouseCursor._();
}
/// The [MouseCursor] singleton.
static MouseCursor? get instance => _instance;
static MouseCursor? _instance;
MouseCursor._();
// Map from Flutter's kind values to CSS's cursor values.
//
// This map must be kept in sync with Flutter framework's
// rendering/mouse_cursor.dart.
static const Map<String, String> _kindToCssValueMap = <String, String>{
'alias': 'alias',
'allScroll': 'all-scroll',
'basic': 'default',
'cell': 'cell',
'click': 'pointer',
'contextMenu': 'context-menu',
'copy': 'copy',
'forbidden': 'not-allowed',
'grab': 'grab',
'grabbing': 'grabbing',
'help': 'help',
'move': 'move',
'none': 'none',
'noDrop': 'no-drop',
'precise': 'crosshair',
'progress': 'progress',
'text': 'text',
'resizeColumn': 'col-resize',
'resizeDown': 's-resize',
'resizeDownLeft': 'sw-resize',
'resizeDownRight': 'se-resize',
'resizeLeft': 'w-resize',
'resizeLeftRight': 'ew-resize',
'resizeRight': 'e-resize',
'resizeRow': 'row-resize',
'resizeUp': 'n-resize',
'resizeUpDown': 'ns-resize',
'resizeUpLeft': 'nw-resize',
'resizeUpRight': 'ne-resize',
'resizeUpLeftDownRight': 'nwse-resize',
'resizeUpRightDownLeft': 'nesw-resize',
'verticalText': 'vertical-text',
'wait': 'wait',
'zoomIn': 'zoom-in',
'zoomOut': 'zoom-out',
};
static String _mapKindToCssValue(String? kind) {
return _kindToCssValueMap[kind] ?? 'default';
}
void activateSystemCursor(String? kind) {
setElementStyle(
flutterViewEmbedder.glassPaneElement! as DomElement,
'cursor',
_mapKindToCssValue(kind),
);
}
}