Gjs で Clutter Actor をドラッグ

今回は、 Clutter.Stage 内の Clutter.Actor をドラッグして動かす紹介です。
ClutterDragAction を Actor に追加するだけなので簡単です。signal として、"drag-begin" "drag-end" "drag-motion" があるので、Action に connect すればドラッグの開始、終了、途中のイベント処理を追加できます。

#!/usr/bin/env gjs
const Clutter = imports.gi.Clutter;

Clutter.init(null);
let stage = new Clutter.Stage();
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_size(100, 100);
actor.set_position(100, 100);

let action = new Clutter.DragAction();
actor.add_action(action);

stage.add_actor(actor);
stage.show();
Clutter.main();

非常に簡単です。Clutter.DragActionを作成し、Actor に add_action するだけです。イベント処理は、 acton.connect('drag-end', function(){...}); してあげれば大丈夫です。