[gtk+/overlay: 23/34] overlay: add GTK_ALIGN_CENTER allocations



commit ceac510d3044e9b4d1b76c8e6af365b0c246e19c
Author: Ignacio Casal Quinteiro <icq gnome org>
Date:   Fri May 27 11:11:46 2011 +0200

    overlay: add GTK_ALIGN_CENTER allocations

 demos/gtk-demo/overlay.c |   55 ++++++++++++++++++++++++++++++++++++++++++++++
 gtk/gtkoverlay.c         |   33 +++++++++++++++++++++++++++
 2 files changed, 88 insertions(+), 0 deletions(-)
---
diff --git a/demos/gtk-demo/overlay.c b/demos/gtk-demo/overlay.c
index 40a71b7..297555e 100644
--- a/demos/gtk-demo/overlay.c
+++ b/demos/gtk-demo/overlay.c
@@ -87,6 +87,61 @@ do_overlay (GtkWidget *do_widget)
       gtk_overlay_add (GTK_OVERLAY (overlay), label);
       gtk_overlay_set_offset (GTK_OVERLAY (overlay), label, 20, 5);
 
+      entry = gtk_entry_new ();
+      gtk_widget_set_halign (entry, GTK_ALIGN_END);
+      gtk_widget_set_valign (entry, GTK_ALIGN_CENTER);
+      gtk_overlay_add (GTK_OVERLAY (overlay), entry);
+
+      label = gtk_label_new ("Hello world");
+      gtk_widget_set_halign (label, GTK_ALIGN_END);
+      gtk_widget_set_valign (label, GTK_ALIGN_CENTER);
+      gtk_overlay_add (GTK_OVERLAY (overlay), label);
+      gtk_overlay_set_offset (GTK_OVERLAY (overlay), label, -20, 0);
+
+      entry = gtk_entry_new ();
+      gtk_widget_set_halign (entry, GTK_ALIGN_START);
+      gtk_widget_set_valign (entry, GTK_ALIGN_CENTER);
+      gtk_overlay_add (GTK_OVERLAY (overlay), entry);
+
+      label = gtk_label_new ("Hello world");
+      gtk_widget_set_halign (label, GTK_ALIGN_START);
+      gtk_widget_set_valign (label, GTK_ALIGN_CENTER);
+      gtk_overlay_add (GTK_OVERLAY (overlay), label);
+      gtk_overlay_set_offset (GTK_OVERLAY (overlay), label, 20, 0);
+
+      entry = gtk_entry_new ();
+      gtk_widget_set_halign (entry, GTK_ALIGN_CENTER);
+      gtk_widget_set_valign (entry, GTK_ALIGN_START);
+      gtk_overlay_add (GTK_OVERLAY (overlay), entry);
+
+      label = gtk_label_new ("Hello world");
+      gtk_widget_set_halign (label, GTK_ALIGN_CENTER);
+      gtk_widget_set_valign (label, GTK_ALIGN_START);
+      gtk_overlay_add (GTK_OVERLAY (overlay), label);
+      gtk_overlay_set_offset (GTK_OVERLAY (overlay), label, 10, 5);
+
+      entry = gtk_entry_new ();
+      gtk_widget_set_halign (entry, GTK_ALIGN_CENTER);
+      gtk_widget_set_valign (entry, GTK_ALIGN_END);
+      gtk_overlay_add (GTK_OVERLAY (overlay), entry);
+
+      label = gtk_label_new ("Hello world");
+      gtk_widget_set_halign (label, GTK_ALIGN_CENTER);
+      gtk_widget_set_valign (label, GTK_ALIGN_END);
+      gtk_overlay_add (GTK_OVERLAY (overlay), label);
+      gtk_overlay_set_offset (GTK_OVERLAY (overlay), label, 10, -5);
+
+      entry = gtk_entry_new ();
+      gtk_widget_set_halign (entry, GTK_ALIGN_CENTER);
+      gtk_widget_set_valign (entry, GTK_ALIGN_CENTER);
+      gtk_overlay_add (GTK_OVERLAY (overlay), entry);
+
+      label = gtk_label_new ("Hello world");
+      gtk_widget_set_halign (label, GTK_ALIGN_CENTER);
+      gtk_widget_set_valign (label, GTK_ALIGN_CENTER);
+      gtk_overlay_add (GTK_OVERLAY (overlay), label);
+      gtk_overlay_set_offset (GTK_OVERLAY (overlay), label, 0, 0);
+
       gtk_widget_show_all (overlay);
     }
 
diff --git a/gtk/gtkoverlay.c b/gtk/gtkoverlay.c
index 3ee41f1..7aacad4 100644
--- a/gtk/gtkoverlay.c
+++ b/gtk/gtkoverlay.c
@@ -290,6 +290,11 @@ gtk_overlay_size_allocate (GtkWidget     *widget,
               alloc.y = MAX (main_alloc.y, main_alloc.height - req.height + y_offset);
               break;
 
+            case GTK_ALIGN_CENTER:
+              alloc.x = MAX (main_alloc.x, main_alloc.width - req.width + x_offset);
+              alloc.y = MAX (main_alloc.y, main_alloc.height / 2 - req.height / 2 + y_offset);
+              break;
+
             default:
               break;
             }
@@ -308,6 +313,34 @@ gtk_overlay_size_allocate (GtkWidget     *widget,
               alloc.y = MAX (main_alloc.y, main_alloc.height - req.height + y_offset);
               break;
 
+            case GTK_ALIGN_CENTER:
+              alloc.x = x_offset;
+              alloc.y = MAX (main_alloc.y, main_alloc.height / 2 - req.height / 2 + y_offset);
+              break;
+
+            default:
+              break;
+            }
+            break;
+
+        case GTK_ALIGN_CENTER:
+          switch (valign)
+            {
+            case GTK_ALIGN_START:
+              alloc.x = MAX (main_alloc.x, main_alloc.width / 2 - req.width / 2 + x_offset);
+              alloc.y = y_offset;
+              break;
+
+            case GTK_ALIGN_END:
+              alloc.x = MAX (main_alloc.x, main_alloc.width / 2 - req.width / 2 + x_offset);
+              alloc.y = MAX (main_alloc.y, main_alloc.height - req.height + y_offset);
+              break;
+
+            case GTK_ALIGN_CENTER:
+              alloc.x = MAX (main_alloc.x, main_alloc.width / 2 - req.width / 2 + x_offset);
+              alloc.y = MAX (main_alloc.y, main_alloc.height / 2 - req.height / 2 + y_offset);
+              break;
+
             default:
               break;
             }



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]