gtk-rs 0.9.0を試した

はじめに

gtk-rs/gtk: GTK+ 3.x bindings and wrappers for Rust 0.9.0 を試したメモです。

rustup.rs - The Rust toolchain installer はインストールしてセットアップ済みとします。

Windows 10

Building から Requirements を開いて Windows のセクションを参考に MSYS2 と GTK をインストールしました。

MSYS2 のインストール

MSYS2 からインストーラー msys2-x86_64-20200720.exe をダウンロードして実行。 インストール先はデフォルトの C:\msys64 です(上記のページの画面イメージでは C:\msys32 となっていますが)。

セットアップ後 MSYS2 の端末を起動して以下のコマンドでパッケージデータベースとコアシステムをアップデートします。

pacman -Syu

その後 MSYS2 の端末を開きなおして以下のコマンドで残りのパッケージをアップデートします。

pacman -Su

(横道) pacman コマンドについては pacman - ArchWiki が詳しいです。

ローカルにインストール済みのパッケージ名をキーワード検索するときは

pacman -Qs キーワード

です。

Windows Terminal に MSYS2 の端末を開く設定追加

Windows Terminalでもmsys2を使おう - Qiita を参考に追加しました。

PowerShell で以下のコマンドを実行して GUID を生成します。

[guid]::NewGuid()

Windows Terminal の設定メニューで表示された設定の "profiles""list" に以下のような設定を追加しました (私はフォントは "profiles""defaults" のほうに共通で設定しています)。

{
// …(略)…
    "profiles":
    {
        "defaults":
        {
            // Put settings here that you want to apply to all profiles.
            "fontFace": "Cica",
            "fontSize": 16,
            "cursorColor": "#FFFFFF",
            "cursorShape": "filledBox",
            "colorScheme": "Tango Dark"
        },
        "list":
        [
// …(略)…
            {
                "guid" : "{8573f40a-ca5e-4739-b9a6-fb318315836d}",
                "closeOnExit" : true,
                "commandline" : "cmd.exe /c \"set MSYSTEM=MINGW64&& set MSYS=winsymlinks:nativestrict&& C:/msys64/usr/bin/bash.exe --login\"",
                "historySize" : 9001,
                "icon": "C:/msys64/msys2.ico",
                "name" : "MSYS2",
                "startingDirectory" : "C:/msys64/home/hnakamur"
            }
// …(略)…

startingDirectory はユーザー名に合わせて調整します。

GTK for Windows のセットアップ

The GTK Project - A free and open-source cross-platform widget toolkit によると MSYS2 と gvsbuild の 2 種類のインストール方法があります。

今回は MSYS2 のほうを試しています。 MSYS2 は上記でインストールしたので Using GTK from MSYS2 packages の手順で GTK をインストールします。

MSYS2 の端末で以下のコマンドを実行して GTK3 と依存パッケージをインストールします。

pacman -S mingw-w64-x86_64-gtk3

Glade もインストールしました。

pacman -S mingw-w64-x86_64-glade

Building and distributing your application は読みましたが、とりあえずスキップしました。

また、 GTK を自作アプリケーションに同梱して配布する場合は Legal notes on distributing GTK with your application をよく読む必要があります。これもとりあえずスキップ。

C 言語での GTK のサンプルを動かしてみる

Getting Started を参考にして試しました。

このページに書かれている内容で hello-world-gtk.c というファイルを作成し、以下のコマンドでビルドしました。

gcc `pkg-config --cflags gtk+-3.0` -o hello-world-gtk hello-world-gtk.c `pkg-config --libs gtk+-3.0`

しかし pkg-config で glib-2.0 が見つからないという趣旨のエラーが出ました。

pkg-config fails to find cairo.pc and glib-2.0.pc on MSYS2 Win64 · Issue #23 · rust-lang/pkg-config-rsコメント を見て以下のコマンドを実行すると解消しました。

pacman -S mingw-w64-x86_64-pkg-config

今気づきましたが Requirements の “Using the MSYS2 MinGW shell” の項に以下のコマンドで pkg-config のセットアップができる旨書いてありました。

pacman -S mingw-w64-x86_64-toolchain

あと、状況を忘れてしまいましたが windows - Step by step instruction to install Rust and Cargo for mingw with Msys2? - Stack Overflow も参考にして以下の設定を行いました。

MSYS2 の端末で ~/.bashrc に以下の行を追加。

export PATH=/c/Users/hnakamur/.cargo/bin:$PATH

C:\Users\hnakamur\.cargo\config (ユーザー名は適宜変更) を以下の内容で作成。

[target.x86_64-pc-windows-gnu]
linker = "C:\\msys64\\usr\\bin\\gcc.exe"
ar = "C:\\msys64\\usr\\bin\\ar.exe"

Rust での GTK のサンプルを動かしてみる

上記の続きで以下のように rustup のツールチェインをインストールして、デフォルトにしまいsた。

rustup toolchain install stable-x86_64-pc-windows-gnu
rustup default stable-x86_64-pc-windows-gnu

その後 Gtk-rs のサンプルを動かしてみました。

さらに Box と TextView も追加してみましたが、 IME で日本語入力・編集も問題なく行えました。

結果は hnakamur/gtk-rs-example に置きました。

Ubuntu 20.04 LTS

Requirements に沿って必要なパッケージをインストール。

sudo apt install libgtk-3-dev

あとは hnakamur/gtk-rs-examplegit clone してきて cargo run で試しました。

こちらも日本語入力も大丈夫でした。