Gitweb links:

...log 
http://git.netsurf-browser.org/libdom.git/shortlog/65af1490bbabe62b0dbe22a84c1ef3d67a626d59
...commit 
http://git.netsurf-browser.org/libdom.git/commit/65af1490bbabe62b0dbe22a84c1ef3d67a626d59
...tree 
http://git.netsurf-browser.org/libdom.git/tree/65af1490bbabe62b0dbe22a84c1ef3d67a626d59

The branch, master has been updated
       via  65af1490bbabe62b0dbe22a84c1ef3d67a626d59 (commit)
      from  ce5bfc251e49ac7e5d657b3a9b579c2578698277 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commitdiff 
http://git.netsurf-browser.org/libdom.git/commit/?id=65af1490bbabe62b0dbe22a84c1ef3d67a626d59
commit 65af1490bbabe62b0dbe22a84c1ef3d67a626d59
Author: Vincent Sanders <[email protected]>
Commit: Vincent Sanders <[email protected]>

    Add HTMLCanvasElement

diff --git a/include/dom/html/html_canvas_element.h 
b/include/dom/html/html_canvas_element.h
new file mode 100644
index 0000000..3da9127
--- /dev/null
+++ b/include/dom/html/html_canvas_element.h
@@ -0,0 +1,31 @@
+/*
+ * This file is part of libdom.
+ * Licensed under the MIT License,
+ *                http://www.opensource.org/licenses/mit-license.php
+ * Copyright 2020 Vincent Sanders <[email protected]>
+ */
+
+#ifndef dom_html_canvas_element_h_
+#define dom_html_canvas_element_h_
+
+#include <stdbool.h>
+#include <dom/core/exceptions.h>
+
+#include <dom/html/html_document.h>
+
+typedef struct dom_html_canvas_element dom_html_canvas_element;
+
+dom_exception dom_html_canvas_element_get_width(
+       dom_html_canvas_element *object, int32_t *width);
+
+dom_exception dom_html_canvas_element_set_width(
+       dom_html_canvas_element *object, uint32_t width);
+
+dom_exception dom_html_canvas_element_get_height(
+       dom_html_canvas_element *object, int32_t *height);
+
+dom_exception dom_html_canvas_element_set_height(
+       dom_html_canvas_element *object, uint32_t height);
+
+
+#endif
diff --git a/src/html/Makefile b/src/html/Makefile
index c98ce9a..db765ad 100644
--- a/src/html/Makefile
+++ b/src/html/Makefile
@@ -1,24 +1,62 @@
 # Sources
 DIR_SOURCES := \
