Gjs で Clutter の mouse-event を利用する
Clutter でマウスイベントを処理する方法を調べてみた。 devhelp の ClutterActor の Signal Details の部分と、 Events (ClutterEvent) を見ながらサンプル作成した。
説明は面倒なので省略。。。
マニュアルからわかりにくいのが、 x,y 座標を調べるところ。 coord というキーワードがわかっていて、戻り値が2つの場合の Gjs の書き方を知っていれば大丈夫です。
実際には device についても ClutterInputDevice クラスのメソッドを使えばわかるみたい。
#!/usr/bin/env gjs const Clutter = imports.gi.Clutter; Clutter.init(null); let stage = new Clutter.Stage({title:"Mouse"}); stage.set_background_color(Clutter.Color.get_static(Clutter.StaticColor.BLACK)); stage.connect('destroy', Clutter.main_quit); let actor = new Clutter.Actor({reactive:true}); actor.set_background_color(Clutter.Color.get_static(Clutter.StaticColor.WHITE)); actor.set_position(100, 100); actor.set_size(100, 100); actor.connect('button-press-event', function (self, event, user_data) { let print_string ="button-press-event:"; let type = event.type(); print_string += "\n\ttype:" + type; let time = event.get_time(); print_string += "\n\ttime:" + time; let flags = event.get_flags(); print_string += "\n\tflags:" + flags; let [x, y] = event.get_coords(); print_string += "\n\tx,y:" + x + "," + y; let modifier_state = event.get_state(); print_string += "\n\tstate:" + modifier_state; let button = event.get_button(); print_string += "\n\tbutton:" + button; let click_count = event.get_click_count(); print_string += "\n\tclick_count:" + click_count; let device = event.get_device(); print_string += "\n\tdevice:" + device; print(print_string);}); actor.connect('button-release-event', function (self, event, user_data) { let print_string ="button-release-event:"; print(print_string);}); actor.connect('enter-event', function (self, event, user_data) { let print_string ="enter-event:"; print(print_string);}); actor.connect('leave-event', function (self, event, user_data) { let print_string ="leave-event:"; print(print_string);}); actor.connect('motion-event', function (self, event, user_data) { let print_string ="motion-event:"; let type = event.type(); print_string += "\n\ttype:" + type; let time = event.get_time(); print_string += "\n\ttime:" + time; let flags = event.get_flags(); print_string += "\n\tflags:" + flags; let [x, y] = event.get_coords(); print_string += "\n\tx,y:" + x + "," + y; let modifier_state = event.get_state(); print_string += "\n\tstate:" + modifier_state; let device = event.get_device(); print_string += "\n\tdevice:" + device; print(print_string);}); actor.connect('scroll-event', function (self, event, user_data) { let print_string ="scroll-event:"; let type = event.type(); print_string += "\n\ttype:" + type; let time = event.get_time(); print_string += "\n\ttime:" + time; let flags = event.get_flags(); print_string += "\n\tflags:" + flags; let [x, y] = event.get_coords(); print_string += "\n\tx,y:" + x + "," + y; let direction = event.get_scroll_direction(); print_string += "\n\tdirecction:" + direction; let [dx, dy] = event.get_scroll_delta(); print_string += "\n\tdx,dy:" + dx + "," + dy; let modifier_state = event.get_state(); print_string += "\n\tstate:" + modifier_state; let device = event.get_device(); print_string += "\n\tdevice:" + device; print(print_string);}); stage.add_actor(actor); stage.show(); Clutter.main();