アクション | PDF の操作 |
---|---|
左ジャブ | 左へ(ページ戻る) |
右ストレート | 右へ(ページ進む) |
⊂二二二( ^ω^)二⊃ | フルスクリーン化(Control + Command + f) OS X のプレビュー.app のスライドショー開始 |
\(^o^)/ | フルスクリーン終了(ESC) |
特に大掛かりなことをしているわけではなく、
ソースコード入力の処理を、CGEventCreateKeyboardEvent から CGEventPost につなげるだけ。簡単!
Detector とかはそのまま使う感じで、InputMethod と Controller は以下のようになりました。
#include <ApplicationServices/ApplicationServices.h> DefaultInputMethod::DefaultInputMethod(User* _user) { inputList.insert(std::make_pair(123, new LeftJabCommandDetector(_user))); inputList.insert(std::make_pair(124, new RightStraightCommandDetector(_user))); inputList.insert(std::make_pair(kCGEventFlagMaskShift + kCGEventFlagMaskCommand + 3, new BoonPoseDetector(_user))); inputList.insert(std::make_pair(53, new OwataPoseDetector(_user))); }
#include <ApplicationServices/ApplicationServices.h> void Controller::main(void) { CGEventRef eventRef; IMmap inputList = im->input(); int keymask = 0x7f; int keycode = 0; int keyflag = 0; while(true) { for (IMmap::iterator it = inputList.begin(); it != inputList.end(); ++it) { if (it->second->detect()) { keycode = (it->first) & keymask; keyflag = (it->first) & ~keymask; eventRef = CGEventCreateKeyboardEvent(NULL, (CGKeyCode)keycode, true); CGEventSetFlags(eventRef, keyflag); CGEventPost(kCGSessionEventTap, eventRef); } } ctxGlobal.WaitAndUpdateAll(); } }
こんな感じですね。
Shift や Command キーは CGEventSetFlags でやるのがいい感じらしいんですが、
inputList に3つどうやって持たせようかなーって考えるのめんどくさかったんで
mask でどうにかとってます。まあ動いてるからいいじゃないか。
ちなみに Tython を流用して作ったので、CGEvent とか初見調査の時間も含めて 20 分でできた。さすが Tython !!!
上記で書いた場所だけはなくて、地味に他のところもちょくちょく変えてます。
それはこちらでご参照ください GitHub - gongo/Tython at presentation