diff options
author | Richard Wilson <rjw@netsurf-browser.org> | 2004-07-20 20:02:59 +0000 |
---|---|---|
committer | Richard Wilson <rjw@netsurf-browser.org> | 2004-07-20 20:02:59 +0000 |
commit | 6ee54bec7aefca571b9f3900e339e21e90123016 (patch) | |
tree | cd90583e5e50a6b4f0c7ac6fc2b68391491d8acd /riscos/buffer.c | |
parent | 3a7261fa101548d4ff8ae5c8dea47c5aff71b14c (diff) | |
download | netsurf-6ee54bec7aefca571b9f3900e339e21e90123016.tar.gz netsurf-6ee54bec7aefca571b9f3900e339e21e90123016.tar.bz2 |
[project @ 2004-07-20 20:02:59 by rjw]
Fix for buffered text plotting. GUI control over font blending and buffering.
svn path=/import/netsurf/; revision=1129
Diffstat (limited to 'riscos/buffer.c')
-rw-r--r-- | riscos/buffer.c | 27 |
1 files changed, 17 insertions, 10 deletions
diff --git a/riscos/buffer.c b/riscos/buffer.c index aaa74f390..1a8dafd85 100644 --- a/riscos/buffer.c +++ b/riscos/buffer.c @@ -66,6 +66,7 @@ void ro_gui_buffer_open(wimp_draw *redraw) { os_coord sprite_size; int bpp, word_size; osbool palette; + os_error *error; /* Close any open buffer */ @@ -92,8 +93,11 @@ void ro_gui_buffer_open(wimp_draw *redraw) { buffer_size = sizeof(osspriteop_area) + sizeof(osspriteop_header) + (word_size * sprite_size.y); if (palette) buffer_size += ((1 << (1 << bpp)) << 3); - if (!(buffer = (osspriteop_area *)malloc(buffer_size))) return; - + buffer = malloc(buffer_size); + if (!buffer) { + LOG(("Buffer memory allocation failed.")); + return; + } /* Fill in the sprite area details */ buffer->size = buffer_size + 1; @@ -104,9 +108,10 @@ void ro_gui_buffer_open(wimp_draw *redraw) { /* Fill in the sprite header details */ sprintf(name, "buffer"); - if (xosspriteop_get_sprite_user_coords(osspriteop_NAME, buffer, + if ((error = xosspriteop_get_sprite_user_coords(osspriteop_NAME, buffer, name, palette, - clipping.x0, clipping.y0, clipping.x1, clipping.y1)) { + clipping.x0, clipping.y0, clipping.x1, clipping.y1))) { +// LOG(("Grab error '%s'", error->errmess)); free(buffer); buffer = NULL; return; @@ -114,8 +119,9 @@ void ro_gui_buffer_open(wimp_draw *redraw) { /* Allocate OS_SpriteOp save area */ - if (xosspriteop_read_save_area_size(osspriteop_NAME, buffer, - (osspriteop_id)name, &size)) { + if ((error = xosspriteop_read_save_area_size(osspriteop_NAME, buffer, + (osspriteop_id)name, &size))) { +// LOG(("Save area error '%s'", error->errmess)); free(buffer); buffer = NULL; return; @@ -129,15 +135,16 @@ void ro_gui_buffer_open(wimp_draw *redraw) { /* Switch output to sprite */ - if (xosspriteop_switch_output_to_sprite(osspriteop_NAME, buffer, + if ((error = xosspriteop_switch_output_to_sprite(osspriteop_NAME, buffer, (osspriteop_id)name, save_area, - 0, (int *)&context1, (int *)&context2, (int *)&context3)) { + 0, (int *)&context1, (int *)&context2, (int *)&context3))) { +// LOG(("Switching error '%s'", error->errmess)); free(save_area); free(buffer); buffer = NULL; return; } - + /* Move the origin such that (x0, y0) becomes (0, 0). To do this we use VDU 29,(1 << 16) - x0; (1 << 16) - y0; because RISC OS is so insanely legacy driven. @@ -158,7 +165,7 @@ void ro_gui_buffer_close(void) { /* Check we have an open buffer */ if (!buffer) return; - + /* Remove any redirection and origin hacking */ xosspriteop_switch_output_to_sprite(osspriteop_PTR, |