![]() |
![]() |
![]() |
Frameの枠
フレーム・ウィジェットの枠は4種類有る。
・Shadow In
・Shadow Out
・Shadow Etched In
・Shadow Etched Out
である。
|
#include <gtk/gtk.h> int main( int argc, char *argv[]) { GtkWidget *window; GtkWidget *grid; GtkWidget *frame1; GtkWidget *frame2; GtkWidget *frame3; GtkWidget *frame4; GtkWidget *label1; GtkWidget *label2; GtkWidget *label3; GtkWidget *label4; gtk_init(&argc, &argv); window = gtk_window_new(GTK_WINDOW_TOPLEVEL); //ウィンドウを画面の中央に配置
gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);gtk_widget_set_size_request(window, 300, 200); gtk_window_set_title(GTK_WINDOW(window), "GtkFrame"); gtk_container_set_border_width(GTK_CONTAINER(window), 10); grid = gtk_grid_new(); gtk_container_add(GTK_CONTAINER(window), grid); label1 = gtk_label_new("Label1"); label2 = gtk_label_new("Label2"); label3 = gtk_label_new("Label3"); label4 = gtk_label_new("Label4"); frame1 = gtk_frame_new("Shadow In"); gtk_frame_set_shadow_type(GTK_FRAME(frame1), GTK_SHADOW_IN); gtk_grid_attach(GTK_GRID(grid), frame1, 0, 0, 2, 2); gtk_container_add(GTK_CONTAINER(frame1), label1); frame2 = gtk_frame_new("Shadow Out"); gtk_frame_set_shadow_type(GTK_FRAME(frame2), GTK_SHADOW_OUT); gtk_grid_attach(GTK_GRID(grid), frame2, 3, 0, 2, 2); gtk_container_add(GTK_CONTAINER(frame2), label2); frame3 = gtk_frame_new("Shadow Etched In"); gtk_frame_set_shadow_type(GTK_FRAME(frame3), GTK_SHADOW_ETCHED_IN); gtk_grid_attach(GTK_GRID(grid), frame3, 0, 3, 2, 2); gtk_container_add(GTK_CONTAINER(frame3), label3); frame4 = gtk_frame_new("Shadow Etched Out"); gtk_frame_set_shadow_type(GTK_FRAME(frame4), GTK_SHADOW_ETCHED_OUT); gtk_grid_attach(GTK_GRID(grid), frame4, 3, 3, 2, 2); gtk_container_add(GTK_CONTAINER(frame4), label4); g_signal_connect_swapped(G_OBJECT(window), "destroy", G_CALLBACK(gtk_main_quit), G_OBJECT(window)); gtk_widget_show_all(window); gtk_main(); return 0; } |
格好良く立体的になるはずが・・・Ubuntuでは大差無かった。 gtk_window_set_positionの第2引数をGTK_WIN_POS_CENTERにする事で、 起動時にウィンドウがモニター中央に現れるようになった。 この設定は5種類用意されているらしい。
| ・GTK_WIN_POS_NONE | :設定無し |
| ・GTK_WIN_POS_CENTER | :画面の中央に表示 |
| ・GTK_WIN_POS_MOUSE | :マウスのアイコンの位置に表示 |
| ・GTK_WIN_POS_CENTER_ALWAYS | :ウィンドウのサイズ変更などでも、中央表示をキープ |
| ・GTK_WIN_POS_CENTER_ON_PARENT | :メイン・ウィンドウの中央に表示 |
OSが変われば、表示も変わると思われる。
ラベル
ラベルの表示にも少し触れてみる。
|
#include <gtk/gtk.h> int main( int argc, char *argv[]) { GtkWidget *window; GtkWidget *label; gtk_init(&argc, &argv); window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); gtk_window_set_title(GTK_WINDOW(window), "GtkLabel"); char *str = "<b>Bold:</b>:normal\n\ this program is the test of Label widget"; label = gtk_label_new(NULL); //マークアップ言語の分析
gtk_label_set_markup(GTK_LABEL(label), str); //ラベルの文字を中央揃えに設定する
gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_CENTER);gtk_container_add(GTK_CONTAINER(window), label); gtk_widget_show(label); gtk_window_set_default_size(GTK_WINDOW(window), 300, 200); g_signal_connect(window, "destroy", G_CALLBACK (gtk_main_quit), NULL); gtk_widget_show(window); gtk_main(); return 0; } |
strに格納した文字列を表示してみる。
太字はHTMLタグのように<b>〜</b>で囲むだけ。
改行は\n\を使う。
gtk_label_set_justifyで文字を左右中央に揃えられる。
| GTK_JUSTIFY_LEFT | :左揃え(デフォルト) |
| GTK_JUSTIFY_RIGHT | :右揃え |
| GTK_JUSTIFY_CENTER | :中央揃え |
これで、新しいダイアログでメッセージを表示させる事ができる。
GDKで文字を表示
Labelに触れたので、再びGDKのCairoにも触れてみたい。
|
#include <gtk/gtk.h> #include <gdk/gdk.h> GtkWidget *window; static gboolean cb_expose_event(GtkWidget *widget, cairo_t *cr, gpointer data) { cr = gdk_cairo_create(gtk_widget_get_window(widget)); cairo_set_source_rgb(cr, 0.1, 0.1, 0.1); //フォントを指定する
cairo_select_font_face(cr, "TakaoMincho", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_BOLD); //フォントサイズを指定する
cairo_set_font_size(cr, 13.0); //文字の位置(x,y)を指定する
cairo_move_to(cr, 20, 30); //表示したい文字を指定する(文字コードはUTF-8)
cairo_show_text(cr, "Label1"); //複数文字列を表示させる
cairo_move_to(cr, 20, 60);cairo_show_text(cr, "Label2"); cairo_destroy(cr); return FALSE; } int main(int argc, char *argv[]) { GtkWidget *window; gtk_init(&argc, &argv); window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(window), "Label"); gtk_widget_set_size_request(window, 300,200); gtk_widget_set_app_paintable(window, TRUE); gtk_widget_add_events (window, GDK_BUTTON_PRESS_MASK); g_signal_connect(G_OBJECT(window), "draw", G_CALLBACK(cb_expose_event), NULL); g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL); gtk_widget_show_all(window); gtk_main(); return 0; } |
GDKを使うと、座標位置とサイズを指定できるので便利である。 次章では、Notebookウィジェットを使ってみたい。