ui/gtk/container.c

changeset 107
9aff1dc3990d
parent 100
d276306d801f
child 109
b9808f916687
--- a/ui/gtk/container.c	Sat Jan 23 20:47:07 2016 +0100
+++ b/ui/gtk/container.c	Sat Jan 23 23:44:41 2016 +0100
@@ -33,19 +33,19 @@
 #include "../common/context.h"
 #include "../common/object.h"
 
-GtkWidget* ui_gtk_vbox_new() {
+GtkWidget* ui_gtk_vbox_new(int spacing) {
 #ifdef UI_GTK3
-    return gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
+    return gtk_box_new(GTK_ORIENTATION_VERTICAL, spacing);
 #else
-    return gtk_vbox_new(FALSE, 0);
+    return gtk_vbox_new(FALSE, spacing);
 #endif
 }
 
-GtkWidget* ui_gtk_hbox_new() {
+GtkWidget* ui_gtk_hbox_new(int spacing) {
 #ifdef UI_GTK3
-    return gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
+    return gtk_box_new(GTK_ORIENTATION_HORIZONTAL, spacing);
 #else
-    return gtk_hbox_new(FALSE, 0);
+    return gtk_hbox_new(FALSE, spacing);
 #endif
 }
 
@@ -203,29 +203,60 @@
 
 
 UIWIDGET ui_vbox(UiObject *obj) {
+    return ui_vbox_sp(obj, 0, 0);
+}
+
+UIWIDGET ui_hbox(UiObject *obj) {
+    return ui_hbox_sp(obj, 0, 0);
+}
+
+static GtkWidget* box_set_margin(GtkWidget *box, int margin) {
+    GtkWidget *ret = box;
+#ifdef UI_GTK3
+#if GTK_MAJOR_VERSION == 3 && GTK_MINOR_VERSION >= 12
+    gtk_widget_set_margin_start(box, margin);
+    gtk_widget_set_margin_end(box, margin);
+#else
+    gtk_widget_set_margin_left(box, margin);
+    gtk_widget_set_margin_right(box, margin);
+#endif
+    gtk_widget_set_margin_top(box, margin);
+    gtk_widget_set_margin_bottom(box, margin);
+#elif defined(UI_GTK2)
+    GtkWidget *a = gtk_alignment_new(0.5, 0.5, 1, 1);
+    gtk_alignment_set_padding(GTK_ALIGNMENT(a), margin, margin, margin, margin);
+    gtk_container_add(GTK_CONTAINER(a), box);
+    ret = a;
+#endif
+    return ret;
+}
+
+UIWIDGET ui_vbox_sp(UiObject *obj, int margin, int spacing) {
     UiContainer *ct = uic_get_current_container(obj);
     
-    GtkWidget *vbox = ui_gtk_vbox_new();
-    ct->add(ct, vbox, TRUE);
+    GtkWidget *vbox = ui_gtk_vbox_new(spacing);
+    GtkWidget *widget = margin > 0 ? box_set_margin(vbox, margin) : vbox;
+    ct->add(ct, widget, TRUE);
     
     UiObject *newobj = uic_object_new(obj, vbox);
     newobj->container = ui_box_container(obj, vbox);
     uic_obj_add(obj, newobj);
     
-    return vbox;
+    return widget;
 }
 
-UIWIDGET ui_hbox(UiObject *obj) {
+UIWIDGET ui_hbox_sp(UiObject *obj, int margin, int spacing) {
     UiContainer *ct = uic_get_current_container(obj);
     
-    GtkWidget *hbox = ui_gtk_hbox_new();
-    ct->add(ct, hbox, TRUE);
+    GtkWidget *hbox = ui_gtk_hbox_new(spacing);
+    GtkWidget *widget = margin > 0 ? box_set_margin(hbox, margin) : hbox;
+    ct->add(ct, widget, TRUE);
     
     UiObject *newobj = uic_object_new(obj, hbox);
     newobj->container = ui_box_container(obj, hbox);
     uic_obj_add(obj, newobj);
     
-    return hbox;
+    return widget;
 }
 
 UIWIDGET ui_grid(UiObject *obj) {
@@ -310,7 +341,7 @@
 #endif
     gtk_paned_set_position(GTK_PANED(paned), 200);
     
-    GtkWidget *sidebar = ui_gtk_vbox_new();
+    GtkWidget *sidebar = ui_gtk_vbox_new(0);
     gtk_paned_pack1(GTK_PANED(paned), sidebar, TRUE, FALSE);
     
     UiObject *left = uic_object_new(obj, sidebar);

mercurial