[gtk+/refactor: 52/106] gtkframe: move public members to private structure



commit 817d1f93cd2dd66d3a1b47b3864c8ac09c34bdb7
Author: Javier Jardón <jjardon gnome org>
Date:   Sat Jun 5 03:17:11 2010 +0200

    gtkframe: move public members to private structure

 gtk/gtkframe.c |  203 ++++++++++++++++++++++++++++++++++----------------------
 gtk/gtkframe.h |   10 +--
 2 files changed, 127 insertions(+), 86 deletions(-)
---
diff --git a/gtk/gtkframe.c b/gtk/gtkframe.c
index f5474ed..7f6c0e2 100644
--- a/gtk/gtkframe.c
+++ b/gtk/gtkframe.c
@@ -36,6 +36,19 @@
 #define LABEL_PAD 1
 #define LABEL_SIDE_PAD 2
 
+struct _GtkFramePriv
+{
+  /* Properties */
+  GtkWidget *label_widget;
+
+  gint16 shadow_type;
+  gfloat label_xalign;
+  gfloat label_yalign;
+  /* Properties */
+
+  GtkAllocation child_allocation;
+};
+
 enum {
   PROP_0,
   PROP_LABEL,
@@ -156,7 +169,7 @@ gtk_frame_class_init (GtkFrameClass *class)
                                                         P_("A widget to display in place of the usual frame label"),
                                                         GTK_TYPE_WIDGET,
                                                         GTK_PARAM_READWRITE));
-  
+
   widget_class->expose_event = gtk_frame_expose;
   widget_class->size_allocate = gtk_frame_size_allocate;
 
@@ -164,6 +177,8 @@ gtk_frame_class_init (GtkFrameClass *class)
   container_class->forall = gtk_frame_forall;
 
   class->compute_child_allocation = gtk_frame_real_compute_child_allocation;
+
+  g_type_class_add_private (class, sizeof (GtkFramePriv));
 }
 
 static void
