1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- using System;
- using System.Collections.Concurrent;
- using System.Collections.Generic;
- using System.Linq;
- using Avalonia.Input;
- namespace Xilium.CefGlue.Avalonia
- {
- /// <summary>
- /// Provides handles for mouse cursors.
- /// </summary>
- internal class CursorsProvider
- {
- private static IDictionary<IntPtr, Cursor> _cache = new ConcurrentDictionary<IntPtr, Cursor>();
- static CursorsProvider()
- {
- foreach(StandardCursorType type in Enum.GetValues(typeof(StandardCursorType)))
- {
- var cursor = new Cursor(type);
- var platformImpl = cursor.PlatformImpl;
- if (platformImpl != null)
- {
- var platformImplType = platformImpl.GetType();
- var handleProperty = platformImplType.GetProperties().FirstOrDefault(x => x.Name == "Handle");
- if (handleProperty != null)
- {
- var handle = (IntPtr)handleProperty.GetValue(platformImpl);
- _cache[handle] = cursor;
- }
- }
- }
- }
- public static Cursor GetCursorFromHandle(IntPtr handle)
- {
- if (_cache.TryGetValue(handle, out var cursor))
- {
- return cursor;
- }
- return Cursor.Default;
- }
- }
- }
|