GtkFrame and GtkAspectFrame

only for RuBoard - do not distribute or recompile

GtkFrame and GtkAspectFrame

The GtkFrame and GtkAspectFrame widgets are, like many other widgets, pretty much what you expect. The GtkFrame is a container object into which you can place other objects, and the GtkAspectFrame widget allows you to maintain the aspect of the child widget whenever the parent window is resized. Figure 3.3 shows Listing 3.3 in action.

Figure 3.3. GtkFrame and GtkAspectFrame widgets demo program.
graphics/03fig03.gif
Listing 3.3 Demo of the Frame and Aspect Frame Widgets: GtkFrame and GtkAspectFrame
 #include <gtk/gtk.h>  GtkWidget *frm_frames;  GtkWidget *left_frame;  GtkWidget *right_aspect_frame;  void destroy_main();  void cmd_left_clicked();  void cmd_right_clicked();  void cmd_shadow_none_clicked();  void cmd_shadow_in_clicked();  void cmd_shadow_out_clicked();  void cmd_shadow_etched_in_clicked();  void cmd_shadow_etched_out_clicked();  gint main(gint argc, gchar *argv[])  {    GtkWidget *hbox_main;     GtkWidget *vbox_left;     GtkWidget *vbox_right;     GtkWidget *vbtnbox_in_frame;     GtkWidget *cmd_left, *cmd_right;     GtkWidget *lbl;     GtkWidget *cmd_shadow_none;     GtkWidget *cmd_shadow_in;     GtkWidget *cmd_shadow_out;     GtkWidget *cmd_shadow_etched_in;     GtkWidget *cmd_shadow_etched_out;     GtkWidget *drawing_area_right;     gtk_init(&argc, &argv);     frm_frames = gtk_window_new(GTK_WINDOW_TOPLEVEL);     gtk_window_set_title(GTK_WINDOW(frm_frames), "Frames Demo");     gtk_signal_connect(GTK_OBJECT(frm_frames),          "destroy",          GTK_SIGNAL_FUNC(destroy_main),          NULL);  /* As before, this demo uses a layout where the frame demo   * is on the left and the aspect frame is on the right. To do   * this, this program uses a horizontal box that's separated into   * left and right vertical boxes.   */  hbox_main = gtk_hbox_new(TRUE, 0);     vbox_left = gtk_vbox_new(TRUE, 0);     vbox_right = gtk_vbox_new(TRUE, 5);     vbtnbox_in_frame = gtk_vbutton_box_new();     gtk_vbutton_box_set_layout_default(GTK_BUTTONBOX_SPREAD);     left_frame = gtk_frame_new("This is a Frame");     gtk_frame_set_shadow_type(GTK_FRAME(left_frame), GTK_SHADOW_NONE);     cmd_left = gtk_button_new_with_label("Move Label Left");     gtk_signal_connect(GTK_OBJECT(cmd_left),                        "clicked",                          GTK_SIGNAL_FUNC(cmd_left_clicked),                        NULL);     cmd_right = gtk_button_new_with_label("Move Label Right");     gtk_signal_connect(GTK_OBJECT(cmd_right),                        "clicked",                        GTK_SIGNAL_FUNC(cmd_right_clicked),                        NULL);     cmd_shadow_none = gtk_button_new_with_label("Set Shadow None");     gtk_signal_connect(GTK_OBJECT(cmd_shadow_none),                        "clicked",                        GTK_SIGNAL_FUNC(cmd_shadow_none_clicked),                        NULL);     cmd_shadow_in = gtk_button_new_with_label("Set Shadow In");     gtk_signal_connect(GTK_OBJECT(cmd_shadow_in),                        "clicked",                        GTK_SIGNAL_FUNC(cmd_shadow_in_clicked),                        NULL);     cmd_shadow_out = gtk_button_new_with_label("Set Shadow Out");     gtk_signal_connect(GTK_OBJECT(cmd_shadow_out),                        "clicked",                        GTK_SIGNAL_FUNC(cmd_shadow_out_clicked),                        NULL);     cmd_shadow_etched_in = gtk_button_new_with_label("Set Shadow Etched In");     gtk_signal_connect(GTK_OBJECT(cmd_shadow_etched_in),                        "clicked",                        GTK_SIGNAL_FUNC(cmd_shadow_etched_in_clicked),                        NULL);     cmd_shadow_etched_out = gtk_button_new_with_label("Set Shadow Etched Out");     gtk_signal_connect(GTK_OBJECT(cmd_shadow_etched_out),                        "clicked",                        GTK_SIGNAL_FUNC(cmd_shadow_etched_out_clicked),                        NULL);     gtk_box_pack_start(GTK_BOX(vbox_left), left_frame, TRUE, TRUE, 5);     gtk_container_add(GTK_CONTAINER(left_frame), vbtnbox_in_frame);     gtk_container_add(GTK_CONTAINER(vbtnbox_in_frame), cmd_left);     gtk_container_add(GTK_CONTAINER(vbtnbox_in_frame), cmd_right);     gtk_container_add(GTK_CONTAINER(vbtnbox_in_frame), cmd_shadow_none);     gtk_container_add(GTK_CONTAINER(vbtnbox_in_frame), cmd_shadow_in);     gtk_container_add(GTK_CONTAINER(vbtnbox_in_frame), cmd_shadow_out);     gtk_container_add(GTK_CONTAINER(vbtnbox_in_frame), cmd_shadow_etched_in);     gtk_container_add(GTK_CONTAINER(vbtnbox_in_frame), cmd_shadow_etched_out);  /* Now set up the aspect frame on the right side.   */  right_aspect_frame = gtk_aspect_frame_new("This is an aspect frame.",                                    0.5, 0.5, 3, FALSE);  /* When running, the aspect frame keeps a ratio of 3 to 1.   *   * The parameters to this call are:   *  label  (gchar)  - The label to go on the frame   *  xalign (gfloat)  - Alignment specification   *  yalign (gfloat)  - Alignment specification   *  ratio  (gfloat)  - The ratio of the child widget   *  obey_child (gint)  - If true, override child widget aspect   */  lbl = gtk_label_new("Notice that it maintains\nit's ratio when you resize\nthe  parent window.");     drawing_area_right = gtk_drawing_area_new();     gtk_container_add(GTK_CONTAINER(right_aspect_frame), drawing_area_right);     gtk_box_pack_start(GTK_BOX(vbox_right), right_aspect_frame, TRUE, TRUE, 5);     gtk_box_pack_start(GTK_BOX(vbox_right), lbl, TRUE, TRUE, 5);  /* Note that an aspect frame widget does not show until it has   * a child widget to show.   */  gtk_box_pack_start(GTK_BOX(hbox_main), vbox_left, TRUE, TRUE, 5);     gtk_box_pack_start(GTK_BOX(hbox_main), vbox_right, TRUE, TRUE, 5);     gtk_container_add(GTK_CONTAINER(frm_frames), hbox_main);     gtk_widget_show_all (frm_frames);     gtk_main ();     return 0;  }  void destroy_main()  {   gtk_main_quit(); }  void cmd_left_clicked()  {  /* In the following  *_set_label_*  call, the parameters are   *   -the target frame   *   -the x-align value, from 0 to 1 as a gfloat   *   -not used (it is listed as the y-align value in the prototype)   */  gtk_frame_set_label_align(GTK_FRAME(left_frame), 0, 0);  }  void cmd_right_clicked()  {      gtk_frame_set_label_align(GTK_FRAME(left_frame), 1, 0);  }  void cmd_shadow_none_clicked()  {    gtk_frame_set_shadow_type(GTK_FRAME(left_frame), GTK_SHADOW_NONE);  }  void cmd_shadow_in_clicked()  {    gtk_frame_set_shadow_type(GTK_FRAME(left_frame), GTK_SHADOW_IN);  }  void cmd_shadow_out_clicked()  {    gtk_frame_set_shadow_type(GTK_FRAME(left_frame), GTK_SHADOW_OUT);  }  void cmd_shadow_etched_in_clicked()  {    gtk_frame_set_shadow_type(GTK_FRAME(left_frame), GTK_SHADOW_ETCHED_IN);  }  void cmd_shadow_etched_out_clicked()  {    gtk_frame_set_shadow_type(GTK_FRAME(left_frame), GTK_SHADOW_ETCHED_OUT);  } 
only for RuBoard - do not distribute or recompile


MySQL Building User Interfaces
MySQL: Building User Interfaces (Landmark)
ISBN: 073571049X
EAN: 2147483647
Year: 2001
Pages: 119

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net