2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ハロプロのロゴでxeyesを作ってみた

Posted at

ハロプロでかつて使用されていたロゴ

GA9qqrOa8AAacll.jpg
ハロプロ(ハロー!プロジェクト)は、株式会社アップフロントグループによって運営される女性アイドルグループの総称。
そんなハロプロでかつて使用されていた目玉のロゴ。気が付いたら最近見なくなった。
どうやら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

サンプルコードでは愚直にマウスカーソル位置をポーリングしている。
こんな単純なアプリなのに学ぶことが多い。。。

デモ

Animationss.gif

サンプルコード

2
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?