ハロプロでかつて使用されていたロゴ
ハロプロ(ハロー!プロジェクト)は、株式会社アップフロントグループによって運営される女性アイドルグループの総称。
そんなハロプロでかつて使用されていた目玉のロゴ。気が付いたら最近見なくなった。
どうやら2013年から始まった「クールハロー」の流れで消滅してしまったらしい。
https://niimurayousei.com/blog20140710.html
ふと、このロゴがxeyesみたいだなぁと思ったのでC#(WPF)で作ってみた。
xeyes
Linuxユーザには同じみのアプリ。マウスカーソルの方向に目玉が動いてかわいい。
xeyes watches what you do and reports to the Boss.
xeyes は、あなたの行動を観察しボスに報告する
計算式
瞳の位置を計算するアルゴリズムは↓にある通り。
https://note.com/rodz/n/nc8e9f9d1eb13
ただし瞳の動ける最大半径r未満にマウスカーソルがある時はrの値を小さくすることでカーソルへの追従性を良くするようにしている
マウス移動イベントの補足
昔のPCはよくアプリがフリーズしてしまうのでxeyesでOSが生きていることを確認していたらしい(本当か?)
なのでマウス移動イベント(ハードウェア割り込み)をトリガーとして描画を更新した方が良い気がする。(自己満足)
しかし、クライアント領域外のマウス移動イベントを補足するのが思いのほか面倒。OSからマウス移動メッセージ(WM_MOUSEMOVE)がクライアント領域外だとそもそもやってこない。
回避策として他のプロセスにも送られるウィンドウメッセージを補足するグローバルフック(SetWindowsHookEx)を利用すれば可能らしい。ただ、他のアプリケーションに影響してしまいそうな気がする。一応↓のコードを参考にしても動くがVisualStudioでブレークを張るとマウスの挙動がおかしくなる。
https://stackoverflow.com/questions/11607133/global-mouse-event-handler
サンプルコードでは愚直にマウスカーソル位置をポーリングしている。
こんな単純なアプリなのに学ぶことが多い。。。
デモ
サンプルコード