tProvide GTK+3-style box/separator classes - vaccinewars - be a doctor and try to vaccinate the world
 (HTM) git clone git://src.adamsgaard.dk/vaccinewars
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 1f6a577947dc2b283f22d04d6e7f9a59d0d1b9d2
 (DIR) parent fb3eef6a4433c490dd8aaa0805a5bc7aac5cd001
 (HTM) Author: Ben Webb <ben@salilab.org>
       Date:   Thu, 26 Nov 2020 00:38:57 -0800
       
       Provide GTK+3-style box/separator classes
       
       Replace hbox/vbox with box(orientation), to
       match GTK+3, and similarly for separator classes.
       
       Diffstat:
         M src/gtkport/gtkenums.h              |       6 ++++++
         M src/gtkport/gtkport.c               |      63 ++++++++++++++++---------------
         M src/gtkport/gtkport.h               |      16 ++++++----------
       
       3 files changed, 45 insertions(+), 40 deletions(-)
       ---
 (DIR) diff --git a/src/gtkport/gtkenums.h b/src/gtkport/gtkenums.h
       t@@ -121,6 +121,12 @@ typedef enum
          GTK_WIN_POS_CENTER_ON_PARENT
        } GtkWindowPosition;
        
       +typedef enum
       +{
       +  GTK_ORIENTATION_HORIZONTAL,
       +  GTK_ORIENTATION_VERTICAL
       +} GtkOrientation;
       +
        enum
        {
          G_TYPE_STRING,
 (DIR) diff --git a/src/gtkport/gtkport.c b/src/gtkport/gtkport.c
       t@@ -1919,26 +1919,24 @@ GtkWidget *gtk_url_new(const gchar *text, const gchar *target,
          return GTK_WIDGET(url);
        }
        
       -GtkWidget *gtk_hbox_new(gboolean homogeneous, gint spacing)
       +GtkWidget *gtk_box_new(GtkOrientation orientation, gint spacing)
        {
       -  GtkBox *hbox;
       +  GtkBox *box;
        
       -  hbox = GTK_BOX(GtkNewObject(&GtkHBoxClass));
       +  if (orientation == GTK_ORIENTATION_HORIZONTAL) {
       +    box = GTK_BOX(GtkNewObject(&GtkHBoxClass));
       +  } else {
       +    box = GTK_BOX(GtkNewObject(&GtkVBoxClass));
       +  }
        
       -  hbox->spacing = spacing;
       -  hbox->homogeneous = homogeneous;
       -  return GTK_WIDGET(hbox);
       +  box->spacing = spacing;
       +  box->homogeneous = FALSE;
       +  return GTK_WIDGET(box);
        }
        
       -GtkWidget *gtk_vbox_new(gboolean homogeneous, gint spacing)
       +void gtk_box_set_homogeneous(GtkBox *box, gboolean homogenenous)
        {
       -  GtkBox *vbox;
       -
       -  vbox = GTK_BOX(GtkNewObject(&GtkVBoxClass));
       -
       -  vbox->spacing = spacing;
       -  vbox->homogeneous = homogeneous;
       -  return GTK_WIDGET(vbox);
       +  box->homogeneous = homogeneous;
        }
        
        GtkWidget *gtk_frame_new(const gchar *text)
       t@@ -4251,14 +4249,13 @@ void gtk_spin_button_update(GtkSpinButton *spin_button)
        {
        }
        
       -GtkWidget *gtk_hseparator_new()
       -{
       -  return GTK_WIDGET(GtkNewObject(&GtkHSeparatorClass));
       -}
       -
       -GtkWidget *gtk_vseparator_new()
       +GtkWidget *gtk_separator_new(GtkOrientation orientation)
        {
       -  return GTK_WIDGET(GtkNewObject(&GtkVSeparatorClass));
       +  if (orientation == GTK_ORIENTATION_HORIZONTAL) {
       +    return GTK_WIDGET(GtkNewObject(&GtkHSeparatorClass));
       +  } else {
       +    return GTK_WIDGET(GtkNewObject(&GtkVSeparatorClass));
       +  }
        }
        
        void gtk_separator_size_request(GtkWidget *widget,
       t@@ -5124,21 +5121,27 @@ void gtk_widget_set_style(GtkWidget *widget, GtkStyle *style)
        {
        }
        
       -static gint hbbox_spacing = 0;
       -
       -GtkWidget *gtk_hbutton_box_new()
       +GtkWidget *gtk_button_box_new(GtkOrientation orientation)
        {
       -  GtkWidget *hbbox, *spacer;
       +  GtkWidget *bbox, *spacer;
        
       -  hbbox = gtk_hbox_new(TRUE, hbbox_spacing);
       -  spacer = gtk_label_new("");
       -  gtk_box_pack_start(GTK_BOX(hbbox), spacer, TRUE, TRUE, 0);
       +  if (orientation == GTK_ORIENTATION_HORIZONTAL) {
       +    bbox = gtk_box_new(orientation, 0);
       +  } else {
       +    bbox = gtk_box_new(orientation, 5);
       +  }
       +  gtk_box_set_homogeneous(GTK_BOX(bbox), TRUE);
       +  if (orientation == GTK_ORIENTATION_HORIZONTAL) {
       +    /* Add a spacer so that all hboxes are right-aligned */
       +    spacer = gtk_label_new("");
       +    gtk_box_pack_start(GTK_BOX(bbox), spacer, TRUE, TRUE, 0);
       +  } else {
          return hbbox;
        }
        
       -void gtk_hbutton_box_set_spacing_default(gint spacing)
       +void gtk_box_set_spacing(GtkBox *box, gint spacing)
        {
       -  hbbox_spacing = spacing;
       +  box->spacing = spacing;
        }
        
        /*
 (DIR) diff --git a/src/gtkport/gtkport.h b/src/gtkport/gtkport.h
       t@@ -361,8 +361,8 @@ void gtk_container_set_border_width(GtkContainer *container,
                                            guint border_width);
        GtkWidget *gtk_button_new_with_label(const gchar *label);
        GtkWidget *gtk_label_new(const gchar *text);
       -GtkWidget *gtk_hbox_new(gboolean homogeneous, gint spacing);
       -GtkWidget *gtk_vbox_new(gboolean homogeneous, gint spacing);
       +GtkWidget *gtk_box_new(GtkOrientation orientation, gint spacing);
       +void gtk_box_set_homogeneous(GtkBox *box, gboolean homogenenous);
        GtkWidget *gtk_check_button_new_with_label(const gchar *label);
        GtkWidget *gtk_radio_button_new_with_label(GSList *group,
                                                   const gchar *label);
       t@@ -460,8 +460,7 @@ guint dp_g_io_add_watch(GIOChannel *channel, GIOCondition condition,
        guint dp_g_timeout_add(guint interval, GSourceFunc function, gpointer data);
        gboolean dp_g_source_remove(guint tag);
        
       -GtkWidget *gtk_hseparator_new();
       -GtkWidget *gtk_vseparator_new();
       +GtkWidget *gtk_separator_new(GtkOrientation orientation);
        void gtk_object_set_data(GtkObject *object, const gchar *key,
                                 gpointer data);
        gpointer gtk_object_get_data(GtkObject *object, const gchar *key);
       t@@ -493,12 +492,9 @@ void gtk_paned_pack2(GtkPaned *paned, GtkWidget *child, gboolean resize,
        void gtk_paned_set_position(GtkPaned *paned, gint position);
        
        #define gtk_container_border_width gtk_container_set_border_width
       -GtkWidget *gtk_hbutton_box_new();
       -void gtk_hbutton_box_set_spacing_default(gint spacing);
       -#define gtk_vbutton_box_new() gtk_vbox_new(TRUE, 5)
       -#define gtk_hbutton_box_set_layout_default(layout) {}
       -#define gtk_vbutton_box_set_spacing_default(spacing) {}
       -#define gtk_vbutton_box_set_layout_default(layout) {}
       +GtkWidget *gtk_button_box_new(GtkOrientation orientation);
       +void gtk_box_set_spacing(GtkBox *box, gint spacing);
       +#define gtk_button_box_set_layout(box, layout) {}
        GtkWidget *gtk_option_menu_new(void);
        GtkWidget *gtk_option_menu_get_menu(GtkOptionMenu *option_menu);
        void gtk_option_menu_set_menu(GtkOptionMenu *option_menu, GtkWidget *menu);