ClutterSwipeAction

マルチタッチを実装してみたくなった。
具体的には Comipoli にてフリックで次ページ移動をさせたい。
スマートフォンに慣れてしまうとどうしてもね。

swipe

本当は指一本フリックにしたいけど指定する手段が無いようだ。
当然か、マウスカーソルがある OS ではそれマウスカーソルの移動だ。
指一本で操作するには OS をマウスカーソル無しにするしか手段が無い。

上記一つだけでもデスクトップとタブレットで共通 OS は不可能と解る。
iOS と Mac OS みたいにイメージだけ共通にするべき。
結局 GNOME は Mac OS のようにしたいってことなんだろう。

でも GNOME のマルチタッチは本当に動くのかな?
そうだ、筆者は MacBook Air を持っているじゃないか。
MacBook Air に DVD ドライブを付けて Fedora LiveDVD で試す。

更に外付け HDD を繋いで Gedit にてテキストファイルを開く。
うん、二本指で上下スクロールは可能だ、慣性スクロールにも対応している。
次に EoG で画像を表示。
回転も拡大もできない、フリックで次ファイルのつもりがスクロールに。
駄目だこりゃ、多分 GNOME は Windows 10 のマルチタッチ仕様なんだろう。

他にも Mac で Fedora はキーボードのバックライトが点灯しないとか。

Fedora 24 でも WiFi には繋がらなかった。
多分下記と同じようにすればイケると思うけど。
MacBookへLinux(Fedora)をインストール – Qiita

ところで command キーがそのまま Super キーとして使えるのね。
control が Ctrl のままだ、Function キーは fn キーを押す必要あり。
fn+delete で Delete キーなんかは Mac OS と同じ。
うん、キーボードに関しては何も問題ない。

マルチタッチさえ気にしないならなんとか使えそうだが、うーん。
MacBook Air はやはり Mac のまま使うのが正解だろうな。
そもそも現状で何も困っていない。

脱線した、フリックで次ページ移動の話ね。

実はマウスで次ページに移動する手段を作ろうと考えた。
EoG のように画像に被さるボタンは嫌い、ならばフリックだ!
という理由でこんなことになった。
ClutterSwipeAction を使えば簡単にフリック動作を得られるようだ。

swipe シグナルの direction 引数は
CLUTTER_SWIPE_DIRECTION_UP | CLUTTER_SWIPE_DIRECTION_RIGHT
のように or 演算で届くので and 演算を使って確認する。

class ComipoliWindow(Gtk.ApplicationWindow):
    def __init__(self, app):
        #
        # etc...
        #
        # Gesture
        swipe = Clutter.SwipeAction()
        swipe.connect("swipe", self.on_swipe)
        self.stage.add_action(swipe)
        self.stage.set_reactive(True)
        #
        # etc...

    def on_swipe(self, action, actor, direction):
        if direction & Clutter.SwipeDirection.RIGHT:
            self.change_pixbuf(2)
        elif direction & Clutter.SwipeDirection.LEFT:
            self.change_pixbuf(-2)
        return True

なんだ、これだけでマウス左ボタンでのフリック動作が可能だ。
Mac のタッチパッドフリックじゃやっぱり動かないな。

EoG は同じようにマウスでは動かないので別の実装が必要なのかな?
マルチタッチ対応マシンを買わないと解らない、いつか気が向いたら。