Skip to content

Commit

Permalink
* オーバーレイへのキーボード入力に対応
Browse files Browse the repository at this point in the history
* 一部チェックボックスのイベントをセットし忘れていたので修正
  • Loading branch information
RainbowMage committed Mar 24, 2015
1 parent 238ca84 commit a12c569
Show file tree
Hide file tree
Showing 15 changed files with 581 additions and 393 deletions.
2 changes: 1 addition & 1 deletion HtmlRenderer/Properties/AssemblyInfo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -32,4 +32,4 @@
// すべての値を指定するか、下のように '*' を使ってビルドおよびリビジョン番号を
// 既定値にすることができます:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.1.1")]
[assembly: AssemblyVersion("1.0.1.2")]
28 changes: 28 additions & 0 deletions HtmlRenderer/Renderer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,24 @@ public void SendMouseWheel(int x, int y, int delta, bool isVertical)
}
}

public void SendActivate()
{
if (this.Browser != null)
{
var host = this.Browser.GetHost();
host.SendFocusEvent(true);
}
}

public void SendDeactivate()
{
if (this.Browser != null)
{
var host = this.Browser.GetHost();
host.SendFocusEvent(false);
}
}

private bool IsContinuousClick(int x, int y, CefMouseButtonType button)
{
// ダブルクリックとして認識するクリックの間隔よりも大きかった場合は継続的なクリックとみなさない
Expand All @@ -158,6 +176,16 @@ private bool IsContinuousClick(int x, int y, CefMouseButtonType button)
return true;
}

public void SendKeyEvent(CefKeyEvent keyEvent)
{
if (this.Browser != null)
{
var host = this.Browser.GetHost();

host.SendKeyEvent(keyEvent);
}
}

internal void OnCreated(CefBrowser browser)
{
this.Browser = browser;
Expand Down
2 changes: 1 addition & 1 deletion OverlayPlugin.Common/Properties/AssemblyInfo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -32,4 +32,4 @@
// すべての値を指定するか、下のように '*' を使ってビルドおよびリビジョン番号を
// 既定値にすることができます:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("0.3.3.2")]
[assembly: AssemblyVersion("0.3.3.3")]
11 changes: 11 additions & 0 deletions OverlayPlugin.Core/NativeMethods.cs
Original file line number Diff line number Diff line change
Expand Up @@ -213,5 +213,16 @@ uint uFlags // ウィンドウ位置のオプション
public const uint SWP_NOSIZE = 0x0001;
public const uint SWP_NOMOVE = 0x0002;
public const uint SWP_NOACTIVATE = 0x0010;

[DllImport("user32.dll")]
public static extern short GetKeyState(int nVirtKey);


public const int WM_KEYDOWN = 0x0100;
public const int WM_KEYUP = 0x0101;
public const int WM_CHAR = 0x0102;
public const int WM_SYSKEYDOWN = 0x0104;
public const int WM_SYSKEYUP = 0x0105;
public const int WM_SYSCHAR = 0x0106;
}
}
7 changes: 0 additions & 7 deletions OverlayPlugin.Core/OverlayBase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -267,14 +267,7 @@ public virtual void Dispose()

public virtual void Navigate(string url)
{
if (this.Overlay.Url != url)
{
this.Overlay.Url = url;
}
else
{
this.Overlay.Reload();
}
}

protected void Log(LogLevel level, string message)
Expand Down
2 changes: 2 additions & 0 deletions OverlayPlugin.Core/OverlayForm.Designer.cs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

145 changes: 140 additions & 5 deletions OverlayPlugin.Core/OverlayForm.cs
Original file line number Diff line number Diff line change
Expand Up @@ -35,11 +35,8 @@ public string Url
get { return this.url; }
set
{
if (this.url != value)
{
this.url = value;
UpdateRender();
}
this.url = value;
UpdateRender();
}
}

Expand Down Expand Up @@ -124,6 +121,15 @@ protected override void WndProc(ref Message m)
}
}

if (m.Msg == NativeMethods.WM_KEYDOWN ||
m.Msg == NativeMethods.WM_KEYUP ||
m.Msg == NativeMethods.WM_CHAR ||
m.Msg == NativeMethods.WM_SYSKEYDOWN ||
m.Msg == NativeMethods.WM_SYSKEYUP ||
m.Msg == NativeMethods.WM_SYSCHAR)
{
OnKeyEvent(ref m);
}
}

private void UpdateLayeredWindowBitmap()
Expand Down Expand Up @@ -496,6 +502,7 @@ private void OverlayForm_KeyDown(object sender, KeyEventArgs e)
this.altKeyPressed = e.Alt;
this.shiftKeyPressed = e.Shift;
this.controlKeyPressed = e.Control;

}

private void OverlayForm_KeyUp(object sender, KeyEventArgs e)
Expand All @@ -504,5 +511,133 @@ private void OverlayForm_KeyUp(object sender, KeyEventArgs e)
this.shiftKeyPressed = e.Shift;
this.controlKeyPressed = e.Control;
}

