From: Ray Strode Date: Wed, 10 Sep 2008 17:31:47 +0000 (-0400) Subject: Force shadow frame buffer to have cairo compatible row stride X-Git-Tag: 0.6.0~160 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=ea53cbf0e863a28bd8aa6d39fbfdd66e2d764d7d;p=thirdparty%2Fplymouth.git Force shadow frame buffer to have cairo compatible row stride Previously it would keep the rowstride of the scanout buffer, which isn't right. The entire point of the shadow buffer is that it has a known at compile time constant memory layout. (This change fixes password prompts on some hardware) --- diff --git a/src/libply/ply-frame-buffer.c b/src/libply/ply-frame-buffer.c index be31b015..9cd6111c 100644 --- a/src/libply/ply-frame-buffer.c +++ b/src/libply/ply-frame-buffer.c @@ -158,7 +158,7 @@ flush_generic (ply_frame_buffer_t *buffer) uint32_t pixel_value; uint_fast32_t device_pixel_value; - pixel_value = buffer->shadow_buffer[row * buffer->row_stride + column]; + pixel_value = buffer->shadow_buffer[row * buffer->area.width + column]; device_pixel_value = ply_frame_buffer_pixel_value_to_device_pixel_value (buffer, @@ -187,7 +187,7 @@ flush_xrgb32 (ply_frame_buffer_t *buffer) y2 = y1 + buffer->area_to_flush.height; dst = &buffer->map_address[(y1 * buffer->row_stride + x1) * 4]; - src = (char *) &buffer->shadow_buffer[y1 * buffer->row_stride + x1]; + src = (char *) &buffer->shadow_buffer[y1 * buffer->area.width + x1]; if (buffer->area_to_flush.width == buffer->row_stride) { @@ -199,7 +199,7 @@ flush_xrgb32 (ply_frame_buffer_t *buffer) { memcpy (dst, src, buffer->area_to_flush.width * 4); dst += buffer->row_stride * 4; - src += buffer->row_stride * 4; + src += buffer->area.width * 4; } } @@ -428,12 +428,12 @@ ply_frame_buffer_blend_value_at_pixel (ply_frame_buffer_t *buffer, if ((pixel_value >> 24) != 0xff) { - old_pixel_value = buffer->shadow_buffer[y * buffer->row_stride + x]; + old_pixel_value = buffer->shadow_buffer[y * buffer->area.width + x]; pixel_value = blend_two_pixel_values (pixel_value, old_pixel_value); } - buffer->shadow_buffer[y * buffer->row_stride + x] = pixel_value; + buffer->shadow_buffer[y * buffer->area.width + x] = pixel_value; } static void @@ -581,8 +581,8 @@ ply_frame_buffer_open (ply_frame_buffer_t *buffer) } buffer->shadow_buffer = - realloc (buffer->shadow_buffer, 4 * buffer->row_stride * buffer->area.height); - memset (buffer->shadow_buffer, 0, 4 * buffer->row_stride * buffer->area.height); + realloc (buffer->shadow_buffer, 4 * buffer->area.width * buffer->area.height); + memset (buffer->shadow_buffer, 0, 4 * buffer->area.width * buffer->area.height); ply_frame_buffer_fill_with_color (buffer, NULL, 0.0, 0.0, 0.0, 1.0); is_open = true; @@ -804,7 +804,7 @@ ply_frame_buffer_fill_with_gradient (ply_frame_buffer_t *buffer, (((green + NOISE ()) & COLOR_MASK) >> GREEN_SHIFT) | (((blue + NOISE ()) & COLOR_MASK) >> BLUE_SHIFT); - buffer->shadow_buffer[y * buffer->row_stride + x] = pixel; + buffer->shadow_buffer[y * buffer->area.width + x] = pixel; } }