[recipes] ingredients list: convert to doubles for amounts



commit 6c36aa118095128e640b601274a17664915b387c
Author: Matthias Clasen <mclasen redhat com>
Date:   Sun Jun 25 19:54:45 2017 -0400

    ingredients list: convert to doubles for amounts
    
    Change the gr_ingredients_list_scale_unit api to
    take a double instead of numerator and denominator.
    Update all callers.

 src/gr-ingredients-list.c   |   14 +++++---------
 src/gr-ingredients-list.h   |    3 +--
 src/gr-ingredients-viewer.c |   32 ++++++++++++++------------------
 src/gr-recipe-formatter.c   |    2 +-
 src/gr-recipe-printer.c     |    8 ++++----
 5 files changed, 25 insertions(+), 34 deletions(-)
---
diff --git a/src/gr-ingredients-list.c b/src/gr-ingredients-list.c
index a4ddc16..9fe693e 100644
--- a/src/gr-ingredients-list.c
+++ b/src/gr-ingredients-list.c
@@ -172,14 +172,11 @@ gr_ingredients_list_validate (const char  *text,
 }
 
 static void
-ingredient_scale_unit (Ingredient *ing, int num, int denom, GString *s)
+ingredient_scale_unit (Ingredient *ing, double scale, GString *s)
 {
         g_autofree char *scaled = NULL;
-        double snum;
 
-        snum = (double)num / (double)denom;
-        snum = snum * ing->amount;
-        scaled = gr_number_format (snum);
+        scaled = gr_number_format (scale * ing->amount);
 
         g_string_append (s, scaled);
         if (ing->unit) {
@@ -191,7 +188,7 @@ ingredient_scale_unit (Ingredient *ing, int num, int denom, GString *s)
 static void
 ingredient_scale (Ingredient *ing, int num, int denom, GString *s)
 {
-        ingredient_scale_unit (ing, num, denom, s);
+        ingredient_scale_unit (ing, (double)num / (double)denom, s);
         g_string_append (s, " ");
         g_string_append (s, ing->name);
         g_string_append (s, "\n");
@@ -244,8 +241,7 @@ char *
 gr_ingredients_list_scale_unit (GrIngredientsList *ingredients,
                                 const char        *segment,
                                 const char        *name,
-                                int                num,
-                                int                denom)
+                                double             scale)
 {
         GList *l;
 
@@ -257,7 +253,7 @@ gr_ingredients_list_scale_unit (GrIngredientsList *ingredients,
                         GString *s;
 
                         s = g_string_new ("");
-                        ingredient_scale_unit (ing, num, denom, s);
+                        ingredient_scale_unit (ing, scale, s);
 
                         return g_string_free (s, FALSE);
                 }
diff --git a/src/gr-ingredients-list.h b/src/gr-ingredients-list.h
index 90b32e7..ebc7341 100644
--- a/src/gr-ingredients-list.h
+++ b/src/gr-ingredients-list.h
@@ -38,8 +38,7 @@ char              *gr_ingredients_list_scale           (GrIngredientsList  *ingr
 char              *gr_ingredients_list_scale_unit      (GrIngredientsList  *ingredients,
                                                         const char         *segment,
                                                         const char         *ingredient,
-                                                        int                 num,
-                                                        int                 denom);
+                                                        double              scale);
 char             **gr_ingredients_list_get_segments    (GrIngredientsList  *ingredients);
 char             **gr_ingredients_list_get_ingredients (GrIngredientsList  *ingredients,
                                                         const char         *segment);
diff --git a/src/gr-ingredients-viewer.c b/src/gr-ingredients-viewer.c
index 435ec2c..f2f8018 100644
--- a/src/gr-ingredients-viewer.c
+++ b/src/gr-ingredients-viewer.c
@@ -54,8 +54,7 @@ struct _GrIngredientsViewer
         GtkWidget *row_before;
         GtkWidget *row_after;
 
-        int scale_num;
-        int scale_denom;
+        double scale;
 };
 
 
@@ -69,7 +68,8 @@ enum {
         PROP_ACTIVE,
         PROP_INGREDIENTS,
         PROP_SCALE_NUM,
-        PROP_SCALE_DENOM
+        PROP_SCALE_DENOM,
+        PROP_SCALE
 };
 
 enum {
@@ -224,12 +224,8 @@ gr_ingredients_viewer_get_property (GObject    *object,
                 g_value_set_boolean (value, self->active_row != NULL);
                 break;
 
-          case PROP_SCALE_NUM:
-                g_value_set_int (value, self->scale_num);
-                break;
-
-          case PROP_SCALE_DENOM:
-                g_value_set_int (value, self->scale_denom);
+          case PROP_SCALE:
+                g_value_set_double (value, self->scale);
                 break;
 
           default:
@@ -326,7 +322,7 @@ gr_ingredients_viewer_set_ingredients (GrIngredientsViewer *viewer,
                 const char *unit;
                 GtkWidget *row;
 
-                s = gr_ingredients_list_scale_unit (ingredients, viewer->title, ings[i], viewer->scale_num, 
viewer->scale_denom);
+                s = gr_ingredients_list_scale_unit (ingredients, viewer->title, ings[i], viewer->scale);
                 strv = g_strsplit (s, " ", 2);
                 amount = strv[0];
                 unit = strv[1] ? strv[1] : "";
@@ -616,12 +612,8 @@ gr_ingredients_viewer_set_property (GObject      *object,
                 gr_ingredients_viewer_set_active (self, g_value_get_boolean (value));
                 break;
 
-          case PROP_SCALE_NUM:
-                self->scale_num = g_value_get_int (value);
-                break;
-
-          case PROP_SCALE_DENOM:
-                self->scale_denom = g_value_get_int (value);
+          case PROP_SCALE:
+                self->scale = g_value_get_double (value);
                 break;
 
           case PROP_INGREDIENTS:
@@ -639,8 +631,7 @@ gr_ingredients_viewer_init (GrIngredientsViewer *self)
         gtk_widget_set_has_window (GTK_WIDGET (self), FALSE);
         gtk_widget_init_template (GTK_WIDGET (self));
 
-        self->scale_num = 1;
-        self->scale_denom = 1;
+        self->scale = 1.0;
         self->group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
 
 #if defined(ENABLE_GSPELL) && defined(GSPELL_TYPE_ENTRY)
@@ -699,6 +690,11 @@ gr_ingredients_viewer_class_init (GrIngredientsViewerClass *klass)
                                   G_PARAM_READWRITE);
         g_object_class_install_property (object_class, PROP_SCALE_DENOM, pspec);
 
+        pspec = g_param_spec_double ("scale", NULL, NULL,
+                                  0.0, G_MAXDOUBLE, 1.0,
+                                  G_PARAM_READWRITE);
+        g_object_class_install_property (object_class, PROP_SCALE, pspec);
+
         signals[DELETE] = g_signal_new ("delete",
                                         G_TYPE_FROM_CLASS (object_class),
                                         G_SIGNAL_RUN_FIRST,
diff --git a/src/gr-recipe-formatter.c b/src/gr-recipe-formatter.c
index 32f3cf5..0e7ceaf 100644
--- a/src/gr-recipe-formatter.c
+++ b/src/gr-recipe-formatter.c
@@ -109,7 +109,7 @@ gr_recipe_format (GrRecipe *recipe)
                         char *unit;
 
                         g_string_append (s, "\n");
-                        unit = gr_ingredients_list_scale_unit (ingredients, segs[j], ings[i], 1, 1);
+                        unit = gr_ingredients_list_scale_unit (ingredients, segs[j], ings[i], 1.0);
                         g_string_append (s, unit);
                         g_free (unit);
                         g_string_append (s, " ");
diff --git a/src/gr-recipe-printer.c b/src/gr-recipe-printer.c
index f554dd2..7f9b92b 100644
--- a/src/gr-recipe-printer.c
+++ b/src/gr-recipe-printer.c
@@ -198,7 +198,7 @@ begin_print (GtkPrintOperation *operation,
                 for (i = 0; ings[i]; i++) {
                         g_autofree char *unit = NULL;
 
-                        unit = gr_ingredients_list_scale_unit (ingredients, segs[j], ings[i], 1, 1);
+                        unit = gr_ingredients_list_scale_unit (ingredients, segs[j], ings[i], 1.0);
                         g_string_append (s, unit);
                         g_string_append (s, " \n");
                 }
@@ -263,14 +263,14 @@ begin_print (GtkPrintOperation *operation,
 
                                 g_string_append (s, "\n");
 
-                                unit = gr_ingredients_list_scale_unit (ingredients, segs[j], ings[i], 1, 1);
+                                unit = gr_ingredients_list_scale_unit (ingredients, segs[j], ings[i], 1.0);
                                 g_string_append (s, unit);
                                 g_clear_pointer (&unit, g_free);
                                 g_string_append (s, "\t");
                                 g_string_append (s, ings[i]);
                                 g_string_append (s, "\t");
                                 if (mid + i < length) {
-                                        unit = gr_ingredients_list_scale_unit (ingredients, segs[j], 
ings[mid + i], 1, 1);
+                                        unit = gr_ingredients_list_scale_unit (ingredients, segs[j], 
ings[mid + i], 1.0);
                                         g_string_append (s, unit);
                                         g_string_append (s, "\t");
                                         g_string_append (s, ings[mid + i]);
@@ -282,7 +282,7 @@ begin_print (GtkPrintOperation *operation,
                                 g_autofree char *unit = NULL;
 
                                 g_string_append (s, "\n");
-                                unit = gr_ingredients_list_scale_unit (ingredients, segs[j], ings[i], 1, 1);
+                                unit = gr_ingredients_list_scale_unit (ingredients, segs[j], ings[i], 1.0);
                                 g_string_append (s, unit);
                                 g_string_append (s, "\t");
                                 g_string_append (s, ings[i]);


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