r15803 - gnucash/trunk/src/gnome-utils - better GncDenseCal minimum-size requesting

Josh Sled jsled at cvs.gnucash.org
Wed Apr 4 19:05:57 EDT 2007


Author: jsled
Date: 2007-04-04 19:05:57 -0400 (Wed, 04 Apr 2007)
New Revision: 15803
Trac: http://svn.gnucash.org/trac/changeset/15803

Modified:
   gnucash/trunk/src/gnome-utils/gnc-dense-cal.c
Log:
better GncDenseCal minimum-size requesting

Modified: gnucash/trunk/src/gnome-utils/gnc-dense-cal.c
===================================================================
--- gnucash/trunk/src/gnome-utils/gnc-dense-cal.c	2007-04-04 22:22:12 UTC (rev 15802)
+++ gnucash/trunk/src/gnome-utils/gnc-dense-cal.c	2007-04-04 23:05:57 UTC (rev 15803)
@@ -89,10 +89,9 @@
 
 static void gdc_free_all_mark_data(GncDenseCal *dcal);
 
-#if 0
-static void gnc_dense_cal_size_request(GtkWidget      *widget,
-                                       GtkRequisition *requisition);
-#endif // 0o
+static void _gdc_compute_min_size(GncDenseCal *dcal,
+                                  guint *min_width, guint *min_height);
+static void _gdc_set_cal_min_size_req(GncDenseCal *dcal);
 static gint gnc_dense_cal_motion_notify(GtkWidget      *widget,
                                         GdkEventMotion *event);
 static gint gnc_dense_cal_button_press(GtkWidget *widget,
@@ -289,8 +288,6 @@
     }
 
     dcal->cal_drawing_area = GTK_DRAWING_AREA(gtk_drawing_area_new());
-    // @@fixme gtk_widget_set_size_request(...) : real min size.
-    gtk_widget_set_size_request(GTK_WIDGET(dcal->cal_drawing_area), 100, 200);
     gtk_widget_add_events(GTK_WIDGET(dcal->cal_drawing_area), (GDK_EXPOSURE_MASK
                                                                | GDK_BUTTON_PRESS_MASK
                                                                | GDK_BUTTON_RELEASE_MASK
@@ -408,15 +405,15 @@
     recompute_extents(dcal);
     recompute_mark_storage(dcal);
 
-    /* Now that we're "sure" of our configuration, compute initial
-     * scaling factors; will be increased when we're allocated enough
-     * space to scale up. */
+    /* Compute initial scaling factors; will be increased when we're
+     * allocated enough space to scale up. */
     {
         PangoLayout *layout;
         int width_88, height_88;
         int width_XXX, height_XXX;
 
         layout = gtk_widget_create_pango_layout(GTK_WIDGET(dcal), NULL);
+
         pango_layout_set_text(layout, "88", -1);
         pango_layout_get_pixel_size(layout, &width_88, &height_88);
 
@@ -438,6 +435,15 @@
     gtk_widget_show_all(GTK_WIDGET(dcal));
 }
 
+static void
+_gdc_set_cal_min_size_req(GncDenseCal *dcal)
+{
+    guint min_width, min_height;
+
+    _gdc_compute_min_size(dcal, &min_width, &min_height);
+    gtk_widget_set_size_request(GTK_WIDGET(dcal->cal_drawing_area), min_width, min_height);
+}
+
 GtkWidget*
 gnc_dense_cal_new(void)
 {
@@ -652,32 +658,28 @@
     gnc_dense_cal_draw_to_buffer(dcal);
 }
 
-#if 0
 static void 
-gnc_dense_cal_size_request(GtkWidget *widget,
-                           GtkRequisition *requisition)
+_gdc_compute_min_size(GncDenseCal *dcal, guint *min_width, guint *min_height)
 {
-    GncDenseCal *dcal = GNC_DENSE_CAL(widget);
-    if (!dcal->initialized)
+    if (min_width != NULL)
     {
-        g_warning("Uninitialized size request\n");
-        requisition->width  = DENSE_CAL_DEFAULT_WIDTH;
-        requisition->height = DENSE_CAL_DEFAULT_HEIGHT;
-        return;
+        *min_width =
+            (dcal->leftPadding * 2)
+            + (num_cols(dcal)* (col_width_at(dcal, dcal->min_x_scale)
+                                + dcal->label_width))
+            + ((num_cols(dcal)-1) * COL_BORDER_SIZE);
     }
-    requisition->width =
-        (dcal->leftPadding * 2)
-        + (num_cols(dcal)* (col_width_at(dcal, dcal->min_x_scale)
-                            + dcal->label_width))
-        + ((num_cols(dcal)-1) * COL_BORDER_SIZE);
-    requisition->height =
-        (dcal->topPadding * 2)
-        + MINOR_BORDER_SIZE
-        + dcal->dayLabelHeight
-        + (num_weeks_per_col(dcal)
-           * week_height_at(dcal, dcal->min_y_scale));
+
+    if (min_height != NULL)
+    {
+        *min_height=
+            (dcal->topPadding * 2)
+            + MINOR_BORDER_SIZE
+            + dcal->dayLabelHeight
+            + (num_weeks_per_col(dcal)
+               * week_height_at(dcal, dcal->min_y_scale));
+    }
 }
-#endif // 0
 
 static void
 recompute_x_y_scales(GncDenseCal *dcal)
@@ -718,6 +720,8 @@
                                * MINOR_BORDER_SIZE))
                            / denom);
     dcal->y_scale = MAX(dcal->y_scale, dcal->min_y_scale);
+
+    _gdc_set_cal_min_size_req(dcal);
 }
 
 static void



More information about the gnucash-changes mailing list