[librsvg: 1/5] handle: rework C dpi handling
- From: Federico Mena Quintero <federico src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [librsvg: 1/5] handle: rework C dpi handling
- Date: Mon, 10 Dec 2018 16:57:50 +0000 (UTC)
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]