@@ -189,10 +204,17 @@ gtk_frame_buildable_add_child (GtkBuildable *buildable,
 static void
 gtk_frame_init (GtkFrame *frame)
 {
-  frame->label_widget = NULL;
-  frame->shadow_type = GTK_SHADOW_ETCHED_IN;
-  frame->label_xalign = 0.0;
-  frame->label_yalign = 0.5;
+  GtkFramePriv *priv;
+
+  frame->priv = G_TYPE_INSTANCE_GET_PRIVATE (frame,
+                                             GTK_TYPE_FRAME,
+                                             GtkFramePriv);
+  priv = frame->priv;
+
+  priv->label_widget = NULL;
+  priv->shadow_type = GTK_SHADOW_ETCHED_IN;
+  priv->label_xalign = 0.0;
+  priv->label_yalign = 0.5;
 }
 
 static void 
@@ -201,9 +223,8 @@ gtk_frame_set_property (GObject         *object,
 			const GValue    *value,
 			GParamSpec      *pspec)
 {
-  GtkFrame *frame;
-
-  frame = GTK_FRAME (object);
+  GtkFrame *frame = GTK_FRAME (object);
+  GtkFramePriv *priv = frame->priv;
 
   switch (prop_id)
     {
@@ -212,10 +233,10 @@ gtk_frame_set_property (GObject         *object,
       break;
     case PROP_LABEL_XALIGN:
       gtk_frame_set_label_align (frame, g_value_get_float (value), 
-				 frame->label_yalign);
+				 priv->label_yalign);
       break;
     case PROP_LABEL_YALIGN:
-      gtk_frame_set_label_align (frame, frame->label_xalign, 
+      gtk_frame_set_label_align (frame, priv->label_xalign,
 				 g_value_get_float (value));
       break;
     case PROP_SHADOW:
@@ -237,9 +258,8 @@ gtk_frame_get_property (GObject         *object,
 			GValue          *value,
 			GParamSpec      *pspec)
 {
-  GtkFrame *frame;
-
-  frame = GTK_FRAME (object);
+  GtkFrame *frame = GTK_FRAME (object);
+  GtkFramePriv *priv = frame->priv;
 
   switch (prop_id)
     {
@@ -247,19 +267,19 @@ gtk_frame_get_property (GObject         *object,
       g_value_set_string (value, gtk_frame_get_label (frame));
       break;
     case PROP_LABEL_XALIGN:
-      g_value_set_float (value, frame->label_xalign);
+      g_value_set_float (value, priv->label_xalign);
       break;
     case PROP_LABEL_YALIGN:
-      g_value_set_float (value, frame->label_yalign);
+      g_value_set_float (value, priv->label_yalign);
       break;
     case PROP_SHADOW:
     case PROP_SHADOW_TYPE:
-      g_value_set_enum (value, frame->shadow_type);
+      g_value_set_enum (value, priv->shadow_type);
       break;
     case PROP_LABEL_WIDGET:
       g_value_set_object (value,
-                          frame->label_widget ?
-                          G_OBJECT (frame->label_widget) : NULL);
+                          priv->label_widget ?
+                          G_OBJECT (priv->label_widget) : NULL);
       break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -287,8 +307,9 @@ gtk_frame_remove (GtkContainer *container,
 		  GtkWidget    *child)
 {
   GtkFrame *frame = GTK_FRAME (container);
+  GtkFramePriv *priv = frame->priv;
 
-  if (frame->label_widget == child)
+  if (priv->label_widget == child)
     gtk_frame_set_label_widget (frame, NULL);
   else
     GTK_CONTAINER_CLASS (gtk_frame_parent_class)->remove (container, child);
@@ -302,14 +323,15 @@ gtk_frame_forall (GtkContainer *container,
 {
   GtkBin *bin = GTK_BIN (container);
   GtkFrame *frame = GTK_FRAME (container);
+  GtkFramePriv *priv = frame->priv;
   GtkWidget *child;
 
   child = gtk_bin_get_child (bin);
   if (child)
     (* callback) (child, callback_data);
 
-  if (frame->label_widget)
-    (* callback) (frame->label_widget, callback_data);
+  if (priv->label_widget)
+    (* callback) (priv->label_widget, callback_data);
 }
 
 /**
@@ -356,10 +378,14 @@ gtk_frame_set_label (GtkFrame *frame,
 G_CONST_RETURN gchar *
 gtk_frame_get_label (GtkFrame *frame)
 {
+  GtkFramePriv *priv;
+
   g_return_val_if_fail (GTK_IS_FRAME (frame), NULL);
 
-  if (GTK_IS_LABEL (frame->label_widget))
-    return gtk_label_get_text (GTK_LABEL (frame->label_widget));
+  priv = frame->priv;
+
+  if (GTK_IS_LABEL (priv->label_widget))
+    return gtk_label_get_text (GTK_LABEL (priv->label_widget));
   else
     return NULL;
 }
@@ -377,30 +403,33 @@ void
 gtk_frame_set_label_widget (GtkFrame  *frame,
 			    GtkWidget *label_widget)
 {
+  GtkFramePriv *priv;
   gboolean need_resize = FALSE;
-  
+
   g_return_if_fail (GTK_IS_FRAME (frame));
   g_return_if_fail (label_widget == NULL || GTK_IS_WIDGET (label_widget));
   g_return_if_fail (label_widget == NULL || label_widget->parent == NULL);
-  
-  if (frame->label_widget == label_widget)
+
+  priv = frame->priv;
+
+  if (priv->label_widget == label_widget)
     return;
-  
-  if (frame->label_widget)
+
+  if (priv->label_widget)
     {
-      need_resize = gtk_widget_get_visible (frame->label_widget);
-      gtk_widget_unparent (frame->label_widget);
+      need_resize = gtk_widget_get_visible (priv->label_widget);
+      gtk_widget_unparent (priv->label_widget);
     }
 
-  frame->label_widget = label_widget;
-    
+  priv->label_widget = label_widget;
+
   if (label_widget)
     {
-      frame->label_widget = label_widget;
+      priv->label_widget = label_widget;
       gtk_widget_set_parent (label_widget, GTK_WIDGET (frame));
       need_resize |= gtk_widget_get_visible (label_widget);
     }
-  
+
   if (gtk_widget_get_visible (GTK_WIDGET (frame)) && need_resize)
     gtk_widget_queue_resize (GTK_WIDGET (frame));
 
@@ -424,7 +453,7 @@ gtk_frame_get_label_widget (GtkFrame *frame)
 {
   g_return_val_if_fail (GTK_IS_FRAME (frame), NULL);
 
-  return frame->label_widget;
+  return frame->priv->label_widget;
 }
 
 /**
@@ -446,21 +475,25 @@ gtk_frame_set_label_align (GtkFrame *frame,
 			   gfloat    xalign,
 			   gfloat    yalign)
 {
+  GtkFramePriv *priv;
+
   g_return_if_fail (GTK_IS_FRAME (frame));
 
+  priv = frame->priv;
+
   xalign = CLAMP (xalign, 0.0, 1.0);
   yalign = CLAMP (yalign, 0.0, 1.0);
 
   g_object_freeze_notify (G_OBJECT (frame));
-  if (xalign != frame->label_xalign)
+  if (xalign != priv->label_xalign)
     {
-      frame->label_xalign = xalign;
+      priv->label_xalign = xalign;
       g_object_notify (G_OBJECT (frame), "label-xalign");
     }
 
-  if (yalign != frame->label_yalign)
+  if (yalign != priv->label_yalign)
     {
-      frame->label_yalign = yalign;
+      priv->label_yalign = yalign;
       g_object_notify (G_OBJECT (frame), "label-yalign");
     }
 
@@ -482,12 +515,16 @@ gtk_frame_get_label_align (GtkFrame *frame,
 		           gfloat   *xalign,
 			   gfloat   *yalign)
 {
+  GtkFramePriv *priv;
+
   g_return_if_fail (GTK_IS_FRAME (frame));
 
+  priv = frame->priv;
+
   if (xalign)
-    *xalign = frame->label_xalign;
+    *xalign = priv->label_xalign;
   if (yalign)
-    *yalign = frame->label_yalign;
+    *yalign = priv->label_yalign;
 }
 
 /**
@@ -501,14 +538,17 @@ void
 gtk_frame_set_shadow_type (GtkFrame      *frame,
 			   GtkShadowType  type)
 {
+  GtkFramePriv *priv;
   GtkWidget *widget;
 
   g_return_if_fail (GTK_IS_FRAME (frame));
 
-  if ((GtkShadowType) frame->shadow_type != type)
+  priv = frame->priv;
+
+  if ((GtkShadowType) priv->shadow_type != type)
     {
       widget = GTK_WIDGET (frame);
-      frame->shadow_type = type;
+      priv->shadow_type = type;
       g_object_notify (G_OBJECT (frame), "shadow-type");
 
       if (gtk_widget_is_drawable (widget))
@@ -534,7 +574,7 @@ gtk_frame_get_shadow_type (GtkFrame *frame)
 {
   g_return_val_if_fail (GTK_IS_FRAME (frame), GTK_SHADOW_ETCHED_IN);
 
-  return frame->shadow_type;
+  return frame->priv->shadow_type;
 }
 
 static void
@@ -542,47 +582,49 @@ gtk_frame_paint (GtkWidget    *widget,
 		 GdkRectangle *area)
 {
   GtkFrame *frame;
+  GtkFramePriv *priv;
   gint x, y, width, height;
 
   if (gtk_widget_is_drawable (widget))
     {
       frame = GTK_FRAME (widget);
+      priv = frame->priv;
 
-      x = frame->child_allocation.x - widget->style->xthickness;
-      y = frame->child_allocation.y - widget->style->ythickness;
-      width = frame->child_allocation.width + 2 * widget->style->xthickness;
-      height =  frame->child_allocation.height + 2 * widget->style->ythickness;
+      x = priv->child_allocation.x - widget->style->xthickness;
+      y = priv->child_allocation.y - widget->style->ythickness;
+      width = priv->child_allocation.width + 2 * widget->style->xthickness;
+      height =  priv->child_allocation.height + 2 * widget->style->ythickness;
 
-      if (frame->label_widget)
+      if (priv->label_widget)
 	{
 	  GtkRequisition child_requisition;
 	  gfloat xalign;
 	  gint height_extra;
 	  gint x2;
 
-	  gtk_widget_get_child_requisition (frame->label_widget, &child_requisition);
+	  gtk_widget_get_child_requisition (priv->label_widget, &child_requisition);
 
 	  if (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_LTR)
-	    xalign = frame->label_xalign;
+	    xalign = priv->label_xalign;
 	  else
-	    xalign = 1 - frame->label_xalign;
+	    xalign = 1 - priv->label_xalign;
 
 	  height_extra = MAX (0, child_requisition.height - widget->style->ythickness)
-	    - frame->label_yalign * child_requisition.height;
+	    - priv->label_yalign * child_requisition.height;
 	  y -= height_extra;
 	  height += height_extra;
 	  
-	  x2 = widget->style->xthickness + (frame->child_allocation.width - child_requisition.width - 2 * LABEL_PAD - 2 * LABEL_SIDE_PAD) * xalign + LABEL_SIDE_PAD;
+	  x2 = widget->style->xthickness + (priv->child_allocation.width - child_requisition.width - 2 * LABEL_PAD - 2 * LABEL_SIDE_PAD) * xalign + LABEL_SIDE_PAD;
 	  
 	  /* If the label is completely over or under the frame we can omit the gap */
-	  if (frame->label_yalign == 0.0 || frame->label_yalign == 1.0)
+	  if (priv->label_yalign == 0.0 || priv->label_yalign == 1.0)
 	    gtk_paint_shadow (widget->style, widget->window,
-			      widget->state, frame->shadow_type,
+			      widget->state, priv->shadow_type,
 			      area, widget, "frame",
 			      x, y, width, height);
 	  else
 	    gtk_paint_shadow_gap (widget->style, widget->window,
-				  widget->state, frame->shadow_type,
+				  widget->state, priv->shadow_type,
 				  area, widget, "frame",
 				  x, y, width, height,
 				  GTK_POS_TOP,
@@ -590,7 +632,7 @@ gtk_frame_paint (GtkWidget    *widget,
 	}
        else
 	 gtk_paint_shadow (widget->style, widget->window,
-			   widget->state, frame->shadow_type,
+			   widget->state, priv->shadow_type,
 			   area, widget, "frame",
 			   x, y, width, height);
     }
@@ -615,6 +657,7 @@ gtk_frame_size_allocate (GtkWidget     *widget,
 			 GtkAllocation *allocation)
 {
   GtkFrame *frame = GTK_FRAME (widget);
+  GtkFramePriv *priv = frame->priv;
   GtkBin *bin = GTK_BIN (widget);
   GtkAllocation new_allocation;
   GtkWidget *child;
@@ -629,10 +672,10 @@ gtk_frame_size_allocate (GtkWidget     *widget,
   if (gtk_widget_get_mapped (widget)
 #if 0
       &&
-      (new_allocation.x != frame->child_allocation.x ||
-       new_allocation.y != frame->child_allocation.y ||
-       new_allocation.width != frame->child_allocation.width ||
-       new_allocation.height != frame->child_allocation.height)
+      (new_allocation.x != priv->child_allocation.x ||
+       new_allocation.y != priv->child_allocation.y ||
+       new_allocation.width != priv->child_allocation.width ||
+       new_allocation.height != priv->child_allocation.height)
 #endif
      )
     gdk_window_invalidate_rect (widget->window, &widget->allocation, FALSE);
@@ -640,30 +683,30 @@ gtk_frame_size_allocate (GtkWidget     *widget,
   child = gtk_bin_get_child (bin);
   if (child && gtk_widget_get_visible (child))
     gtk_widget_size_allocate (child, &new_allocation);
-  
-  frame->child_allocation = new_allocation;
-  
-  if (frame->label_widget && gtk_widget_get_visible (frame->label_widget))
+
+  priv->child_allocation = new_allocation;
+
+  if (priv->label_widget && gtk_widget_get_visible (priv->label_widget))
     {
       GtkRequisition child_requisition;
       GtkAllocation child_allocation;
       gfloat xalign;
 
-      gtk_widget_get_child_requisition (frame->label_widget, &child_requisition);
+      gtk_widget_get_child_requisition (priv->label_widget, &child_requisition);
 
       if (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_LTR)
-	xalign = frame->label_xalign;
+	xalign = priv->label_xalign;
       else
-	xalign = 1 - frame->label_xalign;
-      
-      child_allocation.x = frame->child_allocation.x + LABEL_SIDE_PAD +
-	(frame->child_allocation.width - child_requisition.width - 2 * LABEL_PAD - 2 * LABEL_SIDE_PAD) * xalign + LABEL_PAD;
+	xalign = 1 - priv->label_xalign;
+
+      child_allocation.x = priv->child_allocation.x + LABEL_SIDE_PAD +
+	(priv->child_allocation.width - child_requisition.width - 2 * LABEL_PAD - 2 * LABEL_SIDE_PAD) * xalign + LABEL_PAD;
       child_allocation.width = MIN (child_requisition.width, new_allocation.width - 2 * LABEL_PAD - 2 * LABEL_SIDE_PAD);
 
-      child_allocation.y = frame->child_allocation.y - MAX (child_requisition.height, widget->style->ythickness);
+      child_allocation.y = priv->child_allocation.y - MAX (child_requisition.height, widget->style->ythickness);
       child_allocation.height = child_requisition.height;
 
-      gtk_widget_size_allocate (frame->label_widget, &child_allocation);
+      gtk_widget_size_allocate (priv->label_widget, &child_allocation);
     }
 }
 
@@ -681,15 +724,16 @@ static void
 gtk_frame_real_compute_child_allocation (GtkFrame      *frame,
 					 GtkAllocation *child_allocation)
 {
+  GtkFramePriv *priv = frame->priv;
   GtkWidget *widget = GTK_WIDGET (frame);
   GtkAllocation *allocation = &widget->allocation;
   GtkRequisition child_requisition;
   gint top_margin;
   guint border_width;
 
-  if (frame->label_widget)
+  if (priv->label_widget)
     {
-      gtk_widget_get_child_requisition (frame->label_widget, &child_requisition);
+      gtk_widget_get_child_requisition (priv->label_widget, &child_requisition);
       top_margin = MAX (child_requisition.height, widget->style->ythickness);
     }
   else
@@ -718,23 +762,24 @@ gtk_frame_get_size (GtkSizeRequest *request,
   GtkWidget *widget = GTK_WIDGET (request);
   GtkWidget *child;
   GtkFrame *frame = GTK_FRAME (widget);
+  GtkFramePriv *priv = frame->priv;
   GtkBin *bin = GTK_BIN (widget);
   gint child_min, child_nat;
   gint minimum, natural;
   guint border_width;
 
-  if (frame->label_widget && gtk_widget_get_visible (frame->label_widget))
+  if (priv->label_widget && gtk_widget_get_visible (priv->label_widget))
     {
       if (orientation == GTK_ORIENTATION_HORIZONTAL)
         {
-          gtk_size_request_get_width (GTK_SIZE_REQUEST (frame->label_widget),
+          gtk_size_request_get_width (GTK_SIZE_REQUEST (priv->label_widget),
 				      &child_min, &child_nat);
           minimum = child_min + 2 * LABEL_PAD + 2 * LABEL_SIDE_PAD;
           natural = child_nat + 2 * LABEL_PAD + 2 * LABEL_SIDE_PAD;
         }
       else
         {
-          gtk_size_request_get_height (GTK_SIZE_REQUEST (frame->label_widget),
+          gtk_size_request_get_height (GTK_SIZE_REQUEST (priv->label_widget),
 				       &child_min, &child_nat);
           minimum = MAX (0, child_min - widget->style->ythickness);
           natural = MAX (0, child_nat - widget->style->ythickness);
diff --git a/gtk/gtkframe.h b/gtk/gtkframe.h
index 393f355..8c3aa85 100644
--- a/gtk/gtkframe.h
+++ b/gtk/gtkframe.h
@@ -45,20 +45,16 @@ G_BEGIN_DECLS
 #define GTK_IS_FRAME_CLASS(klass)       (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_FRAME))
 #define GTK_FRAME_GET_CLASS(obj)        (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_FRAME, GtkFrameClass))
 
-
 typedef struct _GtkFrame       GtkFrame;
+typedef struct _GtkFramePriv   GtkFramePriv;
 typedef struct _GtkFrameClass  GtkFrameClass;
 
 struct _GtkFrame
 {
   GtkBin bin;
 
-  GtkWidget *GSEAL (label_widget);
-  gint16 GSEAL (shadow_type);
-  gfloat GSEAL (label_xalign);
-  gfloat GSEAL (label_yalign);
-
-  GtkAllocation GSEAL (child_allocation);
+  /* <private> */
+  GtkFramePriv *priv;
 };
 
 struct _GtkFrameClass



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