[lasem] svg: move element registering by id to SvgDocument.
- From: Emmanuel Pacaud <emmanuel src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [lasem] svg: move element registering by id to SvgDocument.
- Date: Tue, 2 Apr 2013 21:21:14 +0000 (UTC)
commit 1575002237599ff92eec7ae3501729664dcc7bd8
Author: Emmanuel Pacaud <emmanuel gnome org>
Date: Tue Apr 2 23:19:42 2013 +0200
svg: move element registering by id to SvgDocument.
It's specific to SVG, no need to have this at the DOM level.
I know it breaks the API. But hopefully nobody cares.
docs/reference/lasem/lasem-sections.txt | 2 -
src/lsmdomdocument.c | 49 -------------------
src/lsmdomdocument.h | 7 ---
src/lsmsvgdocument.c | 77 ++++++++++++++++++++++++++++--
src/lsmsvgdocument.h | 6 ++
src/lsmsvgelement.c | 4 +-
src/lsmsvglineargradientelement.c | 12 ++--
src/lsmsvgpatternelement.c | 12 ++--
src/lsmsvgradialgradientelement.c | 12 ++--
src/lsmsvguseelement.c | 4 +-
10 files changed, 99 insertions(+), 86 deletions(-)
---
diff --git a/docs/reference/lasem/lasem-sections.txt b/docs/reference/lasem/lasem-sections.txt
index c86915e..9e1d036 100644
--- a/docs/reference/lasem/lasem-sections.txt
+++ b/docs/reference/lasem/lasem-sections.txt
@@ -105,8 +105,6 @@ lsm_dom_document_save_to_url
lsm_dom_document_get_document_element
lsm_dom_document_create_element
lsm_dom_document_create_text_node
-lsm_dom_document_get_element_by_id
-lsm_dom_document_register_element
lsm_dom_document_create_view
lsm_dom_document_get_url
lsm_dom_document_set_url
diff --git a/src/lsmdomdocument.c b/src/lsmdomdocument.c
index fdba500..f112e51 100644
--- a/src/lsmdomdocument.c
+++ b/src/lsmdomdocument.c
@@ -139,50 +139,6 @@ lsm_dom_document_create_view (LsmDomDocument *self)
return LSM_DOM_DOCUMENT_GET_CLASS (self)->create_view (self);
}
-/**
- * lsm_dom_document_get_element_by_id:
- * @self: a #LsmDomDocument
- * @id: id of the element to find
- *
- * Returns: (transfer none): the requested element, NULL if not found.
- */
-
-LsmDomElement *
-lsm_dom_document_get_element_by_id (LsmDomDocument *self, const char *id)
-{
- g_return_val_if_fail (LSM_IS_DOM_DOCUMENT (self), NULL);
- g_return_val_if_fail (id != NULL, NULL);
-
- lsm_debug_dom ("[LsmDomDocument::get_element_by_id] Lookup '%s'", id);
-
- return g_hash_table_lookup (self->ids, id);
-}
-
-void
-lsm_dom_document_register_element (LsmDomDocument *self, LsmDomElement *element, const char *id)
-{
- char *old_id;
-
- g_return_if_fail (LSM_IS_DOM_DOCUMENT (self));
-
- old_id = g_hash_table_lookup (self->elements, element);
- if (old_id != NULL) {
- lsm_debug_dom ("[LsmDomDocument::register_element] Unregister '%s'", old_id);
-
- g_hash_table_remove (self->elements, element);
- g_hash_table_remove (self->ids, old_id);
- }
-
- if (id != NULL) {
- char *new_id = g_strdup (id);
-
- lsm_debug_dom ("[LsmDomDocument::register_element] Register '%s'", id);
-
- g_hash_table_replace (self->ids, new_id, element);
- g_hash_table_replace (self->elements, element, new_id);
- }
-}
-
const char *
lsm_dom_document_get_url (LsmDomDocument *self)
{
@@ -265,8 +221,6 @@ lsm_dom_document_get_href_data (LsmDomDocument *self, const char *href, gsize *s
static void
lsm_dom_document_init (LsmDomDocument *document)
{
- document->ids = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
- document->elements = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, NULL);
}
static void
@@ -274,9 +228,6 @@ lsm_dom_document_finalize (GObject *object)
{
LsmDomDocument *document = LSM_DOM_DOCUMENT (object);
- g_hash_table_unref (document->elements);
- g_hash_table_unref (document->ids);
-
g_free (document->url);
parent_class->finalize (object);
diff --git a/src/lsmdomdocument.h b/src/lsmdomdocument.h
index 597631a..bbea1be 100644
--- a/src/lsmdomdocument.h
+++ b/src/lsmdomdocument.h
@@ -43,11 +43,7 @@ typedef struct _LsmDomDocumentClass LsmDomDocumentClass;
struct _LsmDomDocument {
LsmDomNode node;
- GHashTable * ids;
- GHashTable * elements;
-
char * url;
-
};
struct _LsmDomDocumentClass {
@@ -65,9 +61,6 @@ GType lsm_dom_document_get_type (void);
LsmDomElement* lsm_dom_document_get_document_element (LsmDomDocument* self);
LsmDomElement* lsm_dom_document_create_element (LsmDomDocument* self, const char *tag_name);
LsmDomText* lsm_dom_document_create_text_node (LsmDomDocument* self, const char *data);
-LsmDomElement * lsm_dom_document_get_element_by_id (LsmDomDocument *self, const char *id);
-
-void lsm_dom_document_register_element (LsmDomDocument *self, LsmDomElement *element, const
char *id);
LsmDomView* lsm_dom_document_create_view (LsmDomDocument *self);
diff --git a/src/lsmsvgdocument.c b/src/lsmsvgdocument.c
index d80c3df..502e227 100644
--- a/src/lsmsvgdocument.c
+++ b/src/lsmsvgdocument.c
@@ -60,6 +60,8 @@
#include <lsmsvgview.h>
#include <string.h>
+static GObjectClass *parent_class;
+
/* LsmDomNode implementation */
static gboolean
@@ -73,7 +75,7 @@ lsm_svg_document_can_append_child (LsmDomNode *self, LsmDomNode *child)
LsmSvgElement *
lsm_svg_document_get_element_by_url (LsmSvgDocument *document, const char *url)
{
- LsmDomElement *element;
+ LsmSvgElement *element;
char *end;
char *id;
@@ -86,11 +88,11 @@ lsm_svg_document_get_element_by_url (LsmSvgDocument *document, const char *url)
for (end = id; *end != '\0' && *end != ')'; end++);
*end = '\0';
- element = lsm_dom_document_get_element_by_id (LSM_DOM_DOCUMENT (document), id);
+ element = lsm_svg_document_get_element_by_id (document, id);
g_free (id);
- return LSM_SVG_ELEMENT (element);
+ return element;
}
static LsmDomElement *
@@ -196,6 +198,51 @@ lsm_svg_document_create_view (LsmDomDocument *document)
/* LsmSvgDocument implementation */
+/**
+ * lsm_svg_document_get_element_by_id:
+ * @self: a #LsmSvgDocument
+ * @id: id of the element to find
+ *
+ * Returns: (transfer none): the requested element, NULL if not found.
+ */
+
+LsmSvgElement *
+lsm_svg_document_get_element_by_id (LsmSvgDocument *self, const char *id)
+{
+ g_return_val_if_fail (LSM_IS_SVG_DOCUMENT (self), NULL);
+ g_return_val_if_fail (id != NULL, NULL);
+
+ lsm_debug_dom ("[LsmSvgDocument::get_element_by_id] Lookup '%s'", id);
+
+ return g_hash_table_lookup (self->ids, id);
+}
+
+void
+lsm_svg_document_register_element (LsmSvgDocument *self, LsmSvgElement *element, const char *id)
+{
+ char *old_id;
+
+ g_return_if_fail (LSM_IS_SVG_DOCUMENT (self));
+ g_return_if_fail (LSM_IS_SVG_ELEMENT (element));
+
+ old_id = g_hash_table_lookup (self->elements, element);
+ if (old_id != NULL) {
+ lsm_debug_dom ("[LsmSvgDocument::register_element] Unregister '%s'", old_id);
+
+ g_hash_table_remove (self->elements, element);
+ g_hash_table_remove (self->ids, old_id);
+ }
+
+ if (id != NULL) {
+ char *new_id = g_strdup (id);
+
+ lsm_debug_dom ("[LsmSvgDocument::register_element] Register '%s'", id);
+
+ g_hash_table_replace (self->ids, new_id, element);
+ g_hash_table_replace (self->elements, element, new_id);
+ }
+}
+
LsmDomDocument *
lsm_svg_document_new (void)
{
@@ -205,6 +252,19 @@ lsm_svg_document_new (void)
static void
lsm_svg_document_init (LsmSvgDocument *document)
{
+ document->ids = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
+ document->elements = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, NULL);
+}
+
+static void
+lsm_svg_document_finalize (GObject *object)
+{
+ LsmSvgDocument *document = LSM_SVG_DOCUMENT (object);
+
+ g_hash_table_unref (document->elements);
+ g_hash_table_unref (document->ids);
+
+ parent_class->finalize (object);
}
LsmSvgSvgElement *
@@ -216,10 +276,15 @@ lsm_svg_document_get_root_element (const LsmSvgDocument *document)
/* LsmSvgDocument class */
static void
-lsm_svg_document_class_init (LsmSvgDocumentClass *m_document_class)
+lsm_svg_document_class_init (LsmSvgDocumentClass *this_class)
{
- LsmDomNodeClass *d_node_class = LSM_DOM_NODE_CLASS (m_document_class);
- LsmDomDocumentClass *d_document_class = LSM_DOM_DOCUMENT_CLASS (m_document_class);
+ GObjectClass *object_class = G_OBJECT_CLASS (this_class);
+ LsmDomNodeClass *d_node_class = LSM_DOM_NODE_CLASS (this_class);
+ LsmDomDocumentClass *d_document_class = LSM_DOM_DOCUMENT_CLASS (this_class);
+
+ parent_class = g_type_class_peek_parent (this_class);
+
+ object_class->finalize = lsm_svg_document_finalize;
d_node_class->can_append_child = lsm_svg_document_can_append_child;
diff --git a/src/lsmsvgdocument.h b/src/lsmsvgdocument.h
index 6f106d6..6e2961f 100644
--- a/src/lsmsvgdocument.h
+++ b/src/lsmsvgdocument.h
@@ -40,6 +40,9 @@ typedef struct _LsmSvgDocumentClass LsmSvgDocumentClass;
struct _LsmSvgDocument {
LsmDomDocument document;
+
+ GHashTable * ids;
+ GHashTable * elements;
};
struct _LsmSvgDocumentClass {
@@ -49,8 +52,11 @@ struct _LsmSvgDocumentClass {
GType lsm_svg_document_get_type (void);
LsmDomDocument * lsm_svg_document_new (void);
+
LsmSvgSvgElement * lsm_svg_document_get_root_element (const LsmSvgDocument *document);
LsmSvgElement * lsm_svg_document_get_element_by_url (LsmSvgDocument *document, const char *url);
+LsmSvgElement * lsm_svg_document_get_element_by_id (LsmSvgDocument *self, const char
*id);
+void lsm_svg_document_register_element (LsmSvgDocument *self, LsmSvgElement
*element, const char *id);
G_END_DECLS
diff --git a/src/lsmsvgelement.c b/src/lsmsvgelement.c
index 50b60fe..4189e5b 100644
--- a/src/lsmsvgelement.c
+++ b/src/lsmsvgelement.c
@@ -24,7 +24,7 @@
#include <lsmdebug.h>
#include <lsmattributes.h>
#include <lsmproperties.h>
-#include <lsmdomdocument.h>
+#include <lsmsvgdocument.h>
#include <lsmsvgelement.h>
#include <lsmsvgtransformable.h>
#include <lsmsvgpatternelement.h>
@@ -81,7 +81,7 @@ lsm_svg_element_set_attribute (LsmDomElement *self, const char* name, const char
document = lsm_dom_node_get_owner_document (LSM_DOM_NODE (self));
if (document != NULL)
- lsm_dom_document_register_element (document, LSM_DOM_ELEMENT (self), value);
+ lsm_svg_document_register_element (LSM_SVG_DOCUMENT (document), LSM_SVG_ELEMENT
(self), value);
}
}
diff --git a/src/lsmsvglineargradientelement.c b/src/lsmsvglineargradientelement.c
index 447b7c2..1665bc3 100644
--- a/src/lsmsvglineargradientelement.c
+++ b/src/lsmsvglineargradientelement.c
@@ -23,7 +23,7 @@
#include <lsmsvglineargradientelement.h>
#include <lsmsvgview.h>
-#include <lsmdomdocument.h>
+#include <lsmsvgdocument.h>
#include <lsmdebug.h>
#include <stdio.h>
@@ -60,13 +60,13 @@ lsm_svg_linear_gradient_element_get_node_name (LsmDomNode *node)
/* LsmSvgElement implementation */
static LsmSvgGradientElement *
-lsm_svg_linear_gradient_element_inherit_referenced (LsmDomDocument *owner,
+lsm_svg_linear_gradient_element_inherit_referenced (LsmSvgDocument *owner,
LsmSvgGradientElement *gradient,
LsmSvgLinearGradientElementAttributes *attributes,
GSList **elements)
{
LsmSvgGradientElement *referenced_gradient = gradient;
- LsmDomElement *element;
+ LsmSvgElement *element;
*elements = g_slist_prepend (*elements, gradient);
@@ -81,7 +81,7 @@ lsm_svg_linear_gradient_element_inherit_referenced (LsmDomDocument *owner,
if (*id == '#')
id++;
- element = lsm_dom_document_get_element_by_id (owner, id);
+ element = lsm_svg_document_get_element_by_id (owner, id);
for (iter = *elements; iter != NULL; iter = iter->next)
if (iter->data == element) {
@@ -142,11 +142,11 @@ lsm_svg_linear_gradient_element_create_gradient (LsmSvgElement *self,
if (lsm_attribute_is_defined (&gradient->base.href)) {
LsmSvgLinearGradientElementAttributes attributes;
- LsmDomDocument *owner;
+ LsmSvgDocument *owner;
attributes = default_attributes;
GSList *elements = NULL;
- owner = lsm_dom_node_get_owner_document (LSM_DOM_NODE (self));
+ owner = LSM_SVG_DOCUMENT (lsm_dom_node_get_owner_document (LSM_DOM_NODE (self)));
referenced_gradient = lsm_svg_linear_gradient_element_inherit_referenced
(owner, LSM_SVG_GRADIENT_ELEMENT (gradient), &attributes, &elements);
diff --git a/src/lsmsvgpatternelement.c b/src/lsmsvgpatternelement.c
index 2239d23..efd6f68 100644
--- a/src/lsmsvgpatternelement.c
+++ b/src/lsmsvgpatternelement.c
@@ -24,7 +24,7 @@
#include <lsmsvgpatternelement.h>
#include <lsmsvgview.h>
#include <lsmdebug.h>
-#include <lsmdomdocument.h>
+#include <lsmsvgdocument.h>
#include <stdio.h>
typedef struct {
@@ -68,13 +68,13 @@ _pattern_element_get_node_name (LsmDomNode *node)
/* LsmSvgElement implementation */
static LsmSvgPatternElement *
-lsm_svg_pattern_element_inherit_referenced (LsmDomDocument *owner,
+lsm_svg_pattern_element_inherit_referenced (LsmSvgDocument *owner,
LsmSvgPatternElement *pattern,
LsmSvgPatternElementAttributes *attributes,
GSList **elements)
{
LsmSvgPatternElement *referenced_pattern = pattern;
- LsmDomElement *element;
+ LsmSvgElement *element;
*elements = g_slist_prepend (*elements, pattern);
@@ -89,7 +89,7 @@ lsm_svg_pattern_element_inherit_referenced (LsmDomDocument *owner,
if (*id == '#')
id++;
- element = lsm_dom_document_get_element_by_id (owner, id);
+ element = lsm_svg_document_get_element_by_id (owner, id);
for (iter = *elements; iter != NULL; iter = iter->next)
if (iter->data == element) {
@@ -160,11 +160,11 @@ lsm_svg_pattern_element_render (LsmSvgElement *self, LsmSvgView *view)
if (lsm_attribute_is_defined (&pattern->href)) {
LsmSvgPatternElementAttributes attributes;
- LsmDomDocument *owner;
+ LsmSvgDocument *owner;
attributes = default_attributes;
GSList *elements = NULL;
- owner = lsm_dom_node_get_owner_document (LSM_DOM_NODE (self));
+ owner = LSM_SVG_DOCUMENT (lsm_dom_node_get_owner_document (LSM_DOM_NODE (self)));
referenced_pattern = lsm_svg_pattern_element_inherit_referenced (owner, pattern,
&attributes, &elements);
diff --git a/src/lsmsvgradialgradientelement.c b/src/lsmsvgradialgradientelement.c
index 5f81dde..6634eb1 100644
--- a/src/lsmsvgradialgradientelement.c
+++ b/src/lsmsvgradialgradientelement.c
@@ -23,7 +23,7 @@
#include <lsmsvgradialgradientelement.h>
#include <lsmsvgview.h>
-#include <lsmdomdocument.h>
+#include <lsmsvgdocument.h>
#include <lsmdebug.h>
#include <stdio.h>
#include <math.h>
@@ -67,13 +67,13 @@ lsm_svg_radial_gradient_element_get_node_name (LsmDomNode *node)
/* LsmSvgGradientElement implementation */
static LsmSvgGradientElement *
-lsm_svg_radial_gradient_element_inherit_referenced (LsmDomDocument *owner,
+lsm_svg_radial_gradient_element_inherit_referenced (LsmSvgDocument *owner,
LsmSvgGradientElement *gradient,
LsmSvgRadialGradientElementAttributes *attributes,
GSList **elements)
{
LsmSvgGradientElement *referenced_gradient = gradient;
- LsmDomElement *element;
+ LsmSvgElement *element;
*elements = g_slist_prepend (*elements, gradient);
@@ -88,7 +88,7 @@ lsm_svg_radial_gradient_element_inherit_referenced (LsmDomDocument *owner,
if (*id == '#')
id++;
- element = lsm_dom_document_get_element_by_id (owner, id);
+ element = lsm_svg_document_get_element_by_id (owner, id);
for (iter = *elements; iter != NULL; iter = iter->next)
if (iter->data == element) {
@@ -159,11 +159,11 @@ lsm_svg_radial_gradient_element_create_gradient (LsmSvgElement *self,
if (lsm_attribute_is_defined (&gradient->base.href)) {
LsmSvgRadialGradientElementAttributes attributes;
- LsmDomDocument *owner;
+ LsmSvgDocument *owner;
attributes = default_attributes;
GSList *elements = NULL;
- owner = lsm_dom_node_get_owner_document (LSM_DOM_NODE (self));
+ owner = LSM_SVG_DOCUMENT (lsm_dom_node_get_owner_document (LSM_DOM_NODE (self)));
referenced_gradient = lsm_svg_radial_gradient_element_inherit_referenced
(owner, LSM_SVG_GRADIENT_ELEMENT (gradient), &attributes, &elements);
diff --git a/src/lsmsvguseelement.c b/src/lsmsvguseelement.c
index 1ed8f69..22adfd3 100644
--- a/src/lsmsvguseelement.c
+++ b/src/lsmsvguseelement.c
@@ -24,7 +24,7 @@
#include <lsmsvguseelement.h>
#include <lsmsvgview.h>
#include <lsmdebug.h>
-#include <lsmdomdocument.h>
+#include <lsmsvgdocument.h>
#include <stdio.h>
static GObjectClass *parent_class;
@@ -67,7 +67,7 @@ _get_used_element (LsmSvgUseElement *use_element)
if (*id == '#')
id++;
- element = lsm_dom_document_get_element_by_id (document, id);
+ element = LSM_DOM_ELEMENT (lsm_svg_document_get_element_by_id (LSM_SVG_DOCUMENT (document), id));
if (!LSM_IS_SVG_ELEMENT (element)) {
lsm_debug_dom ("[LsmSvgUseElement::_get_used_element] Target '%s' not found", id);
return NULL;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]