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);