-       html_document.c html_collection.c html_options_collection.c \
-       html_element.c html_html_element.c html_head_element.c \
-       html_link_element.c html_title_element.c html_meta_element.c \
-       html_base_element.c html_style_element.c \
-       html_body_element.c html_form_element.c html_select_element.c \
-       html_button_element.c html_input_element.c html_text_area_element.c \
-       html_opt_group_element.c html_option_element.c html_hr_element.c \
-       html_dlist_element.c html_directory_element.c html_menu_element.c \
-       html_fieldset_element.c html_legend_element.c html_div_element.c \
-       html_paragraph_element.c html_heading_element.c html_quote_element.c \
-       html_pre_element.c html_br_element.c html_label_element.c \
-       html_ulist_element.c html_olist_element.c html_li_element.c \
-       html_font_element.c html_mod_element.c html_anchor_element.c \
-       html_basefont_element.c html_image_element.c html_object_element.c \
-       html_param_element.c html_applet_element.c html_area_element.c \
-       html_map_element.c html_script_element.c html_tablecaption_element.c \
-       html_tablecell_element.c html_tablecol_element.c 
html_tablesection_element.c \
-       html_table_element.c html_tablerow_element.c html_frameset_element.c \
-       html_frame_element.c html_iframe_element.c html_isindex_element.c \
+       html_applet_element.c \
+       html_area_element.c \
+       html_anchor_element.c \
+       html_basefont_element.c \
+       html_base_element.c \
+       html_body_element.c \
+       html_button_element.c \
+       html_canvas_element.c \
+       html_collection.c \
+       html_document.c \
+       html_element.c \
+       html_dlist_element.c \
+       html_directory_element.c \
+       html_options_collection.c \
+       html_html_element.c \
+       html_head_element.c \
+       html_link_element.c \
+       html_title_element.c \
+       html_meta_element.c \
+       html_style_element.c \
+       html_form_element.c \
+       html_select_element.c \
+       html_input_element.c \
+       html_text_area_element.c \
+       html_opt_group_element.c \
+       html_option_element.c \
+       html_hr_element.c \
+       html_menu_element.c \
+       html_fieldset_element.c \
+       html_legend_element.c \
+       html_div_element.c \
+       html_paragraph_element.c \
+       html_heading_element.c \
+       html_quote_element.c \
+       html_pre_element.c \
+       html_br_element.c \
+       html_label_element.c \
+       html_ulist_element.c \
+       html_olist_element.c \
+       html_li_element.c \
+       html_font_element.c \
+       html_mod_element.c \
+       html_image_element.c \
+       html_object_element.c \
+       html_param_element.c \
+       html_map_element.c \
+       html_script_element.c \
+       html_tablecaption_element.c \
+       html_tablecell_element.c \
+       html_tablecol_element.c \
+       html_tablesection_element.c \
+       html_table_element.c \
+       html_tablerow_element.c \
+       html_frameset_element.c \
+       html_frame_element.c \
+       html_iframe_element.c \
+       html_isindex_element.c \
 
 UNINMPLEMENTED_SOURCES := \
 
diff --git a/src/html/html_canvas_element.c b/src/html/html_canvas_element.c
new file mode 100644
index 0000000..ea9d9c9
--- /dev/null
+++ b/src/html/html_canvas_element.c
@@ -0,0 +1,190 @@
+/*
+ * This file is part of libdom.
+ * Licensed under the MIT License,
+ *                http://www.opensource.org/licenses/mit-license.php
+ * Copyright 2020 Vincent Sanders <[email protected]>
+ */
+
+#include <assert.h>
+#include <stdlib.h>
+
+#include <dom/html/html_canvas_element.h>
+
+#include "html/html_document.h"
+#include "html/html_canvas_element.h"
+
+#include "core/node.h"
+#include "core/attr.h"
+#include "utils/utils.h"
+
+static struct dom_element_protected_vtable _protect_vtable = {
+       {
+               DOM_NODE_PROTECT_VTABLE_HTML_CANVAS_ELEMENT
+       },
+       DOM_HTML_CANVAS_ELEMENT_PROTECT_VTABLE
+};
+
+/**
+ * Create a dom_html_canvas_element object
+ *
+ * \param params  The html element creation parameters
+ * \param ele     The returned element object
+ * \return DOM_NO_ERR on success, appropriate dom_exception on failure.
+ */
+dom_exception _dom_html_canvas_element_create(
+               struct dom_html_element_create_params *params,
+               struct dom_html_canvas_element **ele)
+{
+       struct dom_node_internal *node;
+
+       *ele = malloc(sizeof(dom_html_canvas_element));
+       if (*ele == NULL)
+               return DOM_NO_MEM_ERR;
+
+       /* Set up vtables */
+       node = (struct dom_node_internal *) *ele;
+       node->base.vtable = &_dom_html_element_vtable;
+       node->vtable = &_protect_vtable;
+
+       return _dom_html_canvas_element_initialise(params, *ele);
+}
+
+/**
+ * Initialise a dom_html_canvas_element object
+ *
+ * \param params  The html element creation parameters
+ * \param ele     The dom_html_canvas_element object
+ * \return DOM_NO_ERR on success, appropriate dom_exception on failure.
+ */
+dom_exception _dom_html_canvas_element_initialise(
+               struct dom_html_element_create_params *params,
+               struct dom_html_canvas_element *ele)
+{
+       return _dom_html_element_initialise(params, &ele->base);
+}
+
+/**
+ * Finalise a dom_html_canvas_element object
+ *
+ * \param ele  The dom_html_canvas_element object
+ */
+void _dom_html_canvas_element_finalise(struct dom_html_canvas_element *ele)
+{
+       _dom_html_element_finalise(&ele->base);
+}
+
+/**
+ * Destroy a dom_html_canvas_element object
+ *
+ * \param ele  The dom_html_canvas_element object
+ */
+void _dom_html_canvas_element_destroy(struct dom_html_canvas_element *ele)
+{
+       _dom_html_canvas_element_finalise(ele);
+       free(ele);
+}
+
+/*------------------------------------------------------------------------*/
+/* The protected virtual functions */
+
+/* The virtual function used to parse attribute value, see src/core/element.c
+ * for detail */
+dom_exception _dom_html_canvas_element_parse_attribute(dom_element *ele,
+               dom_string *name, dom_string *value,
+               dom_string **parsed)
+{
+       UNUSED(ele);
+       UNUSED(name);
+
+       dom_string_ref(value);
+       *parsed = value;
+
+       return DOM_NO_ERR;
+}
+
+/* The virtual destroy function, see src/core/node.c for detail */
+void _dom_virtual_html_canvas_element_destroy(dom_node_internal *node)
+{
+       _dom_html_canvas_element_destroy((struct dom_html_canvas_element *) 
node);
+}
+
+/* The virtual copy function, see src/core/node.c for detail */
+dom_exception _dom_html_canvas_element_copy(
+               dom_node_internal *old, dom_node_internal **copy)
+{
+       dom_html_canvas_element *new_node;
+       dom_exception err;
+
+       new_node = malloc(sizeof(dom_html_canvas_element));
+       if (new_node == NULL)
+               return DOM_NO_MEM_ERR;
+
+       err = dom_html_canvas_element_copy_internal(old, new_node);
+       if (err != DOM_NO_ERR) {
+               free(new_node);
+               return err;
+       }
+
+       *copy = (dom_node_internal *) new_node;
+
+       return DOM_NO_ERR;
+}
+
+dom_exception _dom_html_canvas_element_copy_internal(
+               dom_html_canvas_element *old,
+               dom_html_canvas_element *new)
+{
+       dom_exception err;
+
+       err = dom_html_element_copy_internal(old, new);
+       if (err != DOM_NO_ERR) {
+               return err;
+       }
+
+       return DOM_NO_ERR;
+}
+
+/*-----------------------------------------------------------------------*/
+/* API functions */
+
+
+dom_exception
+dom_html_canvas_element_get_width(dom_html_canvas_element *canvas,
+                                 int32_t *width)
+{
+       return dom_html_element_get_int32_t_property(&canvas->base,
+                                                    "width",
+                                                    SLEN("width"),
+                                                    width);
+}
+
+dom_exception
+dom_html_canvas_element_set_width(dom_html_canvas_element *canvas,
+                                 uint32_t width)
+{
+       return dom_html_element_set_int32_t_property(&canvas->base,
+                                                    "width",
+                                                    SLEN("width"),
+                                                    width);
+}
+
+dom_exception
+dom_html_canvas_element_get_height(dom_html_canvas_element *canvas,
+                                 int32_t *height)
+{
+       return dom_html_element_get_int32_t_property(&canvas->base,
+                                                    "height",
+                                                    SLEN("height"),
+                                                    height);
+}
+
+dom_exception
+dom_html_canvas_element_set_height(dom_html_canvas_element *canvas,
+                                 uint32_t height)
+{
+       return dom_html_element_set_int32_t_property(&canvas->base,
+                                                    "height",
+                                                    SLEN("height"),
+                                                    height);
+}
+
diff --git a/src/html/html_canvas_element.h b/src/html/html_canvas_element.h
new file mode 100644
index 0000000..4cf3042
--- /dev/null
+++ b/src/html/html_canvas_element.h
@@ -0,0 +1,62 @@
+/*
+ * This file is part of libdom.
+ * Licensed under the MIT License,
+ *                http://www.opensource.org/licenses/mit-license.php
+ * Copyright 2020 Vincent Sanders <[email protected]>
+ */
+
+#ifndef dom_internal_html_canvas_element_h_
+#define dom_internal_html_canvas_element_h_
+
+#include <dom/html/html_canvas_element.h>
+
+#include "html/html_element.h"
+
+struct dom_html_canvas_element {
+       struct dom_html_element base;
+                       /**< The base class */
+};
+
+/* Create a dom_html_canvas_element object */
+dom_exception _dom_html_canvas_element_create(
+               struct dom_html_element_create_params *params,
+               struct dom_html_canvas_element **ele);
+
+/* Initialise a dom_html_canvas_element object */
+dom_exception _dom_html_canvas_element_initialise(
+               struct dom_html_element_create_params *params,
+               struct dom_html_canvas_element *ele);
+
+/* Finalise a dom_html_canvas_element object */
+void _dom_html_canvas_element_finalise(struct dom_html_canvas_element *ele);
+
+/* Destroy a dom_html_canvas_element object */
+void _dom_html_canvas_element_destroy(struct dom_html_canvas_element *ele);
+
+/* The protected virtual functions */
+dom_exception _dom_html_canvas_element_parse_attribute(dom_element *ele,
+               dom_string *name, dom_string *value,
+               dom_string **parsed);
+
+void _dom_virtual_html_canvas_element_destroy(dom_node_internal *node);
+dom_exception _dom_html_canvas_element_copy(dom_node_internal *old,
+               dom_node_internal **copy);
+
+#define DOM_HTML_CANVAS_ELEMENT_PROTECT_VTABLE \
+       _dom_html_canvas_element_parse_attribute
+
+#define DOM_NODE_PROTECT_VTABLE_HTML_CANVAS_ELEMENT \
+       _dom_virtual_html_canvas_element_destroy, \
+       _dom_html_canvas_element_copy
+
+/* Helper functions*/
+dom_exception _dom_html_canvas_element_copy_internal(
+               dom_html_canvas_element *old,
+               dom_html_canvas_element *new);
+#define dom_html_canvas_element_copy_internal(o, n) \
+               _dom_html_canvas_element_copy_internal( \
+                               (dom_html_canvas_element *) (o), \
+                               (dom_html_canvas_element *) (n))
+
+
+#endif
diff --git a/src/html/html_document.c b/src/html/html_document.c
index 50a15a7..d978327 100644
--- a/src/html/html_document.c
+++ b/src/html/html_document.c
@@ -17,6 +17,7 @@
 #include "html/html_head_element.h"
 #include "html/html_body_element.h"
 #include "html/html_base_element.h"
