Skip to content

canvas回りのいろいろ #244

@kancolleojisan

Description

@kancolleojisan

はじめまして。2~3個ほど謎な動作を見つけたので報告させて頂きます。

1.ゲーム画面でTabキーを押すとcanvasからフォーカスが外れて2度と戻らない
CSSをいじるとページ内のリンクを渡り歩けている所は確認出来ますが、
Shift+TabでもTabを押し続けてもcanvasに戻ってくることは出来ないみたいです。
Alt+TabやCtrl+Tab、Win+Tab等で切り替えをする際にうっかりTabキーを先に押してしまうと
その瞬間に戻れなくなります。人によってはフリーズと表現されているのではと思います。

2.Tabキーを押さなくてもフォーカスが外れてしまうことがある
左クリックで普通にプレイしているだけでも唐突にフォーカスが外れて(カーソルがHandになるべき所でもArrowになっちゃう)戻ってこなくなることがあります。
この時は最小化(アイコン化)して元に戻すとフォーカスが戻るのでそれほどプレイングに支障はないのですが、少しだけ気になります。
先行入力気味でクリックしていると、なりやすいような気がしています。

3.スクリーンショットの保存に失敗する
起動してプレイと放置を繰り返して長時間経つと、唐突にエラーが出るようになります。
一度このエラーが出ると、それ以降は何度カメラボタンを押しても同じエラーが出ます。
ステータスバーには
The underlying frame is no longer valid - please check the IsValid property before calling!
と表示されています。

・対応策
見よう見まねで書いてみました。努力の痕跡として見て頂けると嬉しいです。

1.ゲーム画面ではCefSharp.Wpfコントロール内のTabキーを封印する
xaml(CommonやKanColleHost等)の記述でKeyboardNavigation.TabNavigationをいじる方向で最初はやってみたんですけど、どこに書いても効いてる感じがなかったので、ここで肚をくくってCefSharpのソースをぐるぐる巡ってみました。
この辺かなと思ってWpfKeyboardHandlerを継承してみました。
KanColleHost.cs

	public class HandleTabPress : WpfKeyboardHandler
	{
		private readonly ChromiumWebBrowser owner;
		public HandleTabPress(ChromiumWebBrowser owner) : base(owner)
		{
			this.owner = owner;
		}
		public override void HandleKeyPress(KeyEventArgs e)
		{
			if (e.Key != Key.Tab || owner.GetMainFrame().Url != Properties.Settings.Default.KanColleUrl.ToString())
			{
				base.HandleKeyPress(e);
			}
		}
	}

これを if (newBrowser != null) のスコープ内で

			newBrowser.WpfKeyboardHandler = new HandleTabPress(newBrowser);

しました。
これでKanColleViewerのUI上でだけTab移動出来て、ブラウザ上では出来ないようになりました。
newってこういう使い方で良いのでしょうか。良いのかな、本当に大丈夫かと迷いつつ書きました。

2.放置
timeoutで強引にfocusさせまくるくらいの事しか思い付かず、それで良いかという判断も出来なかったので、ここはそのままにしました。

3.なんとなくエラーメッセージに従ってみる
多分コレかなーって、様子見中です。
CefBridge.cs

			.FirstOrDefault(x => gameFrame.IsValid ? x.Url.Contains("/kcs2/index.php") : false);

少しでもフィードバックとしてお役に立てたら嬉しいです。
それでは失礼いたします。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions