Rename wuffs_gif__quirk_background_is_opaque
diff --git a/release/c/wuffs-unsupported-snapshot.c b/release/c/wuffs-unsupported-snapshot.c
index 9a3f3a2..bb7ab58 100644
--- a/release/c/wuffs-unsupported-snapshot.c
+++ b/release/c/wuffs-unsupported-snapshot.c
@@ -3336,10 +3336,10 @@
wuffs_gif__quirk_image_bounds_are_strict //
WUFFS_BASE__POTENTIALLY_UNUSED = 1041635330;
-#define WUFFS_GIF__QUIRK_BACKGROUND_IS_OPAQUE 1041635331
+#define WUFFS_GIF__QUIRK_HONOR_BACKGROUND_COLOR 1041635331
-static const uint32_t //
- wuffs_gif__quirk_background_is_opaque //
+static const uint32_t //
+ wuffs_gif__quirk_honor_background_color //
WUFFS_BASE__POTENTIALLY_UNUSED = 1041635331;
#define WUFFS_GIF__QUIRK_REJECT_EMPTY_FRAME 1041635333
@@ -3469,7 +3469,7 @@
bool f_quirk_enabled_delay_num_decoded_frames;
bool f_quirk_enabled_ignore_too_much_pixel_data;
bool f_quirk_enabled_image_bounds_are_strict;
- bool f_quirk_enabled_background_is_opaque;
+ bool f_quirk_enabled_honor_background_color;
bool f_quirk_enabled_reject_empty_frame;
bool f_quirk_enabled_reject_empty_palette;
bool f_delayed_num_decoded_frames;
@@ -8774,7 +8774,7 @@
} else if (a_quirk == 1041635330) {
self->private_impl.f_quirk_enabled_image_bounds_are_strict = a_enabled;
} else if (a_quirk == 1041635331) {
- self->private_impl.f_quirk_enabled_background_is_opaque = a_enabled;
+ self->private_impl.f_quirk_enabled_honor_background_color = a_enabled;
} else if (a_quirk == 1041635333) {
self->private_impl.f_quirk_enabled_reject_empty_frame = a_enabled;
} else if (a_quirk == 1041635332) {
@@ -8835,7 +8835,7 @@
goto suspend;
}
v_ffio = !self->private_impl.f_gc_has_transparent_index;
- if (!self->private_impl.f_quirk_enabled_background_is_opaque) {
+ if (!self->private_impl.f_quirk_enabled_honor_background_color) {
v_ffio =
(v_ffio && (self->private_impl.f_frame_rect_x0 == 0) &&
(self->private_impl.f_frame_rect_y0 == 0) &&
@@ -9846,7 +9846,7 @@
((uint8_t)(((v_argb >> 24) & 255)));
v_i += 1;
}
- if (self->private_impl.f_quirk_enabled_background_is_opaque) {
+ if (self->private_impl.f_quirk_enabled_honor_background_color) {
if ((v_background_color_index != 0) &&
(((uint32_t)(v_background_color_index)) < v_num_palette_entries)) {
v_j = (4 * ((uint32_t)(v_background_color_index)));
diff --git a/std/gif/decode_gif.wuffs b/std/gif/decode_gif.wuffs
index 403729b..656d2fd 100644
--- a/std/gif/decode_gif.wuffs
+++ b/std/gif/decode_gif.wuffs
@@ -88,18 +88,21 @@
// https://github.com/google/wuffs/blob/master/test/data/artificial/gif-frame-out-of-bounds.gif.make-artificial.txt
pub const quirk_image_bounds_are_strict base.u32 = (0xF8586 << 10) | 2
-// When this quirk is enabled, the background color is opaque instead of always
-// being transparent black. If the background color index in the GIF header is
-// non-zero but less than the global palette's size, the background color is
-// that global palette's entry. Otherwise, it is opaque black.
+// When this quirk is enabled, the background color is taken from the GIF
+// instead of always being transparent black. If the background color index in
+// the GIF header is non-zero but less than the global palette's size, the
+// global background color is that global palette's entry. Otherwise, it is
+// opaque black. A frame's background color is transparent if the frame palette
+// contains a transparent color. Otherwise, it is the global background color.
+// Note that different frames can have different background colors.
//
// Specifically, if the initial frame bounds is smaller than the image bounds,
// those pixels outside the initial frame bounds are assumed to start as that
-// opaque background color. The same color should be used when processing
-// WUFFS_BASE__ANIMATION_DISPOSAL__RESTORE_BACKGROUND. In both cases, the
-// caller of Wuffs, not Wuffs itself, is responsible for filling the pixel
-// buffer with that color.
-pub const quirk_background_is_opaque base.u32 = (0xF8586 << 10) | 3
+// frame background color. The frame background color should also be used when
+// processing WUFFS_BASE__ANIMATION_DISPOSAL__RESTORE_BACKGROUND. In both
+// cases, the caller of Wuffs, not Wuffs itself, is responsible for filling the
+// pixel buffer with that color.
+pub const quirk_honor_background_color base.u32 = (0xF8586 << 10) | 3
// When this quirk is enabled, a frame with zero width or height is rejected
// during decode_frame (but accepted during decode_frame_config).
@@ -178,7 +181,7 @@
quirk_enabled_delay_num_decoded_frames base.bool,
quirk_enabled_ignore_too_much_pixel_data base.bool,
quirk_enabled_image_bounds_are_strict base.bool,
- quirk_enabled_background_is_opaque base.bool,
+ quirk_enabled_honor_background_color base.bool,
quirk_enabled_reject_empty_frame base.bool,
quirk_enabled_reject_empty_palette base.bool,
@@ -244,8 +247,8 @@
this.quirk_enabled_ignore_too_much_pixel_data = args.enabled
} else if args.quirk == quirk_image_bounds_are_strict {
this.quirk_enabled_image_bounds_are_strict = args.enabled
- } else if args.quirk == quirk_background_is_opaque {
- this.quirk_enabled_background_is_opaque = args.enabled
+ } else if args.quirk == quirk_honor_background_color {
+ this.quirk_enabled_honor_background_color = args.enabled
} else if args.quirk == quirk_reject_empty_frame {
this.quirk_enabled_reject_empty_frame = args.enabled
} else if args.quirk == quirk_reject_empty_palette {
@@ -269,7 +272,7 @@
// TODO: if this.end_of_data, return an error and/or set dst to zero?
ffio = not this.gc_has_transparent_index
- if not this.quirk_enabled_background_is_opaque {
+ if not this.quirk_enabled_honor_background_color {
ffio = ffio and
(this.frame_rect_x0 == 0) and
(this.frame_rect_y0 == 0) and
@@ -588,7 +591,7 @@
i += 1
}
- if this.quirk_enabled_background_is_opaque {
+ if this.quirk_enabled_honor_background_color {
if (background_color_index <> 0) and
((background_color_index as base.u32) < num_palette_entries) {
diff --git a/test/c/std/gif.c b/test/c/std/gif.c
index 52a82e6..af039a5 100644
--- a/test/c/std/gif.c
+++ b/test/c/std/gif.c
@@ -873,7 +873,7 @@
RETURN_FAIL("q=%d: initialize: \"%s\"", q, status);
}
wuffs_gif__decoder__set_quirk_enabled(
- &dec, wuffs_gif__quirk_background_is_opaque, q);
+ &dec, wuffs_gif__quirk_honor_background_color, q);
wuffs_base__image_config ic = ((wuffs_base__image_config){});
wuffs_base__io_reader src_reader = wuffs_base__io_buffer__reader(&src);
@@ -915,7 +915,7 @@
RETURN_FAIL("q=%d: initialize: \"%s\"", q, status);
}
wuffs_gif__decoder__set_quirk_enabled(
- &dec, wuffs_gif__quirk_background_is_opaque, q);
+ &dec, wuffs_gif__quirk_honor_background_color, q);
wuffs_base__image_config ic = ((wuffs_base__image_config){});
wuffs_base__io_reader src_reader = wuffs_base__io_buffer__reader(&src);