Files
lserp_cs_5.0/插件库/Cef3.24/Structs/CefKeyEvent.cs
T
2026-07-10 15:25:05 +08:00

137 lines
4.3 KiB
C#

namespace Cef3
{
using System;
using Cef3.Interop;
public sealed class CefKeyEvent
{
private CefKeyEventType _type;
private CefEventFlags _modifiers;
private int _windowsKeyCode;
private int _nativeKeyCode;
private bool _isSystemKey;
private char _character;
private char _unmodifiedCharacter;
private bool _focusOnEditableField;
public CefKeyEvent()
{
}
/// <summary>
/// The type of keyboard event.
/// </summary>
public CefKeyEventType EventType
{
get { return _type; }
set { _type = value; }
}
/// <summary>
/// Bit flags describing any pressed modifier keys. See
/// cef_event_flags_t for values.
/// </summary>
public CefEventFlags Modifiers
{
get { return _modifiers; }
set { _modifiers = value; }
}
/// <summary>
/// The Windows key code for the key event. This value is used by the DOM
/// specification. Sometimes it comes directly from the event (i.e. on
/// Windows) and sometimes it's determined using a mapping function. See
/// WebCore/platform/chromium/KeyboardCodes.h for the list of values.
/// </summary>
public int WindowsKeyCode
{
get { return _windowsKeyCode; }
set { _windowsKeyCode = value; }
}
/// <summary>
/// The actual key code genenerated by the platform.
/// </summary>
public int NativeKeyCode
{
get { return _nativeKeyCode; }
set { _nativeKeyCode = value; }
}
/// <summary>
/// Indicates whether the event is considered a "system key" event (see
/// http://msdn.microsoft.com/en-us/library/ms646286(VS.85).aspx for details).
/// This value will always be false on non-Windows platforms.
/// </summary>
public bool IsSystemKey
{
get { return _isSystemKey; }
set { _isSystemKey = value; }
}
/// <summary>
/// The character generated by the keystroke.
/// </summary>
public char Character
{
get { return _character; }
set { _character = value; }
}
/// <summary>
/// Same as |character| but unmodified by any concurrently-held modifiers
/// (except shift). This is useful for working out shortcut keys.
/// </summary>
public char UnmodifiedCharacter
{
get { return _unmodifiedCharacter; }
set { _unmodifiedCharacter = value; }
}
/// <summary>
/// True if the focus is currently on an editable field on the page. This is
/// useful for determining if standard key events should be intercepted.
/// </summary>
public bool FocusOnEditableField
{
get { return _focusOnEditableField; }
set { _focusOnEditableField = value; }
}
#region Interop
internal static unsafe CefKeyEvent FromNative(cef_key_event_t* ptr)
{
if (ptr == null) throw new ArgumentNullException("ptr");
return new CefKeyEvent
{
EventType = ptr->type,
Modifiers = ptr->modifiers,
WindowsKeyCode = ptr->windows_key_code,
NativeKeyCode = ptr->native_key_code,
IsSystemKey = ptr->is_system_key != 0,
Character = (char)ptr->character,
UnmodifiedCharacter = (char)ptr->unmodified_character,
FocusOnEditableField = ptr->focus_on_editable_field != 0,
};
}
internal unsafe void ToNative(cef_key_event_t* ptr)
{
if (ptr == null) throw new ArgumentNullException("ptr");
ptr->type = EventType;
ptr->modifiers = Modifiers;
ptr->windows_key_code = WindowsKeyCode;
ptr->native_key_code = NativeKeyCode;
ptr->is_system_key = IsSystemKey ? 1 : 0;
ptr->character = Character;
ptr->unmodified_character = UnmodifiedCharacter;
ptr->focus_on_editable_field = FocusOnEditableField ? 1 : 0;
}
#endregion
}
}