+#include "html/html_canvas_element.h"
 #include "html/html_div_element.h"
 #include "html/html_link_element.h"
 #include "html/html_title_element.h"
@@ -771,6 +772,10 @@ _dom_html_document_create_element_internal(
                exc = _dom_html_isindex_element_create(&params,
                                (dom_html_isindex_element **) result);
                break;
+       case DOM_HTML_ELEMENT_TYPE_CANVAS:
+               exc = _dom_html_canvas_element_create(&params,
+                               (dom_html_canvas_element **) result);
+               break;
        case DOM_HTML_ELEMENT_TYPE_DATA:
        case DOM_HTML_ELEMENT_TYPE_SPAN:
        case DOM_HTML_ELEMENT_TYPE_TIME:
@@ -779,7 +784,6 @@ _dom_html_document_create_element_internal(
        case DOM_HTML_ELEMENT_TYPE_METER:
        case DOM_HTML_ELEMENT_TYPE_TRACK:
        case DOM_HTML_ELEMENT_TYPE_VIDEO:
-       case DOM_HTML_ELEMENT_TYPE_CANVAS:
        case DOM_HTML_ELEMENT_TYPE_DIALOG:
        case DOM_HTML_ELEMENT_TYPE_KEYGEN:
        case DOM_HTML_ELEMENT_TYPE_OUTPUT:


-----------------------------------------------------------------------

Summary of changes:
 include/dom/html/html_canvas_element.h |   31 ++++++
 src/html/Makefile                      |   76 +++++++++----
 src/html/html_canvas_element.c         |  190 ++++++++++++++++++++++++++++++++
 src/html/html_canvas_element.h         |   62 +++++++++++
 src/html/html_document.c               |    6 +-
 5 files changed, 345 insertions(+), 20 deletions(-)
 create mode 100644 include/dom/html/html_canvas_element.h
 create mode 100644 src/html/html_canvas_element.c
 create mode 100644 src/html/html_canvas_element.h

diff --git a/include/dom/html/html_canvas_element.h 
b/include/dom/html/html_canvas_element.h
new file mode 100644
index 0000000..3da9127
--- /dev/null
+++ b/include/dom/html/html_canvas_element.h
@@ -0,0 +1,31 @@
+/*
+ * This file is part of libdom.
+ * Licensed under the MIT License,
+ *                http://www.opensource.org/licenses/mit-license.php
+ * Copyright 2020 Vincent Sanders <[email protected]>
+ */
+
+#ifndef dom_html_canvas_element_h_
+#define dom_html_canvas_element_h_
+
+#include <stdbool.h>
+#include <dom/core/exceptions.h>
+
+#include <dom/html/html_document.h>
+
+typedef struct dom_html_canvas_element dom_html_canvas_element;
+
+dom_exception dom_html_canvas_element_get_width(
+       dom_html_canvas_element *object, int32_t *width);
+
+dom_exception dom_html_canvas_element_set_width(
+       dom_html_canvas_element *object, uint32_t width);
+
+dom_exception dom_html_canvas_element_get_height(
+       dom_html_canvas_element *object, int32_t *height);
+
+dom_exception dom_html_canvas_element_set_height(
+       dom_html_canvas_element *object, uint32_t height);
+
+
+#endif
diff --git a/src/html/Makefile b/src/html/Makefile
index c98ce9a..db765ad 100644
--- a/src/html/Makefile
+++ b/src/html/Makefile
@@ -1,24 +1,62 @@
 # Sources
 DIR_SOURCES := \
-       html_document.c html_collection.c html_options_collection.c \
-       html_element.c html_html_element.c html_head_element.c \
-       html_link_element.c html_title_element.c html_meta_element.c \
-       html_base_element.c html_style_element.c \
-       html_body_element.c html_form_element.c html_select_element.c \
-       html_button_element.c html_input_element.c html_text_area_element.c \
-       html_opt_group_element.c html_option_element.c html_hr_element.c \
-       html_dlist_element.c html_directory_element.c html_menu_element.c \
-       html_fieldset_element.c html_legend_element.c html_div_element.c \
-       html_paragraph_element.c html_heading_element.c html_quote_element.c \
-       html_pre_element.c html_br_element.c html_label_element.c \
-       html_ulist_element.c html_olist_element.c html_li_element.c \
-       html_font_element.c html_mod_element.c html_anchor_element.c \
-       html_basefont_element.c html_image_element.c html_object_element.c \
-       html_param_element.c html_applet_element.c html_area_element.c \
-       html_map_element.c html_script_element.c html_tablecaption_element.c \
-       html_tablecell_element.c html_tablecol_element.c 
html_tablesection_element.c \
-       html_table_element.c html_tablerow_element.c html_frameset_element.c \
-       html_frame_element.c html_iframe_element.c html_isindex_element.c \
+       html_applet_element.c \
+       html_area_element.c \
+       html_anchor_element.c \
+       html_basefont_element.c \
+       html_base_element.c \
+       html_body_element.c \
+       html_button_element.c \
+       html_canvas_element.c \
+       html_collection.c \
+       html_document.c \
+       html_element.c \
+       html_dlist_element.c \
+       html_directory_element.c \
+       html_options_collection.c \
+       html_html_element.c \
+       html_head_element.c \
+       html_link_element.c \
+       html_title_element.c \
+       html_meta_element.c \
+       html_style_element.c \
+       html_form_element.c \
+       html_select_element.c \
+       html_input_element.c \
+       html_text_area_element.c \
+       html_opt_group_element.c \
+       html_option_element.c \
+       html_hr_element.c \
+       html_menu_element.c \
+       html_fieldset_element.c \
+       html_legend_element.c \
+       html_div_element.c \
+       html_paragraph_element.c \
+       html_heading_element.c \
+       html_quote_element.c \
+       html_pre_element.c \
+       html_br_element.c \
+       html_label_element.c \
+       html_ulist_element.c \
+       html_olist_element.c \
+       html_li_element.c \
+       html_font_element.c \
+       html_mod_element.c \
+       html_image_element.c \
+       html_object_element.c \
+       html_param_element.c \
+       html_map_element.c \
+       html_script_element.c \
+       html_tablecaption_element.c \
+       html_tablecell_element.c \
+       html_tablecol_element.c \
+       html_tablesection_element.c \
+       html_table_element.c \
+       html_tablerow_element.c \
+       html_frameset_element.c \
+       html_frame_element.c \
+       html_iframe_element.c \
+       html_isindex_element.c \
 
 UNINMPLEMENTED_SOURCES := \
 
diff --git a/src/html/html_canvas_element.c b/src/html/html_canvas_element.c
new file mode 100644
index 0000000..ea9d9c9
--- /dev/null
+++ b/src/html/html_canvas_element.c
@@ -0,0 +1,190 @@
+/*
+ * This file is part of libdom.
+ * Licensed under the MIT License,
+ *                http://www.opensource.org/licenses/mit-license.php
+ * Copyright 2020 Vincent Sanders <[email protected]>
+ */
+
+#include <assert.h>
+#include <stdlib.h>
+
+#include <dom/html/html_canvas_element.h>
+
+#include "html/html_document.h"
+#include "html/html_canvas_element.h"
+
+#include "core/node.h"
+#include "core/attr.h"
+#include "utils/utils.h"
+
+static struct dom_element_protected_vtable _protect_vtable = {
+       {
+               DOM_NODE_PROTECT_VTABLE_HTML_CANVAS_ELEMENT
+       },
+       DOM_HTML_CANVAS_ELEMENT_PROTECT_VTABLE
+};
+
+/**
+ * Create a dom_html_canvas_element object
+ *
+ * \param params  The html element creation parameters
+ * \param ele     The returned element object
+ * \return DOM_NO_ERR on success, appropriate dom_exception on failure.
+ */
+dom_exception _dom_html_canvas_element_create(
+               struct dom_html_element_create_params *params,
+               struct dom_html_canvas_element **ele)
+{
+       struct dom_node_internal *node;
+
+       *ele = malloc(sizeof(dom_html_canvas_element));
+       if (*ele == NULL)
+               return DOM_NO_MEM_ERR;
+
+       /* Set up vtables */
+       node = (struct dom_node_internal *) *ele;
+       node->base.vtable = &_dom_html_element_vtable;
+       node->vtable = &_protect_vtable;
+
+       return _dom_html_canvas_element_initialise(params, *ele);
+}
+
+/**
+ * Initialise a dom_html_canvas_element object
+ *
+ * \param params  The html element creation parameters
+ * \param ele     The dom_html_canvas_element object
+ * \return DOM_NO_ERR on success, appropriate dom_exception on failure.
+ */
+dom_exception _dom_html_canvas_element_initialise(
+               struct dom_html_element_create_params *params,
+               struct dom_html_canvas_element *ele)
+{
+       return _dom_html_element_initialise(params, &ele->base);
+}
+
+/**
+ * Finalise a dom_html_canvas_element object
+ *
+ * \param ele  The dom_html_canvas_element object
+ */
+void _dom_html_canvas_element_finalise(struct dom_html_canvas_element *ele)
+{
+       _dom_html_element_finalise(&ele->base);
+}
+
+/**
+ * Destroy a dom_html_canvas_element object
+ *
+ * \param ele  The dom_html_canvas_element object
+ */
+void _dom_html_canvas_element_destroy(struct dom_html_canvas_element *ele)
+{
+       _dom_html_canvas_element_finalise(ele);
+       free(ele);
+}
+
+/*------------------------------------------------------------------------*/
+/* The protected virtual functions */
+
+/* The virtual function used to parse attribute value, see src/core/element.c
+ * for detail */
+dom_exception _dom_html_canvas_element_parse_attribute(dom_element *ele,
+               dom_string *name, dom_string *value,
+               dom_string **parsed)
+{
+       UNUSED(ele);
+       UNUSED(name);
+
+       dom_string_ref(value);
+       *parsed = value;
+
+       return DOM_NO_ERR;
+}
+
+/* The virtual destroy function, see src/core/node.c for detail */
+void _dom_virtual_html_canvas_element_destroy(dom_node_internal *node)
+{
+       _dom_html_canvas_element_destroy((struct dom_html_canvas_element *) 
node);
+}
+
+/* The virtual copy function, see src/core/node.c for detail */
+dom_exception _dom_html_canvas_element_copy(
+               dom_node_internal *old, dom_node_internal **copy)
+{
+       dom_html_canvas_element *new_node;
+       dom_exception err;
+
+       new_node = malloc(sizeof(dom_html_canvas_element));
+       if (new_node == NULL)
+               return DOM_NO_MEM_ERR;
+
+       err = dom_html_canvas_element_copy_internal(old, new_node);
+       if (err != DOM_NO_ERR) {
+               free(new_node);
+               return err;
+       }
+
+       *copy = (dom_node_internal *) new_node;
+
+       return DOM_NO_ERR;
+}
+
+dom_exception _dom_html_canvas_element_copy_internal(
+               dom_html_canvas_element *old,
+               dom_html_canvas_element *new)
+{
+       dom_exception err;
+
+       err = dom_html_element_copy_internal(old, new);
+       if (err != DOM_NO_ERR) {
+               return err;
+       }
+
+       return DOM_NO_ERR;
+}
+
+/*-----------------------------------------------------------------------*/
+/* API functions */
+
+
+dom_exception
+dom_html_canvas_element_get_width(dom_html_canvas_element *canvas,
+                                 int32_t *width)
+{
+       return dom_html_element_get_int32_t_property(&canvas->base,
+                                                    "width",
+                                                    SLEN("width"),
+                                                    width);
+}
+
+dom_exception
+dom_html_canvas_element_set_width(dom_html_canvas_element *canvas,
+                                 uint32_t width)
+{
+       return dom_html_element_set_int32_t_property(&canvas->base,
+                                                    "width",
+                                                    SLEN("width"),
+                                                    width);
+}
+
+dom_exception
+dom_html_canvas_element_get_height(dom_html_canvas_element *canvas,
+                                 int32_t *height)
+{
+       return dom_html_element_get_int32_t_property(&canvas->base,
+                                                    "height",
+                                                    SLEN("height"),
+                                                    height);
+}
+
+dom_exception
+dom_html_canvas_element_set_height(dom_html_canvas_element *canvas,
+                                 uint32_t height)
+{
+       return dom_html_element_set_int32_t_property(&canvas->base,
+                                                    "height",
+                                                    SLEN("height"),
+                                                    height);
+}
+
diff --git a/src/html/html_canvas_element.h b/src/html/html_canvas_element.h
new file mode 100644
index 0000000..4cf3042
--- /dev/null
+++ b/src/html/html_canvas_element.h
@@ -0,0 +1,62 @@
+/*
+ * This file is part of libdom.
+ * Licensed under the MIT License,
+ *                http://www.opensource.org/licenses/mit-license.php
+ * Copyright 2020 Vincent Sanders <[email protected]>
+ */
+
+#ifndef dom_internal_html_canvas_element_h_
+#define dom_internal_html_canvas_element_h_
+
+#include <dom/html/html_canvas_element.h>
+
+#include "html/html_element.h"
+
+struct dom_html_canvas_element {
+       struct dom_html_element base;
+                       /**< The base class */
+};
+
+/* Create a dom_html_canvas_element object */
+dom_exception _dom_html_canvas_element_create(
+               struct dom_html_element_create_params *params,
+               struct dom_html_canvas_element **ele);
+
+/* Initialise a dom_html_canvas_element object */
+dom_exception _dom_html_canvas_element_initialise(
+               struct dom_html_element_create_params *params,
+               struct dom_html_canvas_element *ele);
+
+/* Finalise a dom_html_canvas_element object */
+void _dom_html_canvas_element_finalise(struct dom_html_canvas_element *ele);
+
+/* Destroy a dom_html_canvas_element object */
+void _dom_html_canvas_element_destroy(struct dom_html_canvas_element *ele);
+
+/* The protected virtual functions */
+dom_exception _dom_html_canvas_element_parse_attribute(dom_element *ele,
+               dom_string *name, dom_string *value,
+               dom_string **parsed);
+
+void _dom_virtual_html_canvas_element_destroy(dom_node_internal *node);
+dom_exception _dom_html_canvas_element_copy(dom_node_internal *old,
+               dom_node_internal **copy);
+
+#define DOM_HTML_CANVAS_ELEMENT_PROTECT_VTABLE \
+       _dom_html_canvas_element_parse_attribute
+
+#define DOM_NODE_PROTECT_VTABLE_HTML_CANVAS_ELEMENT \
+       _dom_virtual_html_canvas_element_destroy, \
+       _dom_html_canvas_element_copy
+
+/* Helper functions*/
+dom_exception _dom_html_canvas_element_copy_internal(
+               dom_html_canvas_element *old,
+               dom_html_canvas_element *new);
+#define dom_html_canvas_element_copy_internal(o, n) \
+               _dom_html_canvas_element_copy_internal( \
+                               (dom_html_canvas_element *) (o), \
+                               (dom_html_canvas_element *) (n))
+
+
+#endif
diff --git a/src/html/html_document.c b/src/html/html_document.c
index 50a15a7..d978327 100644
--- a/src/html/html_document.c
+++ b/src/html/html_document.c
@@ -17,6 +17,7 @@
 #include "html/html_head_element.h"
 #include "html/html_body_element.h"
 #include "html/html_base_element.h"
+#include "html/html_canvas_element.h"
 #include "html/html_div_element.h"
 #include "html/html_link_element.h"
 #include "html/html_title_element.h"
@@ -771,6 +772,10 @@ _dom_html_document_create_element_internal(
                exc = _dom_html_isindex_element_create(&params,
                                (dom_html_isindex_element **) result);
                break;
+       case DOM_HTML_ELEMENT_TYPE_CANVAS:
+               exc = _dom_html_canvas_element_create(&params,
+                               (dom_html_canvas_element **) result);
+               break;
        case DOM_HTML_ELEMENT_TYPE_DATA:
        case DOM_HTML_ELEMENT_TYPE_SPAN:
        case DOM_HTML_ELEMENT_TYPE_TIME:
@@ -779,7 +784,6 @@ _dom_html_document_create_element_internal(
        case DOM_HTML_ELEMENT_TYPE_METER:
        case DOM_HTML_ELEMENT_TYPE_TRACK:
        case DOM_HTML_ELEMENT_TYPE_VIDEO:
-       case DOM_HTML_ELEMENT_TYPE_CANVAS:
        case DOM_HTML_ELEMENT_TYPE_DIALOG:
        case DOM_HTML_ELEMENT_TYPE_KEYGEN:
        case DOM_HTML_ELEMENT_TYPE_OUTPUT:


-- 
Document Object Model library
_______________________________________________
netsurf-commits mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to