mirror of
https://github.com/netsurf-browser/netsurf
synced 2024-12-22 20:16:54 +03:00
css: Support canvas width/height presentational hints
Signed-off-by: Daniel Silverstone <dsilvers@digital-scurf.org>
This commit is contained in:
parent
4d927ff409
commit
a5572cde76
@ -1233,6 +1233,68 @@ static void css_hint_height_width_textarea(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void css_hint_height_width_canvas(
|
||||||
|
nscss_select_ctx *ctx,
|
||||||
|
dom_node *node)
|
||||||
|
{
|
||||||
|
struct css_hint *hint = &hint_ctx.hints[hint_ctx.len];
|
||||||
|
dom_string *attr = NULL;
|
||||||
|
dom_exception err;
|
||||||
|
bool set_dim = false;
|
||||||
|
|
||||||
|
err = dom_element_get_attribute(node,
|
||||||
|
corestring_dom_height, &attr);
|
||||||
|
|
||||||
|
if (err == DOM_NO_ERR && attr != NULL) {
|
||||||
|
if (parse_dimension(
|
||||||
|
(const char *)dom_string_data(attr), true,
|
||||||
|
&hint->data.length.value,
|
||||||
|
&hint->data.length.unit)) {
|
||||||
|
hint->prop = CSS_PROP_HEIGHT;
|
||||||
|
hint->data.length.unit = CSS_UNIT_PX;
|
||||||
|
hint->status = CSS_HEIGHT_SET;
|
||||||
|
css_hint_advance(&hint);
|
||||||
|
set_dim = true;
|
||||||
|
}
|
||||||
|
dom_string_unref(attr);
|
||||||
|
}
|
||||||
|
if (set_dim == false) {
|
||||||
|
/* canvas defaults to 150px tall */
|
||||||
|
hint->prop = CSS_PROP_HEIGHT;
|
||||||
|
hint->data.length.unit = CSS_UNIT_PX;
|
||||||
|
hint->data.length.value = INTTOFIX(150);
|
||||||
|
hint->status = CSS_HEIGHT_SET;
|
||||||
|
css_hint_advance(&hint);
|
||||||
|
} else {
|
||||||
|
set_dim = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
err = dom_element_get_attribute(node,
|
||||||
|
corestring_dom_width, &attr);
|
||||||
|
|
||||||
|
if (err == DOM_NO_ERR && attr != NULL) {
|
||||||
|
if (parse_dimension(
|
||||||
|
(const char *)dom_string_data(attr), true,
|
||||||
|
&hint->data.length.value,
|
||||||
|
&hint->data.length.unit)) {
|
||||||
|
hint->prop = CSS_PROP_WIDTH;
|
||||||
|
hint->data.length.unit = CSS_UNIT_PX;
|
||||||
|
hint->status = CSS_WIDTH_SET;
|
||||||
|
css_hint_advance(&hint);
|
||||||
|
set_dim = true;
|
||||||
|
}
|
||||||
|
dom_string_unref(attr);
|
||||||
|
}
|
||||||
|
if (set_dim == false) {
|
||||||
|
/* canvas defaults to 300px wide */
|
||||||
|
hint->prop = CSS_PROP_WIDTH;
|
||||||
|
hint->data.length.unit = CSS_UNIT_PX;
|
||||||
|
hint->data.length.value = INTTOFIX(300);
|
||||||
|
hint->status = CSS_WIDTH_SET;
|
||||||
|
css_hint_advance(&hint);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void css_hint_width_input(
|
static void css_hint_width_input(
|
||||||
nscss_select_ctx *ctx,
|
nscss_select_ctx *ctx,
|
||||||
dom_node *node)
|
dom_node *node)
|
||||||
@ -1606,6 +1668,9 @@ css_error node_presentational_hint(void *pw, void *node,
|
|||||||
case DOM_HTML_ELEMENT_TYPE_BODY:
|
case DOM_HTML_ELEMENT_TYPE_BODY:
|
||||||
css_hint_body_color(pw, node);
|
css_hint_body_color(pw, node);
|
||||||
break;
|
break;
|
||||||
|
case DOM_HTML_ELEMENT_TYPE_CANVAS:
|
||||||
|
css_hint_height_width_canvas(pw, node);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user