From 912d09b1cb54de90d88d4f804e3552f55c682986 Mon Sep 17 00:00:00 2001 From: John Mark Bell Date: Wed, 11 Aug 2004 16:26:13 +0000 Subject: [project @ 2004-08-11 16:26:13 by jmb] Make content_redraw return a bool Printing of foreground images now uses OS_SpriteOp Printing of background images disabled Mega-paranoid SWI result checking in htmlredraw.c Rearranged GIF data structure slightly - updates to reflect this. Other stuff I've probably forgotten svn path=/import/netsurf/; revision=1208 --- riscos/gifread.c | 45 +++++++++++++++++++++++++++++---------------- 1 file changed, 29 insertions(+), 16 deletions(-) (limited to 'riscos/gifread.c') diff --git a/riscos/gifread.c b/riscos/gifread.c index 437d8dd88..5ba180a0e 100644 --- a/riscos/gifread.c +++ b/riscos/gifread.c @@ -110,6 +110,7 @@ int gif_initialise(struct gif_animation *gif) { unsigned int index; int return_value; unsigned int frame; + osspriteop_header *header; /* Check for sufficient data to be a GIF */ @@ -191,19 +192,25 @@ int gif_initialise(struct gif_animation *gif) { /* Initialise the sprite header */ - if ((gif->frame_image = (osspriteop_header *)malloc(sizeof(osspriteop_header))) == NULL) { + if ((gif->frame_image = (osspriteop_area *)malloc(sizeof(osspriteop_area)+sizeof(osspriteop_header))) == NULL) { gif_finalise(gif); return GIF_INSUFFICIENT_MEMORY; } - gif->frame_image->size = sizeof(osspriteop_header); - strcpy(gif->frame_image->name, "gif"); - gif->frame_image->left_bit = 0; - gif->frame_image->right_bit = 31; - gif->frame_image->width = 0; - gif->frame_image->height = 0; - gif->frame_image->image = sizeof(osspriteop_header); - gif->frame_image->mask = sizeof(osspriteop_header); - gif->frame_image->mode = (os_mode) 0x301680b5; + gif->frame_image->size = sizeof(osspriteop_area) + sizeof(osspriteop_header); + gif->frame_image->sprite_count = 1; + gif->frame_image->first = 16; + gif->frame_image->used = gif->frame_image->size; + header = (osspriteop_header*)((char*)gif->frame_image + + gif->frame_image->first); + header->size = sizeof(osspriteop_header); + strcpy(header->name, "gif"); + header->left_bit = 0; + header->right_bit = 31; + header->width = 0; + header->height = 0; + header->image = sizeof(osspriteop_header); + header->mask = sizeof(osspriteop_header); + header->mode = (os_mode) 0x301680b5; /* Remember we've done this now */ @@ -312,7 +319,8 @@ int gif_initialise(struct gif_animation *gif) { 0 for success */ static int gif_initialise_sprite(struct gif_animation *gif, unsigned int width, unsigned int height) { - struct osspriteop_header *buffer; + struct osspriteop_area *buffer; + struct osspriteop_header *header; unsigned int max_width; unsigned int max_height; unsigned int frame_bytes; @@ -325,11 +333,12 @@ static int gif_initialise_sprite(struct gif_animation *gif, unsigned int width, */ max_width = (width > gif->width) ? width : gif->width; max_height = (height > gif->height) ? height : gif->height; - frame_bytes = max_width * max_height * 4 + sizeof(osspriteop_header); + frame_bytes = max_width * max_height * 4 + + sizeof(osspriteop_header) + sizeof(osspriteop_area); /* Allocate some more memory */ - if ((buffer = (osspriteop_header *)realloc(gif->frame_image, frame_bytes)) == NULL) { + if ((buffer = (osspriteop_area *)realloc(gif->frame_image, frame_bytes)) == NULL) { return GIF_INSUFFICIENT_MEMORY; } gif->frame_image = buffer; @@ -342,8 +351,12 @@ static int gif_initialise_sprite(struct gif_animation *gif, unsigned int width, /* Update our sprite image */ buffer->size = frame_bytes; - buffer->width = max_width - 1; - buffer->height = max_height - 1; + buffer->used = frame_bytes; + header = (osspriteop_header*)((char*)gif->frame_image + + gif->frame_image->first); + header->size = frame_bytes - sizeof(osspriteop_area); + header->width = max_width - 1; + header->height = max_height - 1; /* Invalidate our currently decoded image */ @@ -640,7 +653,7 @@ int gif_decode_frame(struct gif_animation *gif, unsigned int frame) { sprite and clear what we need as some frames have multiple images which would produce errors. */ - frame_data = (unsigned int*)((char *)gif->frame_image + sizeof(osspriteop_header)); + frame_data = (unsigned int*)((char *)gif->frame_image + gif->frame_image->first + sizeof(osspriteop_header)); if (!clear_image) { if ((frame == 0) || (gif->decoded_frame == 0xffffffff)) { memset((char*)frame_data, 0x00, gif->width * gif->height * sizeof(int)); -- cgit v1.2.3