夏休みの自由研究

今年は夏休み始まる前に自由研究書いてるんだ! 偉いでしょ!

Processingの画面外でのイベントを取得するライブラリを作った

はじめに

qiita.com

この記事を読んで、jnativehookというライブラリを知った。 Processingでも使えるようにしようと思って書いていたら思っていた以上に大規模になってしまったので、ライブラリにして配布した。

リンク

僕の作ったライブラリ

github.com

元にしたライブラリ

github.com

使い方

  1. p5nativehookのjarファイルとjnativehookのjarファイルをともにProcessingにインポートする。

  2. コードを書く。

import org.jnativehook.*;
import org.jnativehook.dispatcher.*;
import org.jnativehook.mouse.*;

import p5nativehook.p5NativemouseGet;

void setup(){
  size(500,500);
  background(255);
  p5NativeMouseGet mg=new p5NativeMouseGet(this);
  //この一行を入れるとmousePressedなどのマウスイベントは
  //全て画面の内外に関係なく呼び出される
}

void draw(){
}

void mousePressed(){
  background(random(255),0,0); 
}
import org.jnativehook.*;
import org.jnativehook.dispatcher.*;
import org.jnativehook.keyboard.*;

import p5nativehook.p5NativeKeyGet;

void setup(){
  size(500,500);
  background(255);
  p5NativeKeyGet kg=new p5NativeKeyGet(this);
  //この一行を入れるとkeyPressedなどのキーイベントは
  //全て画面の内外に関係なく呼び出される
}

void draw(){
}

void keyPressed(){
  background(random(255),0,0); 
}

まだできていないこと

  • jnativehookの仕様上、一番始めによく分からないログを吐く(上のQiitaの関数を使って途中でログを止めている)
  • jnativehookの仕様上、keyTypedには反応しない(keyPressedとkeyReleasedには反応する)
  • jnativehookの仕様上、keyCodeは取得できるがkeyCharは取得できない
  • mouseWheelの上下を認識していない

何をしているか

  • jnativehookで取得したNativeEventをProcessingのEvent形式に変換する。
  • 変換したEventをPAppletの持っているEventQueueにpostして、その画面内で起きた通常のEventと同じように処理させている。

つらかったこと

  • ライセンス周りが全く分からんかったので雑になってしまった。分かる人いたらContributorにするのでその辺全部やってくれ。