From b7bb766e95a3ffb552784ae40bac76db4651d5d9 Mon Sep 17 00:00:00 2001 From: Richard Wilson Date: Fri, 16 Jul 2004 19:47:03 +0000 Subject: [project @ 2004-07-16 19:47:02 by rjw] Fix for hotlist menu selection. Interface for MNG/JNG display. svn path=/import/netsurf/; revision=1083 --- riscos/filetype.c | 4 +++ riscos/htmlredraw.c | 9 +++++++ riscos/menus.c | 7 +++-- riscos/mng.c | 73 +++++++++++++++++++++++++++++++++++++++++++++++++++++ riscos/mng.h | 28 ++++++++++++++++++++ riscos/save.c | 4 +++ riscos/save_draw.c | 16 ++++++++++++ 7 files changed, 139 insertions(+), 2 deletions(-) create mode 100644 riscos/mng.c create mode 100644 riscos/mng.h (limited to 'riscos') diff --git a/riscos/filetype.c b/riscos/filetype.c index c5bd20a1b..479b3acdc 100644 --- a/riscos/filetype.c +++ b/riscos/filetype.c @@ -26,6 +26,8 @@ static const struct type_entry type_map[] = { {0x695, "image/gif"}, {0xaff, "image/x-drawfile"}, {0xb60, "image/png"}, + {0x251, "image/jng"}, /* currently in user space */ + {0x252, "image/mng"}, /* currently in user space */ {0xc85, "image/jpeg"}, {0xf79, "text/css"}, {0xfaf, "text/html"}, @@ -125,6 +127,8 @@ int ro_content_filetype(struct content *content) case CONTENT_CSS: return 0xf79; case CONTENT_JPEG: return 0xc85; case CONTENT_PNG: return 0xb60; + case CONTENT_JNG: return 0x251; /* currently in user space */ + case CONTENT_MNG: return 0x252; /* currently in user space */ case CONTENT_GIF: return 0x695; case CONTENT_SPRITE: return 0xff9; case CONTENT_DRAW: return 0xaff; diff --git a/riscos/htmlredraw.c b/riscos/htmlredraw.c index dbe27b372..2c4da8a28 100644 --- a/riscos/htmlredraw.c +++ b/riscos/htmlredraw.c @@ -739,6 +739,15 @@ void html_redraw_background(long xi, long yi, int width, int height, tinct_options); break; #endif +#ifdef WITH_PNG + case CONTENT_JNG: + case CONTENT_MNG: + _swix(Tinct_PlotScaledAlpha, _IN(2) | _IN(3) | _IN(4) | _IN(5) | _IN(6) | _IN(7), + ((char*) box->background->data.mng.sprite_area + box->background->data.mng.sprite_area->first), + x, y - image_height, image_width, image_height, + tinct_options); + break; +#endif #ifdef WITH_JPEG case CONTENT_JPEG: _swix(Tinct_PlotScaled, _IN(2) | _IN(3) | _IN(4) | _IN(5) | _IN(6) | _IN(7), diff --git a/riscos/menus.c b/riscos/menus.c index fb5bc65ad..a2c223706 100644 --- a/riscos/menus.c +++ b/riscos/menus.c @@ -582,10 +582,12 @@ void ro_gui_menu_selection(wimp_selection *selection) } break; case 2: /* Select all */ - ro_gui_hotlist_keypress(1); /* CTRL+A */ + ro_gui_hotlist_set_selected(true); + ro_gui_menu_prepare_hotlist(); break; case 3: /* Clear */ - ro_gui_hotlist_keypress(26); /* CTRL+Z */ + ro_gui_hotlist_set_selected(false); + ro_gui_menu_prepare_hotlist(); break; } } else if (current_menu == browser_menu) { @@ -1387,6 +1389,7 @@ void ro_gui_menu_objectinfo(wimp_message_menu_warning *warning) if (box->object->mime_type) mime = box->object->mime_type; } else if (c->type == CONTENT_JPEG || c->type == CONTENT_PNG || + c->type == CONTENT_JNG || c->type == CONTENT_MNG || c->type == CONTENT_GIF || c->type == CONTENT_SPRITE || c->type == CONTENT_DRAW) { sprintf(icon_buf, "file_%x", ro_content_filetype(c)); diff --git a/riscos/mng.c b/riscos/mng.c new file mode 100644 index 000000000..c5c124ed0 --- /dev/null +++ b/riscos/mng.c @@ -0,0 +1,73 @@ +/* + * This file is part of NetSurf, http://netsurf.sourceforge.net/ + * Licensed under the GNU General Public License, + * http://www.opensource.org/licenses/gpl-license + * Copyright 2004 Richard Wilson + */ + +#include +#include +#include +#include +#include +#include "oslib/osspriteop.h" +#include "netsurf/utils/config.h" +#include "netsurf/content/content.h" +#include "netsurf/riscos/gui.h" +#include "netsurf/riscos/options.h" +#include "netsurf/riscos/mng.h" +#include "netsurf/riscos/tinct.h" +#include "netsurf/utils/log.h" +#include "netsurf/utils/messages.h" +#include "netsurf/utils/utils.h" + +#ifdef WITH_MNG + +bool nsmng_create(struct content *c, const char *params[]) { + return false; +} + + +bool nsmng_process_data(struct content *c, char *data, unsigned int size) { + return true; +} + + +bool nsmng_convert(struct content *c, int width, int height) { + return true; +} + + +void nsmng_destroy(struct content *c) { +} + + +void nsmng_redraw(struct content *c, int x, int y, + int width, int height, + int clip_x0, int clip_y0, int clip_x1, int clip_y1, + float scale) { + unsigned int tinct_options; + + /* If we have a gui_window then we work from there, if not we use the global + settings as we are drawing a thumbnail. + */ + if (ro_gui_current_redraw_gui) { + tinct_options = (ro_gui_current_redraw_gui->option_filter_sprites?tinct_BILINEAR_FILTER:0) | + (ro_gui_current_redraw_gui->option_dither_sprites?tinct_DITHER:0); + } else { + tinct_options = (option_filter_sprites?tinct_BILINEAR_FILTER:0) | + (option_dither_sprites?tinct_DITHER:0); + } + + /* Tinct currently only handles 32bpp sprites that have an embedded alpha mask. Any + sprites not matching the required specifications are ignored. See the Tinct + documentation for further information. + */ +/* _swix(Tinct_PlotScaledAlpha, _IN(2) | _IN(3) | _IN(4) | _IN(5) | _IN(6) | _IN(7), + ((char *) c->data.mng.sprite_area + c->data.mng.sprite_area->first), + x, y - height, + width, height, + tinct_options); +*/ +} +#endif diff --git a/riscos/mng.h b/riscos/mng.h new file mode 100644 index 000000000..41a09403a --- /dev/null +++ b/riscos/mng.h @@ -0,0 +1,28 @@ +/* + * This file is part of NetSurf, http://netsurf.sourceforge.net/ + * Licensed under the GNU General Public License, + * http://www.opensource.org/licenses/gpl-license + * Copyright 2004 Richard Wilson + */ + +#ifndef _NETSURF_RISCOS_MNG_H_ +#define _NETSURF_RISCOS_MNG_H_ + +#include "oslib/osspriteop.h" + +struct content; + +struct content_mng_data { + osspriteop_area *sprite_area; + char *sprite_image; +}; + +bool nsmng_create(struct content *c, const char *params[]); +bool nsmng_process_data(struct content *c, char *data, unsigned int size); +bool nsmng_convert(struct content *c, int width, int height); +void nsmng_destroy(struct content *c); +void nsmng_redraw(struct content *c, int x, int y, + int width, int height, + int clip_x0, int clip_y0, int clip_x1, int clip_y1, + float scale); +#endif diff --git a/riscos/save.c b/riscos/save.c index 4a1d70580..14564f727 100644 --- a/riscos/save.c +++ b/riscos/save.c @@ -429,6 +429,10 @@ void ro_gui_save_object_native(struct content *c, char *path) case CONTENT_PNG: error = xosspriteop_save_sprite_file(osspriteop_USER_AREA, c->data.png.sprite_area, path); break; + case CONTENT_JNG: + case CONTENT_MNG: + error = xosspriteop_save_sprite_file(osspriteop_USER_AREA, c->data.mng.sprite_area, path); + break; case CONTENT_GIF: /* create sprite area */ temp = calloc(c->data.gif.gif->frame_image->size+16, diff --git a/riscos/save_draw.c b/riscos/save_draw.c index ae70318d1..a9c49f82a 100644 --- a/riscos/save_draw.c +++ b/riscos/save_draw.c @@ -596,6 +596,10 @@ static bool add_box(struct box *box, colour cbc, int x, int y) case CONTENT_JPEG: #ifdef WITH_PNG case CONTENT_PNG: +#endif +#ifdef WITH_MNG + case CONTENT_JNG: + case CONTENT_MNG: #endif case CONTENT_GIF: #ifdef WITH_SPRITE @@ -703,6 +707,12 @@ static bool add_graphic(struct content *content, struct box *box, case CONTENT_PNG: sprite_length = ((osspriteop_header*)((char*)content->data.png.sprite_area+content->data.png.sprite_area->first))->size; break; +#endif +#ifdef WITH_MNG + case CONTENT_JNG: + case CONTENT_MNG: + sprite_length = ((osspriteop_header*)((char*)content->data.mng.sprite_area+content->data.mng.sprite_area->first))->size; + break; #endif case CONTENT_GIF: sprite_length = content->data.gif.gif->frame_image->size; @@ -736,6 +746,12 @@ static bool add_graphic(struct content *content, struct box *box, case CONTENT_PNG: memcpy((char*)ds+16, (char*)content->data.png.sprite_area+content->data.png.sprite_area->first, (unsigned)sprite_length); break; +#endif +#ifdef WITH_MNG + case CONTENT_JNG: + case CONTENT_MNG: + memcpy((char*)ds+16, (char*)content->data.mng.sprite_area+content->data.mng.sprite_area->first, (unsigned)sprite_length); + break; #endif case CONTENT_GIF: memcpy((char*)ds+16, (char*)content->data.gif.gif->frame_image, (unsigned)sprite_length); -- cgit v1.2.3