[librsvg: 1/5] handle: rework C dpi handling



commit a7ffb925264c56f4874b97df30e5c21b0be9276f
Author: Paolo Borelli <pborelli gnome org>
Date:   Thu Dec 6 21:43:28 2018 +0100

    handle: rework C dpi handling
    
    Use getters to clean up code and ease transition to rust.
    The dpi properties of handle now default to 0.0, but their
    get_property function makes sure the proper value is
    returned.

 librsvg/rsvg-base.c    | 18 ++++++++++---
 librsvg/rsvg-handle.c  | 72 ++++++++++++++++++++++++++++++++------------------
 librsvg/rsvg-private.h |  6 +++++
 3 files changed, 66 insertions(+), 30 deletions(-)
---
diff --git a/librsvg/rsvg-base.c b/librsvg/rsvg-base.c
index d086f353..564e5ff8 100644
--- a/librsvg/rsvg-base.c
+++ b/librsvg/rsvg-base.c
@@ -35,10 +35,8 @@
 #define RSVG_DEFAULT_DPI_X 90.0
 #define RSVG_DEFAULT_DPI_Y 90.0
 
-G_GNUC_INTERNAL
-double rsvg_internal_dpi_x = RSVG_DEFAULT_DPI_X;
-G_GNUC_INTERNAL
-double rsvg_internal_dpi_y = RSVG_DEFAULT_DPI_Y;
+static double rsvg_internal_dpi_x = RSVG_DEFAULT_DPI_X;
+static double rsvg_internal_dpi_y = RSVG_DEFAULT_DPI_Y;
 
 /**
  * rsvg_error_quark:
@@ -104,6 +102,18 @@ rsvg_set_default_dpi_x_y (double dpi_x, double dpi_y)
         rsvg_internal_dpi_y = dpi_y;
 }
 
+double
+rsvg_get_default_dpi_x (void)
+{
+    return rsvg_internal_dpi_x;
+}
+
+double
+rsvg_get_default_dpi_y (void)
+{
+    return rsvg_internal_dpi_y;
+}
+
 /**
  * rsvg_init:
  *
diff --git a/librsvg/rsvg-handle.c b/librsvg/rsvg-handle.c
index 8c840732..3383a8d2 100644
--- a/librsvg/rsvg-handle.c
+++ b/librsvg/rsvg-handle.c
@@ -163,8 +163,6 @@ extern void rsvg_drawing_ctx_get_geometry (RsvgDrawingCtx *ctx,
                                            RsvgRectangle *ink_rect,
                                            RsvgRectangle *logical_rect);
 
-
-
 enum {
     PROP_0,
     PROP_FLAGS,
@@ -181,9 +179,6 @@ enum {
     NUM_PROPS
 };
 
-extern double rsvg_internal_dpi_x;
-extern double rsvg_internal_dpi_y;
-
 G_DEFINE_TYPE_WITH_CODE (RsvgHandle, rsvg_handle, G_TYPE_OBJECT,
                          G_ADD_PRIVATE (RsvgHandle))
 
@@ -194,8 +189,8 @@ rsvg_handle_init (RsvgHandle * self)
 
     self->priv->flags = RSVG_HANDLE_FLAGS_NONE;
     self->priv->hstate = RSVG_HANDLE_STATE_START;
-    self->priv->dpi_x = rsvg_internal_dpi_x;
-    self->priv->dpi_y = rsvg_internal_dpi_y;
+    self->priv->dpi_x = 0.;
+    self->priv->dpi_y = 0.;
 
     self->priv->in_loop = FALSE;
 
@@ -233,6 +228,38 @@ rsvg_handle_dispose (GObject *instance)
     G_OBJECT_CLASS (rsvg_handle_parent_class)->dispose (instance);
 }
 
+static double
+rsvg_handle_get_dpi_x (RsvgHandle *handle)
+{
+    if (handle->priv->dpi_x <= 0.) {
+        return rsvg_get_default_dpi_x ();
+    }
+
+    return handle->priv->dpi_x;
+}
+
+static double
+rsvg_handle_get_dpi_y (RsvgHandle *handle)
+{
+    if (handle->priv->dpi_y <= 0.) {
+        return rsvg_get_default_dpi_y ();
+    }
+
+    return handle->priv->dpi_y;
+}
+
+static void
+rsvg_handle_set_dpi_x (RsvgHandle *handle, double dpi_x)
+{
+    handle->priv->dpi_x = dpi_x;
+}
+
+static void
+rsvg_handle_set_dpi_y (RsvgHandle *handle, double dpi_y)
+{
+    handle->priv->dpi_y = dpi_y;
+}
+
 static void
 rsvg_handle_set_property (GObject * instance, guint prop_id, GValue const *value, GParamSpec * pspec)
 {
@@ -243,10 +270,10 @@ rsvg_handle_set_property (GObject * instance, guint prop_id, GValue const *value
         self->priv->flags = g_value_get_flags (value);
         break;
     case PROP_DPI_X:
-        rsvg_handle_set_dpi_x_y (self, g_value_get_double (value), self->priv->dpi_y);
+        rsvg_handle_set_dpi_x (self, g_value_get_double (value));
         break;
     case PROP_DPI_Y:
-        rsvg_handle_set_dpi_x_y (self, self->priv->dpi_x, g_value_get_double (value));
+        rsvg_handle_set_dpi_y (self, g_value_get_double (value));
         break;
     case PROP_BASE_URI:
         rsvg_handle_set_base_uri (self, g_value_get_string (value));
@@ -267,10 +294,10 @@ rsvg_handle_get_property (GObject * instance, guint prop_id, GValue * value, GPa
         g_value_set_flags (value, self->priv->flags);
         break;
     case PROP_DPI_X:
-        g_value_set_double (value, self->priv->dpi_x);
+        g_value_set_double (value, rsvg_handle_get_dpi_x (self));
         break;
     case PROP_DPI_Y:
-        g_value_set_double (value, self->priv->dpi_y);
+        g_value_set_double (value, rsvg_handle_get_dpi_y (self));
         break;
     case PROP_BASE_URI:
         g_value_set_string (value, rsvg_handle_get_base_uri (self));
@@ -334,16 +361,16 @@ rsvg_handle_class_init (RsvgHandleClass * klass)
     g_object_class_install_property (gobject_class,
                                      PROP_DPI_X,
                                      g_param_spec_double ("dpi-x", _("Horizontal resolution"),
-                                                          _("Horizontal resolution"), 0.,
-                                                          G_MAXDOUBLE, rsvg_internal_dpi_x,
+                                                          _("Horizontal resolution"),
+                                                          0., G_MAXDOUBLE, 0.,
                                                           (GParamFlags) (G_PARAM_READWRITE |
                                                                          G_PARAM_CONSTRUCT)));
 
     g_object_class_install_property (gobject_class,
                                      PROP_DPI_Y,
                                      g_param_spec_double ("dpi-y", _("Vertical resolution"),
-                                                          _("Vertical resolution"), 0., G_MAXDOUBLE,
-                                                          rsvg_internal_dpi_y,
+                                                          _("Vertical resolution"),
+                                                          0., G_MAXDOUBLE, 0.,
                                                           (GParamFlags) (G_PARAM_READWRITE |
                                                                          G_PARAM_CONSTRUCT)));
 
@@ -1034,7 +1061,7 @@ rsvg_handle_create_drawing_ctx(RsvgHandle *handle,
                                  cr,
                                  dimensions->width, dimensions->height,
                                  dimensions->em, dimensions->ex,
-                                 handle->priv->dpi_x, handle->priv->dpi_y,
+                                 rsvg_handle_get_dpi_x (handle), rsvg_handle_get_dpi_y (handle),
                                  handle->priv->is_testing);
 }
 
@@ -1277,7 +1304,7 @@ rsvg_handle_get_geometry_sub (RsvgHandle * handle, RsvgRectangle * ink_rect, Rsv
     }
 
     has_size = rsvg_node_svg_get_size (root,
-                                       handle->priv->dpi_x, handle->priv->dpi_y,
+                                       rsvg_handle_get_dpi_x (handle), rsvg_handle_get_dpi_y (handle),
                                        &root_width, &root_height);
 
     if (id || !has_size) {
@@ -1496,15 +1523,8 @@ rsvg_handle_set_dpi_x_y (RsvgHandle * handle, double dpi_x, double dpi_y)
 {
     g_return_if_fail (RSVG_IS_HANDLE (handle));
 
-    if (dpi_x <= 0.)
-        handle->priv->dpi_x = rsvg_internal_dpi_x;
-    else
-        handle->priv->dpi_x = dpi_x;
-
-    if (dpi_y <= 0.)
-        handle->priv->dpi_y = rsvg_internal_dpi_y;
-    else
-        handle->priv->dpi_y = dpi_y;
+    rsvg_handle_set_dpi_x (handle, dpi_x);
+    rsvg_handle_set_dpi_y (handle, dpi_y);
 }
 
 /**
diff --git a/librsvg/rsvg-private.h b/librsvg/rsvg-private.h
index ca5959f0..5aaa4910 100644
--- a/librsvg/rsvg-private.h
+++ b/librsvg/rsvg-private.h
@@ -69,6 +69,12 @@ typedef struct _RsvgFilter RsvgFilter;
 #define N_(X) X
 #endif
 
+G_GNUC_INTERNAL
+double rsvg_get_default_dpi_x (void);
+
+G_GNUC_INTERNAL
+double rsvg_get_default_dpi_y (void);
+
 /* Reading state for an RsvgHandle */
 typedef enum {
     RSVG_HANDLE_STATE_START,


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