Vala プログラミング

WebGPU プログラミング

おなが@京都先端科学大

Vala言語とOpenGL (4)

f:id:onagat12:20150302021004p:plain

GUIをGladeで作成しました。
Gladeでの作成画面

f:id:onagat12:20150302020143p:plain

adjustmentの設定画面

f:id:onagat12:20150302020220p:plain

Scale上のスライダの表示方法は、下に書いてあります。

 

gtkcluttergl4.vala
using Gtk;
using GtkClutter;
using Clutter;

public class Main : Object
{
    const string UI_FILE = "mainwindow.ui";
    private Builder builder;

    private Clutter.Actor coglbox;
    private static float alpha;

    public Main ()
    {
        try
        {
             builder = new Builder ();
             builder.add_from_file (UI_FILE);
             builder.connect_signals (this);

             CreateUI ();

             var window = builder.get_object ("window1") as Gtk.Window;
             window.title = "GtkClutterGL4";
             window.destroy.connect (Gtk.main_quit);
             window.show_all ();
        }
        catch (Error e) {
            stderr.printf ("Could not load UI: %s\n", e.message);
        }
    }

    private void CreateUI ()
    {
          var box = builder.get_object ("box1") as Gtk.Box;
           var widget = new Embed ();
           box.pack_start (widget, true, true, 0);

           var stage = widget.get_stage ();
           stage.width = stage.height = 400;
           stage.background_color = Clutter.Color () { alpha = 255 };

           coglbox = new Clutter.Actor ();
           stage.add_actor (coglbox);
           coglbox.paint.connect (paint_cb);

           var button = builder.get_object ("button1") as Button;
           button.clicked.connect (Gtk.main_quit);

           var scale = builder.get_object ("scale1") as Scale;
           scale.value_changed.connect *1;
                alpha = (float)scale.get_value ();
                coglbox.queue_redraw ();
           });
     }

    private void paint_cb ()
    {
          //stdout.printf("paint-cb \n");
         Cogl.TextureVertex vertices1[3];

         Cogl.push_matrix ();
         Cogl.translate (200, 200, 0);
         Cogl.rotate (alpha, 0, 0, 1);

         vertices1[0].x = 0;
         vertices1[0].y = -150;
         vertices1[0].z = 0;
         vertices1[0].color.set_from_4f (1.0f, 0.0f, 0.0f, 1.0f);

         vertices1[1].x = -150;
         vertices1[1].y = 150;
         vertices1[1].z = 0;
         vertices1[1].color.set_from_4f (0.0f, 1.0f, 0.0f, 1.0f);

         vertices1[2].x = 150;
         vertices1[2].y = 150;
         vertices1[2].z = 0;
         vertices1[2].color.set_from_4f (0.0f, 0.0f, 1.0f, 1.0f);

        Cogl.polygon (vertices1, true);

        Cogl.pop_matrix();
    }
}

void main (string[] args)
{
     GtkClutter.init (ref args);

     new Main ();

     Gtk.main ();
}
ビルド
valac --pkg gtk+-3.0 --pkg clutter-gtk-1.0 gtkcluttergl4.vala

Scaleのスライダの表示
スライダを表示する方法は、gladeで設定する方法とプログラム内で設定する
方法があります。
1 galdeで設定
 glade上でスライダを表示するには、Scaleにアジャストメントを設定する。
 設定の方法
    1    Scaleを選択。
    2 Scaleプロパティ内のアジャストメントの右側のアイコンをクリック。
    3 アジャストメントの選択ダイアログで、新規(New)をクリック。
    4 ajdjustment1オブジェクトが生成される。
    5 ajdjustment1を選択し、必要な設定をする。

2 プログラム内で設定
 gladeのuiファイルからScaleを取り出し、set_rangeメソッドで設定する。
 例 var scale = builder.get_object ("scale1") as Scale;
            scale.set_range (0, 100);

 

注意 このブログでは、引数なしの無名関数の表示が変になります。注釈のようになっています。

*1:) => {
                stdout.printf ("%f\n", scale.get_value (