summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docs/Bytecode11
-rw-r--r--include/libcss/computed.h28
-rw-r--r--include/libcss/hint.h1
-rw-r--r--include/libcss/properties.h8
-rw-r--r--src/bytecode/opcodes.h4
-rw-r--r--src/parse/properties/Makefile2
-rw-r--r--src/parse/properties/opacity.c79
-rw-r--r--src/parse/properties/properties.c1
-rw-r--r--src/parse/properties/properties.h3
-rw-r--r--src/parse/propstrings.c1
-rw-r--r--src/parse/propstrings.h2
-rw-r--r--src/select/dispatch.c5
-rw-r--r--src/select/properties/Makefile1
-rw-r--r--src/select/properties/opacity.c62
-rw-r--r--src/select/properties/properties.h1
-rw-r--r--src/select/propget.h22
-rw-r--r--src/select/propset.h21
-rw-r--r--test/data/parse/colours.dat32
-rw-r--r--test/data/select/tests1.dat22
-rw-r--r--test/dump.h12
-rw-r--r--test/dump_computed.h21
21 files changed, 333 insertions, 6 deletions
diff --git a/docs/Bytecode b/docs/Bytecode
index 5d7d431..0107182 100644
--- a/docs/Bytecode
+++ b/docs/Bytecode
@@ -1106,5 +1106,14 @@ Opcodes
bits 0-6: 0000000 => auto,
other => rffe.
-63-3ff - Reserved for future expansion.
+63 - opacity
+ <value> (14bits) :
+ bits 8-13: MBZ
+ bits 0-7 :
+ bit 7 set => number follows
+ bits 0-6: MBZ
+ bit 7 clear => Reserved for future expansion
+ bits 0-6: MBZ
+
+64-3ff - Reserved for future expansion.
diff --git a/include/libcss/computed.h b/include/libcss/computed.h
index 818d9db..094fd59 100644
--- a/include/libcss/computed.h
+++ b/include/libcss/computed.h
@@ -181,7 +181,7 @@ struct css_computed_style {
* ---
* 84 bits
*
- * Colours are 32bits of RRGGBBAA
+ * Colours are 32bits of AARRGGBB
* Dimensions are encoded as a fixed point value + 4 bits of unit data
*
* background_color 2 4
@@ -269,7 +269,7 @@ struct css_computed_style {
* 21 mmmmmccc min-width | clear
* 22 tttttooo padding-top | overflow
* 23 rrrrrppp padding-right | position
- * 24 bbbbb... padding-bottom | <unused>
+ * 24 bbbbbo.. padding-bottom | opacity | <unused>
* 25 lllllttt padding-left | text-transform
* 26 tttttwww text-indent | white-space
* 27 bbbbbbbb background-position
@@ -315,6 +315,8 @@ struct css_computed_style {
css_fixed min_height;
css_fixed min_width;
+ css_fixed opacity;
+
css_fixed padding[4];
css_fixed text_indent;
@@ -1771,6 +1773,28 @@ static inline uint8_t css_computed_position(
#undef CSS_POSITION_SHIFT
#undef CSS_POSITION_INDEX
+#define CSS_OPACITY_INDEX 23
+#define CSS_OPACITY_SHIFT 2
+#define CSS_OPACITY_MASK 0x04
+static inline uint8_t css_computed_opacity(
+ const css_computed_style *style,
+ css_fixed *opacity)
+{
+ uint8_t bits = style->bits[CSS_OPACITY_INDEX];
+ bits &= CSS_OPACITY_MASK;
+ bits >>= CSS_OPACITY_SHIFT;
+
+ /* 1bit: t : type */
+ if ((bits & 0x1) == CSS_OPACITY_SET) {
+ *opacity = style->opacity;
+ }
+
+ return (bits & 0x1);
+}
+#undef CSS_OPACITY_MASK
+#undef CSS_OPACITY_SHIFT
+#undef CSS_OPACITY_INDEX
+
#define CSS_TEXT_TRANSFORM_INDEX 24
#define CSS_TEXT_TRANSFORM_SHIFT 0
#define CSS_TEXT_TRANSFORM_MASK 0x7
diff --git a/include/libcss/hint.h b/include/libcss/hint.h
index 917794a..c3e928d 100644
--- a/include/libcss/hint.h
+++ b/include/libcss/hint.h
@@ -38,6 +38,7 @@ typedef struct css_hint {
css_color color;
css_computed_content_item *content;
css_computed_counter *counter;
+ css_fixed fixed;
int32_t integer;
css_hint_length length;
struct {
diff --git a/include/libcss/properties.h b/include/libcss/properties.h
index 11fb04d..4218956 100644
--- a/include/libcss/properties.h
+++ b/include/libcss/properties.h
@@ -113,8 +113,9 @@ enum css_properties_e {
CSS_PROP_WIDTH = 0x060,
CSS_PROP_WORD_SPACING = 0x061,
CSS_PROP_Z_INDEX = 0x062,
+ CSS_PROP_OPACITY = 0x063,
- CSS_N_PROPERTIES = CSS_PROP_Z_INDEX + 1
+ CSS_N_PROPERTIES
};
@@ -441,6 +442,11 @@ enum css_min_width_e {
CSS_MIN_WIDTH_SET = 0x1
};
+enum css_opacity_e {
+ CSS_OPACITY_INHERIT = 0x0,
+ CSS_OPACITY_SET = 0x1
+};
+
enum css_outline_color_e {
CSS_OUTLINE_COLOR_INHERIT = CSS_BACKGROUND_COLOR_INHERIT,
CSS_OUTLINE_COLOR_COLOR = CSS_BACKGROUND_COLOR_COLOR,
diff --git a/src/bytecode/opcodes.h b/src/bytecode/opcodes.h
index 991d099..95ab263 100644
--- a/src/bytecode/opcodes.h
+++ b/src/bytecode/opcodes.h
@@ -365,6 +365,10 @@ enum op_min_width {
MIN_WIDTH_SET = 0x0080
};
+enum op_opacity {
+ OPACITY_SET = 0x0080
+};
+
enum op_orphans {
ORPHANS_SET = 0x0080
};
diff --git a/src/parse/properties/Makefile b/src/parse/properties/Makefile
index 4f6a402..093e19e 100644
--- a/src/parse/properties/Makefile
+++ b/src/parse/properties/Makefile
@@ -54,7 +54,7 @@ DIR_SOURCES := azimuth.c text_decoration.c background.c \
font_family.c list_style.c padding.c cursor.c \
list_style_type.c pause.c border.c border_width.c margin.c \
play_during.c clip.c properties.c border_color.c content.c \
- elevation.c font_weight.c quotes.c utils.c
+ elevation.c font_weight.c quotes.c utils.c opacity.c
DIR_SOURCES := $(DIR_SOURCES) $(AUTOGEN_SOURCES)
diff --git a/src/parse/properties/opacity.c b/src/parse/properties/opacity.c
new file mode 100644
index 0000000..edad9f8
--- /dev/null
+++ b/src/parse/properties/opacity.c
@@ -0,0 +1,79 @@
+/*
+ * Licensed under the MIT License,
+ * http://www.opensource.org/licenses/mit-license.php
+ * Copyright 2010 The NetSurf Browser Project.
+ */
+
+#include <assert.h>
+#include <string.h>
+
+#include "bytecode/bytecode.h"
+#include "bytecode/opcodes.h"
+#include "parse/properties/properties.h"
+#include "parse/properties/utils.h"
+
+/**
+ * Parse opacity
+ *
+ * \param c Parsing context
+ * \param vector Vector of tokens to process
+ * \param ctx Pointer to vector iteration context
+ * \param result resulting style
+ * \return CSS_OK on success,
+ * CSS_NOMEM on memory exhaustion,
+ * CSS_INVALID if the input is not valid
+ *
+ * Post condition: \a *ctx is updated with the next token to process
+ * If the input is invalid, then \a *ctx remains unchanged.
+ */
+css_error css__parse_opacity(css_language *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style *result)
+{
+ int orig_ctx = *ctx;
+ css_error error;
+ const css_token *token;
+ bool match;
+
+ token = parserutils_vector_iterate(vector, ctx);
+ if ((token == NULL) || ((token->type != CSS_TOKEN_IDENT) && (token->type != CSS_TOKEN_NUMBER))) {
+ *ctx = orig_ctx;
+ return CSS_INVALID;
+ }
+
+ if ((token->type == CSS_TOKEN_IDENT) && (lwc_string_caseless_isequal(token->idata, c->strings[INHERIT], &match) == lwc_error_ok && match)) {
+ error = css_stylesheet_style_inherit(result, CSS_PROP_OPACITY);
+ } else if (token->type == CSS_TOKEN_NUMBER) {
+ css_fixed num = 0;
+ size_t consumed = 0;
+
+ num = css__number_from_lwc_string(token->idata, false, &consumed);
+ /* Invalid if there are trailing characters */
+ if (consumed != lwc_string_length(token->idata)) {
+ *ctx = orig_ctx;
+ return CSS_INVALID;
+ }
+
+ /* Clamp to range [0,1] */
+ if (num < 0)
+ num = 0;
+ if (num > INTTOFIX(1))
+ num = INTTOFIX(1);
+
+ error = css__stylesheet_style_appendOPV(result, CSS_PROP_OPACITY, 0, OPACITY_SET);
+ if (error != CSS_OK) {
+ *ctx = orig_ctx;
+ return error;
+ }
+
+ error = css__stylesheet_style_append(result, num);
+ } else {
+ error = CSS_INVALID;
+ }
+
+ if (error != CSS_OK)
+ *ctx = orig_ctx;
+
+ return error;
+}
+
diff --git a/src/parse/properties/properties.c b/src/parse/properties/properties.c
index 09ee255..bc2f225 100644
--- a/src/parse/properties/properties.c
+++ b/src/parse/properties/properties.c
@@ -81,6 +81,7 @@ const css_prop_handler property_handlers[LAST_PROP + 1 - FIRST_PROP] =
css__parse_max_width,
css__parse_min_height,
css__parse_min_width,
+ css__parse_opacity,
css__parse_orphans,
css__parse_outline,
css__parse_outline_color,
diff --git a/src/parse/properties/properties.h b/src/parse/properties/properties.h
index 5de344d..6992f18 100644
--- a/src/parse/properties/properties.h
+++ b/src/parse/properties/properties.h
@@ -229,6 +229,9 @@ css_error css__parse_min_height(css_language *c,
css_error css__parse_min_width(css_language *c,
const parserutils_vector *vector, int *ctx,
css_style *result);
+css_error css__parse_opacity(css_language *c,
+ const parserutils_vector *vector, int *ctx,
+ css_style *result);
css_error css__parse_orphans(css_language *c,
const parserutils_vector *vector, int *ctx,
css_style *result);
diff --git a/src/parse/propstrings.c b/src/parse/propstrings.c
index 9e81300..487ad98 100644
--- a/src/parse/propstrings.c
+++ b/src/parse/propstrings.c
@@ -111,6 +111,7 @@ const stringmap_entry stringmap[LAST_KNOWN] = {
{ "max-width", SLEN("max-width") },
{ "min-height", SLEN("min-height") },
{ "min-width", SLEN("min-width") },
+ { "opacity", SLEN("opacity") },
{ "orphans", SLEN("orphans") },
{ "outline", SLEN("outline") },
{ "outline-color", SLEN("outline-color") },
diff --git a/src/parse/propstrings.h b/src/parse/propstrings.h
index 5a1662d..f81fe30 100644
--- a/src/parse/propstrings.h
+++ b/src/parse/propstrings.h
@@ -46,7 +46,7 @@ enum {
FONT_WEIGHT, HEIGHT, LEFT, LETTER_SPACING, LINE_HEIGHT,
LIST_STYLE, LIST_STYLE_IMAGE, LIST_STYLE_POSITION, LIST_STYLE_TYPE,
MARGIN, MARGIN_BOTTOM, MARGIN_LEFT, MARGIN_RIGHT, MARGIN_TOP,
- MAX_HEIGHT, MAX_WIDTH, MIN_HEIGHT, MIN_WIDTH, ORPHANS,
+ MAX_HEIGHT, MAX_WIDTH, MIN_HEIGHT, MIN_WIDTH, OPACITY, ORPHANS,
OUTLINE, OUTLINE_COLOR, OUTLINE_STYLE, OUTLINE_WIDTH, OVERFLOW,
PADDING, PADDING_BOTTOM, PADDING_LEFT, PADDING_RIGHT, PADDING_TOP,
PAGE_BREAK_AFTER, PAGE_BREAK_BEFORE, PAGE_BREAK_INSIDE,
diff --git a/src/select/dispatch.c b/src/select/dispatch.c
index 0b73c26..fe17d70 100644
--- a/src/select/dispatch.c
+++ b/src/select/dispatch.c
@@ -512,5 +512,10 @@ struct prop_table prop_dispatch[CSS_N_PROPERTIES] = {
PROPERTY_FUNCS(z_index),
0,
GROUP_NORMAL
+ },
+ {
+ PROPERTY_FUNCS(opacity),
+ 0,
+ GROUP_NORMAL
}
};
diff --git a/src/select/properties/Makefile b/src/select/properties/Makefile
index 1721205..7f48fab 100644
--- a/src/select/properties/Makefile
+++ b/src/select/properties/Makefile
@@ -56,6 +56,7 @@ max_height.c \
max_width.c \
min_height.c \
min_width.c \
+opacity.c \
orphans.c \
outline_color.c \
outline_style.c \
diff --git a/src/select/properties/opacity.c b/src/select/properties/opacity.c
new file mode 100644
index 0000000..9ef0998
--- /dev/null
+++ b/src/select/properties/opacity.c
@@ -0,0 +1,62 @@
+/*
+ * This file is part of LibCSS
+ * Licensed under the MIT License,
+ * http://www.opensource.org/licenses/mit-license.php
+ * Copyright 2011 John-Mark Bell <jmb@netsurf-browser.org>
+ */
+
+#include "bytecode/bytecode.h"
+#include "bytecode/opcodes.h"
+#include "select/propset.h"
+#include "select/propget.h"
+#include "utils/utils.h"
+
+#include "select/properties/properties.h"
+#include "select/properties/helpers.h"
+
+css_error css__cascade_opacity(uint32_t opv, css_style *style,
+ css_select_state *state)
+{
+ uint16_t value = CSS_OPACITY_INHERIT;
+ css_fixed opacity = 0;
+
+ if (isInherit(opv) == false) {
+ value = CSS_Z_INDEX_SET;
+
+ opacity = *((css_fixed *) style->bytecode);
+ advance_bytecode(style, sizeof(opacity));
+ }
+
+ if (css__outranks_existing(getOpcode(opv), isImportant(opv), state,
+ isInherit(opv))) {
+ return set_opacity(state->computed, value, opacity);
+ }
+
+ return CSS_OK;
+}
+
+css_error css__set_opacity_from_hint(const css_hint *hint,
+ css_computed_style *style)
+{
+ return set_opacity(style, hint->status, hint->data.fixed);
+}
+
+css_error css__initial_opacity(css_select_state *state)
+{
+ return set_opacity(state->computed, CSS_OPACITY_SET, INTTOFIX(1));
+}
+
+css_error css__compose_opacity(const css_computed_style *parent,
+ const css_computed_style *child,
+ css_computed_style *result)
+{
+ css_fixed opacity = 0;
+ uint8_t type = get_opacity(child, &opacity);
+
+ if (type == CSS_OPACITY_INHERIT) {
+ type = get_opacity(parent, &opacity);
+ }
+
+ return set_opacity(result, type, opacity);
+}
+
diff --git a/src/select/properties/properties.h b/src/select/properties/properties.h
index 5312ce9..2f3fca4 100644
--- a/src/select/properties/properties.h
+++ b/src/select/properties/properties.h
@@ -77,6 +77,7 @@ PROPERTY_FUNCS(max_height);
PROPERTY_FUNCS(max_width);
PROPERTY_FUNCS(min_height);
PROPERTY_FUNCS(min_width);
+PROPERTY_FUNCS(opacity);
PROPERTY_FUNCS(orphans);
PROPERTY_FUNCS(outline_color);
PROPERTY_FUNCS(outline_style);
diff --git a/src/select/propget.h b/src/select/propget.h
index bf59e87..40aa51a 100644
--- a/src/select/propget.h
+++ b/src/select/propget.h
@@ -1310,6 +1310,28 @@ static inline uint8_t get_position(
#undef POSITION_SHIFT
#undef POSITION_INDEX
+#define OPACITY_INDEX 23
+#define OPACITY_SHIFT 2
+#define OPACITY_MASK 0x04
+static inline uint8_t get_opacity(
+ const css_computed_style *style,
+ css_fixed *opacity)
+{
+ uint8_t bits = style->bits[OPACITY_INDEX];
+ bits &= OPACITY_MASK;
+ bits >>= OPACITY_SHIFT;
+
+ /* 1bit: t : type */
+ if ((bits & 0x1) == CSS_OPACITY_SET) {
+ *opacity = style->opacity;
+ }
+
+ return (bits & 0x1);
+}
+#undef OPACITY_MASK
+#undef OPACITY_SHIFT
+#undef OPACITY_INDEX
+
#define TEXT_TRANSFORM_INDEX 24
#define TEXT_TRANSFORM_SHIFT 0
#define TEXT_TRANSFORM_MASK 0x7
diff --git a/src/select/propset.h b/src/select/propset.h
index 97d76b9..766f30d 100644
--- a/src/select/propset.h
+++ b/src/select/propset.h
@@ -1391,6 +1391,27 @@ static inline css_error set_position(
#undef POSITION_SHIFT
#undef POSITION_INDEX
+#define OPACITY_INDEX 23
+#define OPACITY_SHIFT 2
+#define OPACITY_MASK 0x04
+static inline css_error set_opacity(
+ css_computed_style *style,
+ uint8_t type, css_fixed opacity)
+{
+ uint8_t *bits = &style->bits[OPACITY_INDEX];
+
+ /* 1bit: t : type */
+ *bits = (*bits & ~OPACITY_MASK) |
+ ((type & 0x1) << OPACITY_SHIFT);
+
+ style->opacity = opacity;
+
+ return CSS_OK;
+}
+#undef OPACITY_MASK
+#undef OPACITY_SHIFT
+#undef OPACITY_INDEX
+
#define TEXT_TRANSFORM_INDEX 24
#define TEXT_TRANSFORM_SHIFT 0
#define TEXT_TRANSFORM_MASK 0x7
diff --git a/test/data/parse/colours.dat b/test/data/parse/colours.dat
index 0ca7a31..b7cab9c 100644
--- a/test/data/parse/colours.dat
+++ b/test/data/parse/colours.dat
@@ -56,6 +56,22 @@
| 0x00040018
#reset
+#data
+* { opacity: 0 }
+#errors
+#expected
+| 1 *
+| 0x02000063 0x00000000
+#reset
+
+#data
+* { opacity: 0.22 }
+#errors
+#expected
+| 1 *
+| 0x02000063 0x000000e1
+#reset
+
## Out-of-range rgb() parameters
#data
@@ -130,3 +146,19 @@
| 0x02000018 0x00000000
#reset
+#data
+* { opacity: -0.22 }
+#errors
+#expected
+| 1 *
+| 0x02000063 0x00000000
+#reset
+
+#data
+* { opacity: 1.22 }
+#errors
+#expected
+| 1 *
+| 0x02000063 0x00000400
+#reset
+
diff --git a/test/data/select/tests1.dat b/test/data/select/tests1.dat
index 0e44641..01fe437 100644
--- a/test/data/select/tests1.dat
+++ b/test/data/select/tests1.dat
@@ -52,6 +52,7 @@ max-height: none
max-width: none
min-height: 0px
min-width: 0px
+opacity: 1.000
outline-color: invert
outline-style: none
outline-width: 2px
@@ -127,6 +128,7 @@ max-height: none
max-width: none
min-height: 0px
min-width: 0px
+opacity: 1.000
outline-color: invert
outline-style: none
outline-width: 2px
@@ -201,6 +203,7 @@ max-height: none
max-width: none
min-height: 0px
min-width: 0px
+opacity: 1.000
outline-color: invert
outline-style: none
outline-width: 2px
@@ -275,6 +278,7 @@ max-height: none
max-width: none
min-height: 0px
min-width: 0px
+opacity: 1.000
outline-color: invert
outline-style: none
outline-width: 2px
@@ -355,6 +359,7 @@ max-height: none
max-width: none
min-height: 0px
min-width: 0px
+opacity: 1.000
outline-color: invert
outline-style: none
outline-width: 2px
@@ -439,6 +444,7 @@ max-height: none
max-width: none
min-height: 0px
min-width: 0px
+opacity: 1.000
outline-color: invert
outline-style: none
outline-width: 2px
@@ -524,6 +530,7 @@ max-height: none
max-width: none
min-height: 0px
min-width: 0px
+opacity: 1.000
outline-color: invert
outline-style: none
outline-width: 2px
@@ -595,6 +602,7 @@ max-height: none
max-width: none
min-height: 0px
min-width: 0px
+opacity: 1.000
outline-color: invert
outline-style: none
outline-width: 2px
@@ -673,6 +681,7 @@ max-height: none
max-width: none
min-height: 0px
min-width: 0px
+opacity: 1.000
outline-color: invert
outline-style: none
outline-width: 2px
@@ -748,6 +757,7 @@ max-height: none
max-width: none
min-height: 0px
min-width: 0px
+opacity: 1.000
outline-color: invert
outline-style: none
outline-width: 2px
@@ -817,6 +827,7 @@ max-height: none
max-width: none
min-height: 0px
min-width: 0px
+opacity: 1.000
outline-color: invert
outline-style: none
outline-width: 2px
@@ -887,6 +898,7 @@ max-height: none
max-width: none
min-height: 0px
min-width: 0px
+opacity: 1.000
outline-color: invert
outline-style: none
outline-width: 2px
@@ -960,6 +972,7 @@ max-height: none
max-width: none
min-height: 0px
min-width: 0px
+opacity: 1.000
outline-color: invert
outline-style: none
outline-width: 2px
@@ -1032,6 +1045,7 @@ max-height: none
max-width: none
min-height: 0px
min-width: 0px
+opacity: 1.000
outline-color: invert
outline-style: none
outline-width: 2px
@@ -1110,6 +1124,7 @@ max-height: none
max-width: none
min-height: 0px
min-width: 0px
+opacity: 1.000
outline-color: invert
outline-style: none
outline-width: 2px
@@ -1188,6 +1203,7 @@ max-height: none
max-width: none
min-height: 0px
min-width: 0px
+opacity: 1.000
outline-color: invert
outline-style: none
outline-width: 2px
@@ -1266,6 +1282,7 @@ max-height: none
max-width: none
min-height: 0px
min-width: 0px
+opacity: 1.000
outline-color: invert
outline-style: none
outline-width: 2px
@@ -1348,6 +1365,7 @@ max-height: none
max-width: none
min-height: 0px
min-width: 0px
+opacity: 1.000
outline-color: invert
outline-style: none
outline-width: 2px
@@ -1429,6 +1447,7 @@ max-height: none
max-width: none
min-height: 0px
min-width: 0px
+opacity: 1.000
outline-color: invert
outline-style: none
outline-width: 2px
@@ -1508,6 +1527,7 @@ max-height: none
max-width: none
min-height: 0px
min-width: 0px
+opacity: 1.000
outline-color: invert
outline-style: none
outline-width: 2px
@@ -1586,6 +1606,7 @@ max-height: none
max-width: none
min-height: 0px
min-width: 0px
+opacity: 1.000
outline-color: invert
outline-style: none
outline-width: 2px
@@ -1664,6 +1685,7 @@ max-height: none
max-width: none
min-height: 0px
min-width: 0px
+opacity: 1.000
outline-color: invert
outline-style: none
outline-width: 2px
diff --git a/test/dump.h b/test/dump.h
index b35832c..602530a 100644
--- a/test/dump.h
+++ b/test/dump.h
@@ -385,6 +385,7 @@ static const char *opcode_names[] = {
"width",
"word-spacing",
"z-index",
+ "opacity",
};
static void dump_css_fixed(css_fixed f, char **ptr)
@@ -1667,6 +1668,17 @@ void dump_bytecode(css_style *style, char **ptr, uint32_t depth)
break;
}
break;
+ case CSS_PROP_OPACITY:
+ switch (value) {
+ case OPACITY_SET:
+ {
+ css_fixed val = *((css_fixed *) bytecode);
+ ADVANCE(sizeof(val));
+ dump_number(val, ptr);
+ }
+ break;
+ }
+ break;
case CSS_PROP_PADDING_TOP:
case CSS_PROP_PADDING_RIGHT:
case CSS_PROP_PADDING_BOTTOM:
diff --git a/test/dump_computed.h b/test/dump_computed.h
index c76b17b..8315e65 100644
--- a/test/dump_computed.h
+++ b/test/dump_computed.h
@@ -1648,6 +1648,27 @@ static void dump_computed_style(const css_computed_style *style, char *buf,
ptr += wrote;
*len -= wrote;
+ /* opacity */
+ val = css_computed_opacity(style, &len1);
+ switch (val) {
+ case CSS_OPACITY_SET:
+ wrote = snprintf(ptr, *len, "opacity: ");
+ ptr += wrote;
+ *len -= wrote;
+
+ wrote = dump_css_fixed(len1, ptr, *len);
+ ptr += wrote;
+ *len -= wrote;
+
+ wrote = snprintf(ptr, *len, "\n");
+ break;
+ default:
+ wrote = 0;
+ break;
+ }
+ ptr += wrote;
+ *len -= wrote;
+
/* outline-color */
val = css_computed_outline_color(style, &color);
switch (val) {