[project @ 2004-04-11 14:30:18 by rjw]

Fixed memory leak.
Fixed background not being cleared for thumbnails that are not oversampled.

svn path=/import/netsurf/; revision=753
This commit is contained in:
Richard Wilson 2004-04-11 14:30:18 +00:00
parent 568ea65400
commit cc48a49f21
1 changed files with 51 additions and 51 deletions

View File

@ -85,47 +85,44 @@ void thumbnail_create(struct content *content, osspriteop_area *area,
width << option_thumbnail_oversampling,
height << option_thumbnail_oversampling,
(os_mode)0x301680b5);
}
}
/* Oversample if we have an oversampled sprite, don't otherwise
*/
if (oversampled_area != NULL) {
/* Scale up for oversampling
*/
width = width << option_thumbnail_oversampling;
height = height << option_thumbnail_oversampling;
/* Oversample if we have an oversampled sprite, don't otherwise
*/
if (oversampled_area != NULL) {
/* Scale up for oversampling
*/
width = width << option_thumbnail_oversampling;
height = height << option_thumbnail_oversampling;
/* Calculate the scale
*/
scale = (float) width / (float) content->width;
/* Switch output and redraw oversampled
*/
save_area = thumbnail_switch_output(oversampled_area,
(osspriteop_header *)(oversampled_area + 1));
if (save_area == NULL) return;
/* Switch output and redraw oversampled
*/
save_area = thumbnail_switch_output(oversampled_area,
(osspriteop_header *)(oversampled_area + 1));
if (save_area == NULL) return;
content_redraw(content, 0, height * 2, width * 2, height * 2,
0, 0, width * 2, height * 2, scale);
thumbnail_restore_output(save_area);
/* xosspriteop_save_sprite_file(osspriteop_USER_AREA,
oversampled_area, "oversample");
*/
/* Scale back
*/
width = width >> option_thumbnail_oversampling;
height = height >> option_thumbnail_oversampling;
width = width >> option_thumbnail_oversampling;
height = height >> option_thumbnail_oversampling;
/* Switch output to the final sprite
*/
save_area = thumbnail_switch_output(area, sprite);
if (save_area == NULL) {
free(oversampled_area);
return;
}
/* Switch output to the final sprite
*/
save_area = thumbnail_switch_output(area, sprite);
if (save_area == NULL) {
free(oversampled_area);
return;
}
/* Get Tinct to dither and bilinear filter back to what we want.
*/
/* Get Tinct to dither and bilinear filter back to what we want.
*/
_swix(Tinct_PlotScaled, _IN(2) | _IN(3) | _IN(4) | _IN(5) | _IN(6) | _IN(7),
(char *)(oversampled_area + 1), 0, 0, width * 2, height * 2,
(1<<1) | (1<<2));
@ -133,28 +130,28 @@ void thumbnail_create(struct content *content, osspriteop_area *area,
/* Restore output
*/
thumbnail_restore_output(save_area);
/* Free oversampled memory area
*/
free(oversampled_area);
/* xosspriteop_save_sprite_file(osspriteop_USER_AREA,
area, "thumb_scaled");
*/
} else {
} else {
/* Calculate the scale
*/
scale = (float) width / (float) content->width;
LOG(("Scaling to %f and outputting at %ix%i", scale, width, height));
/* Switch output and redraw
*/
save_area = thumbnail_switch_output(area, sprite);
if (save_area == NULL) return;
/* Switch output and redraw
*/
save_area = thumbnail_switch_output(area, sprite);
if (save_area == NULL) return;
colourtrans_set_gcol(os_COLOUR_WHITE, colourtrans_SET_BG,
os_ACTION_OVERWRITE, 0);
os_clg();
content_redraw(content, 0, height * 2, width * 2, height * 2,
0, 0, width * 2, height * 2, scale);
thumbnail_restore_output(save_area);
/* xosspriteop_save_sprite_file(osspriteop_USER_AREA,
area, "thumb");
*/
}
}
}
@ -253,11 +250,7 @@ osspriteop_area* thumbnail_initialise(int width, int height, os_mode mode) {
memset(sprite_image, 0xff, area_size - sizeof(osspriteop_area) -
sizeof(osspriteop_header) - 2048);
}
/* xosfile_save_stamped("thumb", 0xff9,
((char *)sprite_area) + 4,
((char *)sprite_area) + area_size);
*/
/* Return our sprite area
*/
return sprite_area;
@ -273,6 +266,13 @@ static void thumbnail_test(void) {
unsigned int area_size;
osspriteop_area *sprite_area;
/* If we're configured not to use 32bpp then we don't
*/
if (!option_thumbnail_32bpp) {
thumbnail_32bpp_available = 0;
return;
}
/* Get enough memory for a 1x1 32bpp sprite
*/
area_size = sizeof(osspriteop_area) +
@ -316,7 +316,7 @@ static struct thumbnail_save_area* thumbnail_switch_output(osspriteop_area *spri
save_area = calloc(sizeof(struct thumbnail_save_area), 1);
if (save_area == NULL) return NULL;
/* Allocate OS_SpriteOp save area
/* Allocate OS_SpriteOp save area
*/
if (xosspriteop_read_save_area_size(osspriteop_PTR, sprite_area,
(osspriteop_id)sprite_header, &size)) {
@ -328,7 +328,7 @@ static struct thumbnail_save_area* thumbnail_switch_output(osspriteop_area *spri
*/
save_area->save_area = malloc((unsigned)size);
if (save_area->save_area == NULL) {
free(save_area);
free(save_area);
return NULL;
}
save_area->save_area->a[0] = 0;
@ -343,7 +343,7 @@ static struct thumbnail_save_area* thumbnail_switch_output(osspriteop_area *spri
free(save_area);
return NULL;
}
return save_area;
return save_area;
}
@ -351,8 +351,8 @@ static struct thumbnail_save_area* thumbnail_switch_output(osspriteop_area *spri
*/
static void thumbnail_restore_output(struct thumbnail_save_area *save_area) {
/* We don't care if we err, as there's nothing we can do about it
*/
/* We don't care if we err, as there's nothing we can do about it
*/
xosspriteop_switch_output_to_sprite(osspriteop_PTR,
(osspriteop_area *)save_area->context1,
(osspriteop_id)save_area->context2,