This commit is contained in:
2026-02-11 04:11:05 +08:00
parent b445c3e334
commit 1a8a3b59d2
104 changed files with 10241 additions and 2457 deletions
@@ -330,36 +330,72 @@ protected override bool IsInputKey(Keys keyData)
return true;
}
/// <summary>
/// Convert WinForms Keys to W3C KeyboardEvent.key string.
/// </summary>
static string WinFormsKeyToW3C(Keys key) => (key & Keys.KeyCode) switch
{
Keys.Home => "Home",
Keys.End => "End",
Keys.PageUp => "PageUp",
Keys.PageDown => "PageDown",
Keys.Left => "ArrowLeft",
Keys.Right => "ArrowRight",
Keys.Up => "ArrowUp",
Keys.Down => "ArrowDown",
Keys.LShiftKey or Keys.RShiftKey or Keys.ShiftKey => "Shift",
Keys.LControlKey or Keys.RControlKey or Keys.ControlKey => "Control",
Keys.LMenu or Keys.RMenu or Keys.Menu => "Alt",
Keys.Return => "Enter",
Keys.Escape => "Escape",
Keys.Back => "Backspace",
Keys.Tab => "Tab",
Keys.Delete => "Delete",
Keys.Insert => "Insert",
Keys.Space => " ",
Keys.F1 => "F1",
Keys.F2 => "F2",
Keys.F3 => "F3",
Keys.F4 => "F4",
Keys.F5 => "F5",
Keys.F6 => "F6",
Keys.F7 => "F7",
Keys.F8 => "F8",
Keys.F9 => "F9",
Keys.F10 => "F10",
Keys.F11 => "F11",
Keys.F12 => "F12",
>= Keys.A and <= Keys.Z => ((char)('a' + ((key & Keys.KeyCode) - Keys.A))).ToString(),
>= Keys.D0 and <= Keys.D9 => ((char)('0' + ((key & Keys.KeyCode) - Keys.D0))).ToString(),
_ => "Unidentified"
};
private void RenderingCanvas_KeyDown(object sender, KeyEventArgs e)
{
Focus();
DispEngine.KeyDown((long)e.KeyData);
// Map specific keys for view transformation
long key = (long)e.KeyData;
if (key == (long)Keys.LShiftKey || key == (long)Keys.RShiftKey || key == (long)Keys.ShiftKey)
key = (long)Keys.Shift;
string key = WinFormsKeyToW3C(e.KeyData);
DispEngine.KeyDown(key);
DispEngine.KeyDownTransform(key, new key_table__transform_view_by_key_pressing_t()
{
HOME = (long)Keys.Home,
PAGE_UP = (long)Keys.PageUp,
PAGE_DOWN = (long)Keys.PageDown,
F1 = (long)Keys.F1,
F2 = (long)Keys.F2,
F3 = (long)Keys.F3,
F4 = (long)Keys.F4,
SHIFT = (long)Keys.Shift,
ARROW_LEFT = (long)Keys.Left,
ARROW_RIGHT = (long)Keys.Right,
ARROW_DOWN = (long)Keys.Down,
ARROW_UP = (long)Keys.Up
HOME = "Home",
PAGE_UP = "PageUp",
PAGE_DOWN = "PageDown",
F1 = "F1",
F2 = "F2",
F3 = "F3",
F4 = "F4",
SHIFT = "Shift",
ARROW_LEFT = "ArrowLeft",
ARROW_RIGHT = "ArrowRight",
ARROW_DOWN = "ArrowDown",
ARROW_UP = "ArrowUp"
});
}
private void RenderingCanvas_KeyUp(object sender, KeyEventArgs e)
{
DispEngine.KeyUp((long)e.KeyData);
DispEngine.KeyUp(WinFormsKeyToW3C(e.KeyData));
}
</code></pre><h3 id="lifecycle-management">Lifecycle Management</h3>
<p>Window event handling ensures proper state management:</p>
@@ -564,11 +600,51 @@ private void RenderingCanvas_MouseMove(object sender, MouseEventArgs e)
});
}
</code></pre><pre><code class="lang-csharp" name="RenderingCanvas">/// &lt;summary&gt;
/// Convert WPF Key to W3C KeyboardEvent.key string.
/// &lt;/summary&gt;
static string WpfKeyToW3C(Key key) =&gt; key switch
{
Key.Home =&gt; &quot;Home&quot;,
Key.End =&gt; &quot;End&quot;,
Key.PageUp =&gt; &quot;PageUp&quot;,
Key.PageDown =&gt; &quot;PageDown&quot;,
Key.Left =&gt; &quot;ArrowLeft&quot;,
Key.Right =&gt; &quot;ArrowRight&quot;,
Key.Up =&gt; &quot;ArrowUp&quot;,
Key.Down =&gt; &quot;ArrowDown&quot;,
Key.LeftShift or Key.RightShift =&gt; &quot;Shift&quot;,
Key.LeftCtrl or Key.RightCtrl =&gt; &quot;Control&quot;,
Key.LeftAlt or Key.RightAlt =&gt; &quot;Alt&quot;,
Key.Return =&gt; &quot;Enter&quot;,
Key.Escape =&gt; &quot;Escape&quot;,
Key.Back =&gt; &quot;Backspace&quot;,
Key.Tab =&gt; &quot;Tab&quot;,
Key.Delete =&gt; &quot;Delete&quot;,
Key.Insert =&gt; &quot;Insert&quot;,
Key.Space =&gt; &quot; &quot;,
Key.F1 =&gt; &quot;F1&quot;,
Key.F2 =&gt; &quot;F2&quot;,
Key.F3 =&gt; &quot;F3&quot;,
Key.F4 =&gt; &quot;F4&quot;,
Key.F5 =&gt; &quot;F5&quot;,
Key.F6 =&gt; &quot;F6&quot;,
Key.F7 =&gt; &quot;F7&quot;,
Key.F8 =&gt; &quot;F8&quot;,
Key.F9 =&gt; &quot;F9&quot;,
Key.F10 =&gt; &quot;F10&quot;,
Key.F11 =&gt; &quot;F11&quot;,
Key.F12 =&gt; &quot;F12&quot;,
&gt;= Key.A and &lt;= Key.Z =&gt; ((char)('a' + (key - Key.A))).ToString(),
&gt;= Key.D0 and &lt;= Key.D9 =&gt; ((char)('0' + (key - Key.D0))).ToString(),
_ =&gt; &quot;Unidentified&quot;
};
/// &lt;summary&gt;
/// Handles the key up event
/// &lt;/summary&gt;
private void RenderingCanvas_KeyUp(object sender, KeyEventArgs e)
{
DispEngine.KeyUp((long)e.Key);
DispEngine.KeyUp(WpfKeyToW3C(e.Key));
}
/// &lt;summary&gt;
@@ -576,27 +652,23 @@ private void RenderingCanvas_KeyUp(object sender, KeyEventArgs e)
/// &lt;/summary&gt;
private void RenderingCanvas_KeyDown(object sender, KeyEventArgs e)
{
DispEngine.KeyDown((long)e.Key);
string key = WpfKeyToW3C(e.Key);
DispEngine.KeyDown(key);
// Map specific keys for view transformation
long key = (long)e.Key;
if (key == (long)Key.RightShift)
key = (long)Key.LeftShift;
DispEngine.KeyDownTransform(key, new key_table__transform_view_by_key_pressing_t()
{
HOME = (long)Key.Home,
PAGE_UP = (long)Key.PageUp,
PAGE_DOWN = (long)Key.PageDown,
F1 = (long)Key.F1,
F2 = (long)Key.F2,
F3 = (long)Key.F3,
F4 = (long)Key.F4,
SHIFT = (long)Key.LeftShift,
ARROW_LEFT = (long)Key.Left,
ARROW_RIGHT = (long)Key.Right,
ARROW_DOWN = (long)Key.Down,
ARROW_UP = (long)Key.Up
HOME = &quot;Home&quot;,
PAGE_UP = &quot;PageUp&quot;,
PAGE_DOWN = &quot;PageDown&quot;,
F1 = &quot;F1&quot;,
F2 = &quot;F2&quot;,
F3 = &quot;F3&quot;,
F4 = &quot;F4&quot;,
SHIFT = &quot;Shift&quot;,
ARROW_LEFT = &quot;ArrowLeft&quot;,
ARROW_RIGHT = &quot;ArrowRight&quot;,
ARROW_DOWN = &quot;ArrowDown&quot;,
ARROW_UP = &quot;ArrowUp&quot;
});
}
</code></pre><h3 id="lifecycle-management-1">Lifecycle Management</h3>
@@ -771,7 +843,7 @@ engine.SetViewToHomeView();
</tr>
<tr>
<td>Key press</td>
<td><a class="xref" href="../../../../api/Hi.Disp.DispEngine.html#Hi_Disp_DispEngine_KeyDown_System_Int64_">KeyDown(long)</a> / <a class="xref" href="../../../../api/Hi.Disp.DispEngine.html#Hi_Disp_DispEngine_KeyUp_System_Int64_">KeyUp(long)</a> and <a class="xref" href="../../../../api/Hi.Disp.DispEngine.html#Hi_Disp_DispEngine_KeyDownTransform_System_Int64_Hi_Native_key_table__transform_view_by_key_pressing_t_">KeyDownTransform(long, key_table__transform_view_by_key_pressing_t)</a></td>
<td>&lt;xref:Hi.Disp.DispEngine.KeyDown(System.Int64)&gt; / &lt;xref:Hi.Disp.DispEngine.KeyUp(System.Int64)&gt; and &lt;xref:Hi.Disp.DispEngine.KeyDownTransform(System.Int64,Hi.Native.key_table__transform_view_by_key_pressing_t)&gt;</td>
</tr>
<tr>
<td>Touch events</td>