初めてのGtk# (Mono Win32編)

http://d.hatena.ne.jp/akiramei/20050117#p1の続き。

Win32版のGtk#をインストールしてもmonoのGACには登録されないので、手動で登録する必要があります。(注意:Gtk#1.9.2からデフォルトのインストールパスがC:\GTK\2.4に変わったので、そっちにあわせています)

#!/usr/bin/sh

cd C:/GTK/2.4/lib/gtk-sharp
gacutil -i atk-sharp.dll
gacutil -i art-sharp.dll
gacutil -i gdk-sharp.dll
gacutil -i glade-sharp.dll
gacutil -i glib-sharp.dll
gacutil -i gtk-sharp.dll
gacutil -i pango-sharp.dll
gacutil -i rsvg-sharp.dll
cd C:/GTK/2.4/lib/gecko-sharp
gacutil -i gecko-sharp.dll

cd C:/GTK/2.4/lib/gtk-sharp-2.0
gacutil -i atk-sharp.dll
gacutil -i art-sharp.dll
gacutil -i gdk-sharp.dll
gacutil -i glade-sharp.dll
gacutil -i glib-sharp.dll
gacutil -i gtk-sharp.dll
gacutil -i gtk-dotnet.dll
gacutil -i pango-sharp.dll
gacutil -i rsvg-sharp.dll
cd C:/GTK/2.4/lib/gecko-sharp-2.0
gacutil -i gecko-sharp.dll

これをgtk-sharp_install.shなどの名前をつけて保存します。で、

$ chmod +x gtk-sharp_install.sh
$ ./gtk-sharp_install.sh

とするとMonoのGACに登録されます。gactuilはMono版でなければならないので注意してください。

これでGtk#を使う準備が整ったので、
Video demonstrating how to create a "Hello World" application using Gtk# and glade を見ればOKです。(デモが終わるとIEがクラッシュするのはウチだけでしょうか・・・)

ただし、2点だけ上記デモを置き換える必要があります。

・最初のInterface Designerメニューからの起動は\bin\glade-2.exeをダブルクリックとしてください。

コンパイルオプションの変更

$ mcs demo.cs -pkg:gtk-sharp -pkg:glade-sharp

$ mcs demo.cs -pkg:gtk-sharp-2.0 -pkg:glade-sharp-2.0

にします。これはWin32版のgtk-sharp.pc, glade-sharp.pcのprefixがC:/Targetになっているためです。これらのファイルはlib\pkgconfigにあるので、ファイルを修正しても構いません。


デモのソースコード

using System;
using Gtk;
using Glade;

class DemoWindow {

    [Widget] Gtk.Entry entry1;
    [Widget] Gtk.Label label1;

    public void on_button1_clicked (object sender, EventArgs e) 
    {
        Console.WriteLine ("Clicked.");

        Console.WriteLine ("Entry contains: " + entry1.Text);

        label1.Text = "Hello!";
    }

    public DemoWindow () 
    {
        Glade.XML gui = new Glade.XML ("./demo.glade", "window1", "");

        gui.Autoconnect (this);
    }
}

class GtkSharpDemo {

    static void Main () 
    {
        Gtk.Application.Init ();

        DemoWindow dw = new DemoWindow ();

        Gtk.Application.Run ();
    }
}