private void OnKeyEvent(ref Message m)
{

var keyEvent = new CefKeyEvent();
keyEvent.WindowsKeyCode = m.WParam.ToInt32();
keyEvent.NativeKeyCode = (int)m.LParam.ToInt64();
keyEvent.IsSystemKey = m.Msg == NativeMethods.WM_SYSCHAR ||
m.Msg == NativeMethods.WM_SYSKEYDOWN ||
m.Msg == NativeMethods.WM_SYSKEYUP;

if (m.Msg == NativeMethods.WM_KEYDOWN || m.Msg == NativeMethods.WM_SYSKEYDOWN)
{
keyEvent.EventType = CefKeyEventType.RawKeyDown;
}
else if (m.Msg == NativeMethods.WM_KEYUP || m.Msg == NativeMethods.WM_SYSKEYUP)
{
keyEvent.EventType = CefKeyEventType.KeyUp;
}
else
{
keyEvent.EventType = CefKeyEventType.Char;
}
keyEvent.Modifiers = GetKeyboardModifiers(ref m);

if (this.Renderer != null)
{
this.Renderer.SendKeyEvent(keyEvent);
}
}

private CefEventFlags GetKeyboardModifiers(ref Message m)
{
var modifiers = CefEventFlags.None;

if (IsKeyDown(Keys.Shift)) modifiers |= CefEventFlags.ShiftDown;
if (IsKeyDown(Keys.Control)) modifiers |= CefEventFlags.ControlDown;
if (IsKeyDown(Keys.Menu)) modifiers |= CefEventFlags.AltDown;

if (IsKeyToggled(Keys.NumLock)) modifiers |= CefEventFlags.NumLockOn;
if (IsKeyToggled(Keys.Capital)) modifiers |= CefEventFlags.CapsLockOn;

switch ((Keys)m.WParam)
{
case Keys.Return:
if (((m.LParam.ToInt64() >> 48) & 0x0100) != 0)
modifiers |= CefEventFlags.IsKeyPad;
break;
case Keys.Insert:
case Keys.Delete:
case Keys.Home:
case Keys.End:
case Keys.Prior:
case Keys.Next:
case Keys.Up:
case Keys.Down:
case Keys.Left:
case Keys.Right:
if (!(((m.LParam.ToInt64() >> 48) & 0x0100) != 0))
modifiers |= CefEventFlags.IsKeyPad;
break;
case Keys.NumLock:
case Keys.NumPad0:
case Keys.NumPad1:
case Keys.NumPad2:
case Keys.NumPad3:
case Keys.NumPad4:
case Keys.NumPad5:
case Keys.NumPad6:
case Keys.NumPad7:
case Keys.NumPad8:
case Keys.NumPad9:
case Keys.Divide:
case Keys.Multiply:
case Keys.Subtract:
case Keys.Add:
case Keys.Decimal:
case Keys.Clear:
modifiers |= CefEventFlags.IsKeyPad;
break;
case Keys.Shift:
if (IsKeyDown(Keys.LShiftKey)) modifiers |= CefEventFlags.IsLeft;
else modifiers |= CefEventFlags.IsRight;
break;
case Keys.Control:
if (IsKeyDown(Keys.LControlKey)) modifiers |= CefEventFlags.IsLeft;
else modifiers |= CefEventFlags.IsRight;
break;
case Keys.Alt:
if (IsKeyDown(Keys.LMenu)) modifiers |= CefEventFlags.IsLeft;
else modifiers |= CefEventFlags.IsRight;
break;
case Keys.LWin:
modifiers |= CefEventFlags.IsLeft;
break;
case Keys.RWin:
modifiers |= CefEventFlags.IsRight;
break;
}

return modifiers;
}

private bool IsKeyDown(Keys key)
{
return (NativeMethods.GetKeyState((int)key) & 0x8000) != 0;
}

private bool IsKeyToggled(Keys key)
{
return (NativeMethods.GetKeyState((int)key) & 1) == 1;
}

private void OverlayForm_Activated(object sender, EventArgs e)
{
if (this.Renderer != null)
{
this.Renderer.SendActivate();
}
}

private void OverlayForm_Deactivate(object sender, EventArgs e)
{
if (this.Renderer != null)
{
this.Renderer.SendDeactivate();
}
}
}
}
3 changes: 2 additions & 1 deletion OverlayPlugin.Core/Overlays/LabelOverlayConfig.cs
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,8 @@ public bool HtmlModeEnabled
public LabelOverlayConfig(string name)
: base(name)
{

this.Text = "";
this.HtmlModeEnabled = false;
}

// XmlSerializer用
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,14 @@
<data name="label9.Text" xml:space="preserve">
<value>移動とリサイズを制限する</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="checkLock.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="checkLock.Size" type="System.Drawing.Size, System.Drawing">
<value>403, 16</value>
</data>
<data name="label13.Text" xml:space="preserve">
<value>※ホットキーの変更を有効にするためにはプラグインの再起動が必要です</value>
</data>
Expand Down
Loading

0 comments on commit a12c569

Please sign in to comment.