diff options
Diffstat (limited to 'content/handlers/css')
-rw-r--r-- | content/handlers/css/css.c | 32 | ||||
-rw-r--r-- | content/handlers/css/dump.c | 7 | ||||
-rw-r--r-- | content/handlers/css/hints.c | 4 | ||||
-rw-r--r-- | content/handlers/css/select.c | 17 | ||||
-rw-r--r-- | content/handlers/css/utils.h | 69 |
5 files changed, 101 insertions, 28 deletions
diff --git a/content/handlers/css/css.c b/content/handlers/css/css.c index 997eb5115..93efd6a1b 100644 --- a/content/handlers/css/css.c +++ b/content/handlers/css/css.c @@ -136,7 +136,6 @@ nscss_create(const content_handler *handler, const char *charset = NULL; const char *xnsbase = NULL; lwc_string *charset_value = NULL; - union content_msg_data msg_data; nserror error; result = calloc(1, sizeof(nscss_content)); @@ -171,8 +170,7 @@ nscss_create(const content_handler *handler, xnsbase, charset, result->base.quirks, nscss_content_done, result); if (error != NSERROR_OK) { - msg_data.error = messages_get("NoMemory"); - content_broadcast(&result->base, CONTENT_MSG_ERROR, msg_data); + content_broadcast_errorcode(&result->base, NSERROR_NOMEM); if (charset_value != NULL) lwc_string_unref(charset_value); free(result); @@ -250,13 +248,11 @@ static nserror nscss_create_css_data(struct content_css_data *c, bool nscss_process_data(struct content *c, const char *data, unsigned int size) { nscss_content *css = (nscss_content *) c; - union content_msg_data msg_data; css_error error; error = nscss_process_css_data(&css->data, data, size); if (error != CSS_OK && error != CSS_NEEDDATA) { - msg_data.error = "?"; - content_broadcast(c, CONTENT_MSG_ERROR, msg_data); + content_broadcast_errorcode(c, NSERROR_CSS); } return (error == CSS_OK || error == CSS_NEEDDATA); @@ -286,13 +282,11 @@ static css_error nscss_process_css_data(struct content_css_data *c, bool nscss_convert(struct content *c) { nscss_content *css = (nscss_content *) c; - union content_msg_data msg_data; css_error error; error = nscss_convert_css_data(&css->data); if (error != CSS_OK) { - msg_data.error = "?"; - content_broadcast(c, CONTENT_MSG_ERROR, msg_data); + content_broadcast_errorcode(c, NSERROR_CSS); return false; } @@ -327,9 +321,11 @@ static css_error nscss_convert_css_data(struct content_css_data *c) const char *url; if (css_stylesheet_get_url(c->sheet, &url) == CSS_OK) { - LOG("Failed converting %p %s (%d)", c, url, error); + NSLOG(netsurf, INFO, "Failed converting %p %s (%d)", + c, url, error); } else { - LOG("Failed converting %p (%d)", c, error); + NSLOG(netsurf, INFO, "Failed converting %p (%d)", c, + error); } } @@ -475,7 +471,6 @@ content_type nscss_content_type(void) */ void nscss_content_done(struct content_css_data *css, void *pw) { - union content_msg_data msg_data; struct content *c = pw; uint32_t i; size_t size; @@ -484,8 +479,7 @@ void nscss_content_done(struct content_css_data *css, void *pw) /* Retrieve the size of this sheet */ error = css_stylesheet_size(css->sheet, &size); if (error != CSS_OK) { - msg_data.error = "?"; - content_broadcast(c, CONTENT_MSG_ERROR, msg_data); + content_broadcast_errorcode(c, NSERROR_CSS); content_set_error(c); return; } @@ -606,7 +600,9 @@ css_error nscss_handle_import(void *pw, css_stylesheet *parent, nsurl_unref(ns_ref); #ifdef NSCSS_IMPORT_TRACE - LOG("Import %d '%s' -> (handle: %p ctx: %p)", c->import_count, lwc_string_data(url), c->imports[c->import_count].c, ctx); + NSLOG(netsurf, INFO, "Import %d '%s' -> (handle: %p ctx: %p)", + c->import_count, lwc_string_data(url), + c->imports[c->import_count].c, ctx); #endif c->import_count++; @@ -629,7 +625,7 @@ nserror nscss_import(hlcache_handle *handle, css_error error = CSS_OK; #ifdef NSCSS_IMPORT_TRACE - LOG("Event %d for %p (%p)", event->type, handle, ctx); + NSLOG(netsurf, INFO, "Event %d for %p (%p)", event->type, handle, ctx); #endif assert(ctx->css->imports[ctx->index].c == handle); @@ -639,6 +635,7 @@ nserror nscss_import(hlcache_handle *handle, error = nscss_import_complete(ctx); break; + case CONTENT_MSG_ERRORCODE: case CONTENT_MSG_ERROR: hlcache_handle_release(handle); ctx->css->imports[ctx->index].c = NULL; @@ -670,7 +667,8 @@ css_error nscss_import_complete(nscss_import_ctx *ctx) error = nscss_register_imports(ctx->css); #ifdef NSCSS_IMPORT_TRACE - LOG("Destroying import context %p for %d", ctx, ctx->index); + NSLOG(netsurf, INFO, "Destroying import context %p for %d", ctx, + ctx->index); #endif /* No longer need import context */ diff --git a/content/handlers/css/dump.c b/content/handlers/css/dump.c index 1ad188cb8..529bd4a88 100644 --- a/content/handlers/css/dump.c +++ b/content/handlers/css/dump.c @@ -20,6 +20,7 @@ #include <libcss/libcss.h> #include "css/dump.h" +#include "css/utils.h" /** * Dump a fixed point value to the stream in a textual form. @@ -783,7 +784,7 @@ void nscss_dump_computed_style(FILE *stream, const css_computed_style *style) } /* display */ - val = css_computed_display_static(style); + val = ns_computed_display_static(style); switch (val) { case CSS_DISPLAY_INLINE: fprintf(stream, "display: inline "); @@ -1268,7 +1269,7 @@ void nscss_dump_computed_style(FILE *stream, const css_computed_style *style) } /* min-height */ - val = css_computed_min_height(style, &len1, &unit1); + val = ns_computed_min_height(style, &len1, &unit1); switch (val) { case CSS_MIN_HEIGHT_SET: fprintf(stream, "min-height: "); @@ -1282,7 +1283,7 @@ void nscss_dump_computed_style(FILE *stream, const css_computed_style *style) } /* min-width */ - val = css_computed_min_width(style, &len1, &unit1); + val = ns_computed_min_width(style, &len1, &unit1); switch (val) { case CSS_MIN_WIDTH_SET: fprintf(stream, "min-width: "); diff --git a/content/handlers/css/hints.c b/content/handlers/css/hints.c index 9dfcf402b..3a15f8e08 100644 --- a/content/handlers/css/hints.c +++ b/content/handlers/css/hints.c @@ -748,6 +748,8 @@ static void css_hint_vertical_align_table_cells( corestring_dom_valign, &attr); if (err == DOM_NO_ERR && attr != NULL) { + hint->data.length.value = 0; + hint->data.length.unit = CSS_UNIT_PX; if (dom_string_caseless_lwc_isequal(attr, corestring_lwc_top)) { hint->prop = CSS_PROP_VERTICAL_ALIGN; @@ -1615,7 +1617,7 @@ css_error node_presentational_hint(void *pw, void *node, } #ifdef LOG_STATS - LOG("Properties with hints: %i", hint_ctx.len); + NSLOG(netsurf, INFO, "Properties with hints: %i", hint_ctx.len); #endif css_hint_get_hints(hints, nhints); diff --git a/content/handlers/css/select.c b/content/handlers/css/select.c index daa3b4087..328d6a711 100644 --- a/content/handlers/css/select.c +++ b/content/handlers/css/select.c @@ -175,20 +175,20 @@ css_stylesheet *nscss_create_inline_style(const uint8_t *data, size_t len, error = css_stylesheet_create(¶ms, &sheet); if (error != CSS_OK) { - LOG("Failed creating sheet: %d", error); + NSLOG(netsurf, INFO, "Failed creating sheet: %d", error); return NULL; } error = css_stylesheet_append_data(sheet, data, len); if (error != CSS_OK && error != CSS_NEEDDATA) { - LOG("failed appending data: %d", error); + NSLOG(netsurf, INFO, "failed appending data: %d", error); css_stylesheet_destroy(sheet); return NULL; } error = css_stylesheet_data_done(sheet); if (error != CSS_OK) { - LOG("failed completing parse: %d", error); + NSLOG(netsurf, INFO, "failed completing parse: %d", error); css_stylesheet_destroy(sheet); return NULL; } @@ -214,7 +214,8 @@ static void nscss_dom_user_data_handler(dom_node_operation operation, CSS_NODE_CLONED, NULL, src, dst, data); if (error != CSS_OK) - LOG("Failed to clone libcss_node_data."); + NSLOG(netsurf, INFO, + "Failed to clone libcss_node_data."); break; case DOM_NODE_RENAMED: @@ -222,7 +223,8 @@ static void nscss_dom_user_data_handler(dom_node_operation operation, CSS_NODE_MODIFIED, NULL, src, NULL, data); if (error != CSS_OK) - LOG("Failed to update libcss_node_data."); + NSLOG(netsurf, INFO, + "Failed to update libcss_node_data."); break; case DOM_NODE_IMPORTED: @@ -232,11 +234,12 @@ static void nscss_dom_user_data_handler(dom_node_operation operation, CSS_NODE_DELETED, NULL, src, NULL, data); if (error != CSS_OK) - LOG("Failed to delete libcss_node_data."); + NSLOG(netsurf, INFO, + "Failed to delete libcss_node_data."); break; default: - LOG("User data operation not handled."); + NSLOG(netsurf, INFO, "User data operation not handled."); assert(0); } } diff --git a/content/handlers/css/utils.h b/content/handlers/css/utils.h index 58a5ea6e6..21cb4973b 100644 --- a/content/handlers/css/utils.h +++ b/content/handlers/css/utils.h @@ -46,4 +46,73 @@ css_fixed nscss_len2pt(css_fixed length, css_unit unit); */ css_fixed nscss_len2px(css_fixed length, css_unit unit, const css_computed_style *style); + +/** + * Temporary helper wrappers for for libcss computed style getter, while + * we don't support flexbox related property values. + */ + +static inline uint8_t ns_computed_display( + const css_computed_style *style, bool root) +{ + uint8_t value = css_computed_display(style, root); + + if (value == CSS_DISPLAY_FLEX) { + return CSS_DISPLAY_BLOCK; + + } else if (value == CSS_DISPLAY_INLINE_FLEX) { + return CSS_DISPLAY_INLINE_BLOCK; + } + + return value; +} + + +static inline uint8_t ns_computed_display_static( + const css_computed_style *style) +{ + uint8_t value = css_computed_display_static(style); + + if (value == CSS_DISPLAY_FLEX) { + return CSS_DISPLAY_BLOCK; + + } else if (value == CSS_DISPLAY_INLINE_FLEX) { + return CSS_DISPLAY_INLINE_BLOCK; + } + + return value; +} + + +static inline uint8_t ns_computed_min_height( + const css_computed_style *style, + css_fixed *length, css_unit *unit) +{ + uint8_t value = css_computed_min_height(style, length, unit); + + if (value == CSS_MIN_HEIGHT_AUTO) { + value = CSS_MIN_HEIGHT_SET; + *length = 0; + *unit = CSS_UNIT_PX; + } + + return value; +} + + +static inline uint8_t ns_computed_min_width( + const css_computed_style *style, + css_fixed *length, css_unit *unit) +{ + uint8_t value = css_computed_min_width(style, length, unit); + + if (value == CSS_MIN_WIDTH_AUTO) { + value = CSS_MIN_WIDTH_SET; + *length = 0; + *unit = CSS_UNIT_PX; + } + + return value; +} + #endif |