From b7bb766e95a3ffb552784ae40bac76db4651d5d9 Mon Sep 17 00:00:00 2001 From: Richard Wilson Date: Fri, 16 Jul 2004 19:47:03 +0000 Subject: [PATCH] [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 --- content/content.c | 18 +++++++++++ content/content.h | 6 ++++ content/content_type.h | 4 +++ makefile | 2 +- render/box.c | 4 +++ 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 +++++++++ utils/config.h | 1 + 13 files changed, 173 insertions(+), 3 deletions(-) create mode 100644 riscos/mng.c create mode 100644 riscos/mng.h diff --git a/content/content.c b/content/content.c index dacb46df8..d7dd52515 100644 --- a/content/content.c +++ b/content/content.c @@ -30,6 +30,9 @@ #ifdef WITH_PNG #include "netsurf/riscos/png.h" #endif +#ifdef WITH_MNG +#include "netsurf/riscos/mng.h" +#endif #ifdef WITH_GIF #include "netsurf/riscos/gif.h" #endif @@ -73,6 +76,14 @@ static const struct mime_entry mime_map[] = { #ifdef WITH_PNG {"image/png", CONTENT_PNG}, #endif +#ifdef WITH_MNG + {"image/jng", CONTENT_JNG}, + {"image/x-jng", CONTENT_JNG}, + {"image/mng", CONTENT_MNG}, + {"image/x-mng", CONTENT_MNG}, + {"video/mng", CONTENT_MNG}, + {"video/x-mng", CONTENT_MNG}, +#endif #ifdef WITH_DRAW {"image/x-drawfile", CONTENT_DRAW}, #endif @@ -98,6 +109,9 @@ const char *content_type_name[] = { #ifdef WITH_PNG "PNG", #endif +#ifdef WITH_MNG + "MNG", +#endif #ifdef WITH_SPRITE "SPRITE", #endif @@ -162,6 +176,10 @@ static const struct handler_entry handler_map[] = { {nspng_create, nspng_process_data, nspng_convert, 0, nspng_destroy, 0, nspng_redraw, 0, 0, 0}, #endif +#ifdef WITH_MNG + {nsmng_create, nsmng_process_data, nsmng_convert, + 0, nsmng_destroy, 0, nsmng_redraw, 0, 0, 0}, +#endif #ifdef WITH_SPRITE {sprite_create, sprite_process_data, sprite_convert, 0, sprite_destroy, 0, sprite_redraw, 0, 0, 0}, diff --git a/content/content.h b/content/content.h index 09d59be45..e441e6b36 100644 --- a/content/content.h +++ b/content/content.h @@ -110,6 +110,9 @@ #ifdef WITH_PNG #include "netsurf/riscos/png.h" #endif +#ifdef WITH_MNG +#include "netsurf/riscos/mng.h" +#endif #ifdef WITH_SPRITE #include "netsurf/riscos/sprite.h" #endif @@ -200,6 +203,9 @@ struct content { #ifdef WITH_PNG struct content_png_data png; #endif +#ifdef WITH_MNG + struct content_mng_data mng; +#endif #ifdef WITH_SPRITE struct content_sprite_data sprite; #endif diff --git a/content/content_type.h b/content/content_type.h index 39d2b9f13..661a116a8 100644 --- a/content/content_type.h +++ b/content/content_type.h @@ -31,6 +31,10 @@ typedef enum { #ifdef WITH_PNG CONTENT_PNG, #endif +#ifdef WITH_MNG + CONTENT_JNG, + CONTENT_MNG, +#endif #ifdef WITH_SPRITE CONTENT_SPRITE, #endif diff --git a/makefile b/makefile index 714a09030..76caa0cf8 100644 --- a/makefile +++ b/makefile @@ -28,7 +28,7 @@ OBJECTS_RISCOS += 401login.o debugwin.o \ dialog.o download.o draw.o filetype.o font.o gif.o \ gifread.o gui.o help.o history.o hotlist.o htmlinstance.o \ htmlredraw.o jpeg.o menus.o mouseactions.o plugin.o \ - png.o save.o save_complete.o save_draw.o save_text.o \ + png.o mng.o save.o save_complete.o save_draw.o save_text.o \ schedule.o sprite.o textselection.o theme.o thumbnail.o \ toolbar.o ufont.o uri.o url_protocol.o wimp.o window.o # riscos/ diff --git a/render/box.c b/render/box.c index b4e06bb5f..bb2ac8a44 100644 --- a/render/box.c +++ b/render/box.c @@ -70,6 +70,10 @@ static const content_type image_types[] = { #ifdef WITH_PNG CONTENT_PNG, #endif +#ifdef WITH_MNG + CONTENT_JNG, + CONTENT_MNG, +#endif #ifdef WITH_SPRITE CONTENT_SPRITE, #endif 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); diff --git a/utils/config.h b/utils/config.h index 4c7e55f4a..f119b4e7e 100644 --- a/utils/config.h +++ b/utils/config.h @@ -22,6 +22,7 @@ #define WITH_GIF #define WITH_JPEG #define WITH_PNG +#define WITH_MNG #endif #ifdef riscos #define WITH_DRAW