[project @ 2004-09-03 22:44:47 by bursa]

Add generic bitmap functions. Move jpeg and mng code from riscos/ to image/ and update to use bitmap. Note: background tiling and drawfile export for jpeg and mng/png are broken.

svn path=/import/netsurf/; revision=1265
This commit is contained in:
James Bursa 2004-09-03 22:44:48 +00:00
parent fb5082605c
commit 3371a27391
18 changed files with 349 additions and 197 deletions

View File

@ -22,17 +22,15 @@
#include "netsurf/content/fetch.h"
#include "netsurf/content/fetchcache.h"
#include "netsurf/css/css.h"
#include "netsurf/image/bitmap.h"
#include "netsurf/desktop/options.h"
#include "netsurf/render/html.h"
#include "netsurf/render/textplain.h"
#ifdef WITH_JPEG
#include "netsurf/riscos/jpeg.h"
#endif
#ifdef WITH_PNG
#include "netsurf/riscos/png.h"
#include "netsurf/image/jpeg.h"
#endif
#ifdef WITH_MNG
#include "netsurf/riscos/mng.h"
#include "netsurf/image/mng.h"
#endif
#ifdef WITH_GIF
#include "netsurf/riscos/gif.h"
@ -82,7 +80,7 @@ static const struct mime_entry mime_map[] = {
#ifdef WITH_JPEG
{"image/pjpeg", CONTENT_JPEG},
#endif
#ifdef WITH_PNG
#ifdef WITH_MNG
{"image/png", CONTENT_PNG},
#endif
#ifdef WITH_DRAW
@ -115,10 +113,8 @@ const char *content_type_name[] = {
#ifdef WITH_GIF
"GIF",
#endif
#ifdef WITH_PNG
"PNG",
#endif
#ifdef WITH_MNG
"PNG",
"JNG",
"MNG",
#endif
@ -173,18 +169,16 @@ static const struct handler_entry handler_map[] = {
0, 0, 0, 0, 0, 0, true},
{0, 0, css_convert, 0, css_destroy, 0, 0, 0, 0, false},
#ifdef WITH_JPEG
{nsjpeg_create, 0, nsjpeg_convert,
0, nsjpeg_destroy, 0, nsjpeg_redraw, 0, 0, false},
{0, 0, nsjpeg_convert,
0, nsjpeg_destroy, 0, bitmap_redraw, 0, 0, false},
#endif
#ifdef WITH_GIF
{nsgif_create, 0, nsgif_convert,
0, nsgif_destroy, 0, nsgif_redraw, 0, 0, false},
#endif
#ifdef WITH_PNG
#ifdef WITH_MNG
{nsmng_create, nsmng_process_data, nsmng_convert,
0, nsmng_destroy, 0, nsmng_redraw, 0, 0, false},
#endif
#ifdef WITH_MNG
{nsmng_create, nsmng_process_data, nsmng_convert,
0, nsmng_destroy, 0, nsmng_redraw, 0, 0, false},
{nsmng_create, nsmng_process_data, nsmng_convert,
@ -270,6 +264,7 @@ struct content * content_create(const char *url)
c->width = 0;
c->height = 0;
c->available_width = 0;
c->bitmap = 0;
c->fresh = false;
c->size = sizeof(struct content);
c->title = 0;

View File

@ -102,7 +102,7 @@
#include "netsurf/css/css.h"
#include "netsurf/render/html.h"
#ifdef WITH_JPEG
#include "netsurf/riscos/jpeg.h"
#include "netsurf/image/jpeg.h"
#endif
#ifdef WITH_GIF
#include "netsurf/riscos/gif.h"
@ -110,11 +110,8 @@
#ifdef WITH_PLUGIN
#include "netsurf/riscos/plugin.h"
#endif
#ifdef WITH_PNG
#include "netsurf/riscos/png.h"
#endif
#ifdef WITH_MNG
#include "netsurf/riscos/mng.h"
#include "netsurf/image/mng.h"
#endif
#ifdef WITH_SPRITE
#include "netsurf/riscos/sprite.h"
@ -124,6 +121,7 @@
#endif
struct bitmap;
struct box;
struct browser_window;
struct content;
@ -208,9 +206,6 @@ struct content {
#ifdef WITH_GIF
struct content_gif_data gif;
#endif
#ifdef WITH_PNG
struct content_png_data png;
#endif
#ifdef WITH_MNG
struct content_mng_data mng;
#endif
@ -225,6 +220,9 @@ struct content {
#endif
} data;
/** Bitmap, for various image contents. */
struct bitmap *bitmap;
/** This content may be given to new users. Indicates that the content
* was fetched using a simple GET, has not expired, and may be
* shared between users. */

View File

@ -28,10 +28,8 @@ typedef enum {
#ifdef WITH_GIF
CONTENT_GIF,
#endif
#ifdef WITH_PNG
CONTENT_PNG,
#endif
#ifdef WITH_MNG
CONTENT_PNG,
CONTENT_JNG,
CONTENT_MNG,
#endif

View File

@ -100,4 +100,9 @@ void history_forward(struct browser_window *bw, struct history *history);
bool history_back_available(struct history *history);
bool history_forward_available(struct history *history);
/* In platform specific schedule.c. */
void schedule(int t, void (*callback)(void *p), void *p);
void schedule_remove(void (*callback)(void *p), void *p);
void schedule_run(void);
#endif

131
gtk/gtk_bitmap.c Normal file
View File

@ -0,0 +1,131 @@
/*
* 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 James Bursa <bursa@users.sourceforge.net>
*/
/** \file
* Generic bitmap handling (GDK / GTK+ implementation).
*
* This implements the interface given by desktop/bitmap.h using GdkPixbufs.
*/
#include <assert.h>
#include <stdbool.h>
#include <string.h>
#include <gdk/gdk.h>
#include <gdk-pixbuf/gdk-pixbuf.h>
#include "netsurf/content/content.h"
#include "netsurf/image/bitmap.h"
extern GdkDrawable *current_drawable;
extern GdkGC *current_gc;
struct bitmap;
/**
* Create a bitmap.
*
* \param width width of image in pixels
* \param height width of image in pixels
* \return an opaque struct bitmap, or NULL on memory exhaustion
*/
struct bitmap *bitmap_create(int width, int height)
{
GdkPixbuf *pixbuf = gdk_pixbuf_new(GDK_COLORSPACE_RGB, true, 8,
width, height);
return (struct bitmap *) pixbuf;
}
/**
* Return a pointer to the pixel data in a bitmap.
*
* \param bitmap a bitmap, as returned by bitmap_create()
* \return pointer to the pixel buffer
*
* The pixel data is packed as BITMAP_FORMAT, possibly with padding at the end
* of rows. The width of a row in bytes is given by bitmap_get_rowstride().
*/
char *bitmap_get_buffer(struct bitmap *bitmap)
{
assert(bitmap);
return gdk_pixbuf_get_pixels((GdkPixbuf *) bitmap);
}
/**
* Find the width of a pixel row in bytes.
*
* \param bitmap a bitmap, as returned by bitmap_create()
* \return width of a pixel row in the bitmap
*/
size_t bitmap_get_rowstride(struct bitmap *bitmap)
{
assert(bitmap);
return gdk_pixbuf_get_rowstride((GdkPixbuf *) bitmap);
}
/**
* Free a bitmap.
*
* \param bitmap a bitmap, as returned by bitmap_create()
*/
void bitmap_destroy(struct bitmap *bitmap)
{
assert(bitmap);
g_object_unref((GdkPixbuf *) bitmap);
}
/**
* Render a bitmap.
*/
bool bitmap_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 long background_colour)
{
GdkPixbuf *scaled;
scaled = gdk_pixbuf_scale_simple((GdkPixbuf *) c->bitmap,
width, height,
GDK_INTERP_BILINEAR);
if (!scaled)
return false;
gdk_draw_pixbuf(current_drawable, current_gc,
scaled,
0, 0,
x, y,
width, height,
GDK_RGB_DITHER_NORMAL, 0, 0);
g_object_unref(scaled);
return true;
}
/**
* Save a bitmap in the platform's native format.
*
* \param bitmap a bitmap, as returned by bitmap_create()
* \param path pathname for file
* \return true on success, false on error and error reported
*/
bool bitmap_save(struct bitmap *bitmap, const char *path)
{
return true;
}

View File

@ -121,3 +121,7 @@ void history_forward(struct browser_window *bw, struct history *history) {}
void gui_401login_open(struct browser_window *bw, struct content *c,
char *realm) {}
void schedule(int t, void (*callback)(void *p), void *p) {}
void schedule_remove(void (*callback)(void *p), void *p) {}
void schedule_run(void) {}

View File

@ -34,8 +34,8 @@ struct gui_window {
struct browser_window *bw;
};
static GtkWidget *current_widget;
static GdkDrawable *current_drawable;
static GdkGC *current_gc;
GdkDrawable *current_drawable;
GdkGC *current_gc;
static gboolean gui_window_expose_event(GtkWidget *widget,

38
image/bitmap.h Normal file
View File

@ -0,0 +1,38 @@
/*
* 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 James Bursa <bursa@users.sourceforge.net>
*/
/** \file
* Generic bitmap handling (interface).
*
* This interface wraps the native platform-specific image format, so that
* portable image convertors can be written.
*
* The bitmap format is either RGBA.
*/
#ifndef _NETSURF_IMAGE_BITMAP_H_
#define _NETSURF_IMAGE_BITMAP_H_
#include <stdbool.h>
#include <stdlib.h>
struct content;
/** An opaque image. */
struct bitmap;
struct bitmap *bitmap_create(int width, int height);
char *bitmap_get_buffer(struct bitmap *bitmap);
size_t bitmap_get_rowstride(struct bitmap *bitmap);
void bitmap_destroy(struct bitmap *bitmap);
bool bitmap_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 long background_colour);
bool bitmap_save(struct bitmap *bitmap, const char *path);
#endif

View File

@ -13,27 +13,25 @@
*/
#include <assert.h>
#include <setjmp.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#define JPEG_INTERNAL_OPTIONS
#include "libjpeg/jpeglib.h"
#include "oslib/osspriteop.h"
#include "netsurf/utils/config.h"
#include "netsurf/content/content.h"
#include "netsurf/riscos/gui.h"
#include "netsurf/riscos/image.h"
#include "netsurf/riscos/jpeg.h"
#include "netsurf/riscos/options.h"
#include "netsurf/image/bitmap.h"
#include "netsurf/image/jpeg.h"
#include "netsurf/utils/log.h"
#include "netsurf/utils/messages.h"
#include "netsurf/utils/utils.h"
/* We require a the library to be configured with these options to save
/* We prefer the library to be configured with these options to save
* copying data during decoding. */
#if RGB_RED != 0 || RGB_GREEN != 1 || RGB_BLUE != 2 || RGB_PIXELSIZE != 4
#error JPEG library incorrectly configured.
#warning JPEG library not optimally configured. Decoding will be slower.
#endif
@ -53,17 +51,6 @@ static void nsjpeg_skip_input_data(j_decompress_ptr cinfo, long num_bytes);
static void nsjpeg_term_source(j_decompress_ptr cinfo);
/**
* Create a CONTENT_JPEG.
*/
bool nsjpeg_create(struct content *c, const char *params[])
{
c->data.jpeg.sprite_area = 0;
return true;
}
/**
* Convert a CONTENT_JPEG for display.
*/
@ -78,16 +65,17 @@ bool nsjpeg_convert(struct content *c, int w, int h)
nsjpeg_term_source };
unsigned int height;
unsigned int width;
unsigned int area_size;
osspriteop_area *sprite_area = 0;
osspriteop_header *sprite;
struct bitmap *bitmap = NULL;
char *pixels;
size_t rowstride;
union content_msg_data msg_data;
cinfo.err = jpeg_std_error(&jerr.pub);
jerr.pub.error_exit = nsjpeg_error_exit;
if (setjmp(jerr.setjmp_buffer)) {
jpeg_destroy_decompress(&cinfo);
free(sprite_area);
if (bitmap)
bitmap_destroy(bitmap);
msg_data.error = nsjpeg_error_buffer;
content_broadcast(c, CONTENT_MSG_ERROR, msg_data);
@ -105,10 +93,8 @@ bool nsjpeg_convert(struct content *c, int w, int h)
width = cinfo.output_width;
height = cinfo.output_height;
area_size = 16 + 44 + width * height * 4;
sprite_area = malloc(area_size);
if (!sprite_area) {
LOG(("malloc failed"));
bitmap = bitmap_create(width, height);
if (!bitmap) {
jpeg_destroy_decompress(&cinfo);
msg_data.error = messages_get("NoMemory");
@ -117,45 +103,40 @@ bool nsjpeg_convert(struct content *c, int w, int h)
return false;
}
/* area control block */
sprite_area->size = area_size;
sprite_area->sprite_count = 1;
sprite_area->first = 16;
sprite_area->used = area_size;
/* sprite control block */
sprite = (osspriteop_header *) (sprite_area + 1);
sprite->size = area_size - 16;
memset(sprite->name, 0x00, 12);
strncpy(sprite->name, "jpeg", 12);
sprite->width = width - 1;
sprite->height = height - 1;
sprite->left_bit = 0;
sprite->right_bit = 31;
sprite->image = sprite->mask = 44;
sprite->mode = (os_mode) 0x301680b5;
pixels = bitmap_get_buffer(bitmap);
rowstride = bitmap_get_rowstride(bitmap);
do {
JSAMPROW scanlines[1];
scanlines[0] = (JSAMPROW) ((char *) sprite + 44 +
width * cinfo.output_scanline * 4);
scanlines[0] = (JSAMPROW) (pixels +
rowstride * cinfo.output_scanline);
jpeg_read_scanlines(&cinfo, scanlines, 1);
#if RGB_RED != 0 || RGB_GREEN != 1 || RGB_BLUE != 2 || RGB_PIXELSIZE != 4
/* expand to RGBA */
for (int i = width - 1; 0 <= i; i--) {
int r = scanlines[0][i * RGB_PIXELSIZE + RGB_RED];
int g = scanlines[0][i * RGB_PIXELSIZE + RGB_GREEN];
int b = scanlines[0][i * RGB_PIXELSIZE + RGB_BLUE];
scanlines[0][i * 4 + 0] = r;
scanlines[0][i * 4 + 1] = g;
scanlines[0][i * 4 + 2] = b;
scanlines[0][i * 4 + 3] = 0xff;
}
#endif
} while (cinfo.output_scanline != cinfo.output_height);
jpeg_finish_decompress(&cinfo);
jpeg_destroy_decompress(&cinfo);
/*xosspriteop_save_sprite_file(osspriteop_USER_AREA,
sprite_area, "jpeg");*/
c->width = width;
c->height = height;
c->data.jpeg.sprite_area = sprite_area;
c->bitmap = bitmap;
c->title = malloc(100);
if (c->title)
snprintf(c->title, 100, messages_get("JPEGTitle"),
width, height, c->source_size);
c->size += area_size + 100;
c->size += height * rowstride + 100;
c->status = CONTENT_STATUS_DONE;
return true;
}
@ -232,21 +213,7 @@ void nsjpeg_term_source(j_decompress_ptr cinfo)
void nsjpeg_destroy(struct content *c)
{
free(c->data.jpeg.sprite_area);
if (c->bitmap)
bitmap_destroy(c->bitmap);
free(c->title);
}
/**
* Redraw a CONTENT_JPEG.
*/
bool nsjpeg_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 long background_colour)
{
return image_redraw(c->data.jpeg.sprite_area, x, y, width, height,
c->width * 2, c->height *2, background_colour,
false, false, IMAGE_PLOT_TINCT_OPAQUE);
}

View File

@ -5,23 +5,20 @@
* Copyright 2004 James Bursa <bursa@users.sourceforge.net>
*/
#ifndef _NETSURF_RISCOS_JPEG_H_
#define _NETSURF_RISCOS_JPEG_H_
/** \file
* Content for image/jpeg (interface).
*/
#include "oslib/osspriteop.h"
#ifndef _NETSURF_IMAGE_JPEG_H_
#define _NETSURF_IMAGE_JPEG_H_
struct bitmap;
struct content;
struct content_jpeg_data {
osspriteop_area *sprite_area;
};
bool nsjpeg_create(struct content *c, const char *params[]);
bool nsjpeg_convert(struct content *c, int width, int height);
void nsjpeg_destroy(struct content *c);
bool nsjpeg_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 long background_colour);
#endif

View File

@ -5,20 +5,22 @@
* Copyright 2004 Richard Wilson <not_ginger_matt@users.sourceforge.net>
*/
/** \file
* Content for image/mng, image/png, and image/jng (implementation).
*/
#include <assert.h>
#include <stdbool.h>
#include <string.h>
#include <stdlib.h>
#include "libmng/libmng.h"
#include "oslib/os.h"
#include "oslib/osspriteop.h"
#include <sys/time.h>
#include <time.h>
#include "libmng.h"
#include "netsurf/utils/config.h"
#include "netsurf/content/content.h"
#include "netsurf/riscos/gui.h"
#include "netsurf/riscos/image.h"
#include "netsurf/riscos/mng.h"
#include "netsurf/riscos/options.h"
#include "netsurf/riscos/wimp.h"
#include "netsurf/desktop/browser.h"
#include "netsurf/image/bitmap.h"
#include "netsurf/image/mng.h"
#include "netsurf/utils/log.h"
#include "netsurf/utils/messages.h"
#include "netsurf/utils/utils.h"
@ -44,13 +46,21 @@ static mng_bool nsmng_trace(mng_handle mng, mng_int32 iFunNr, mng_int32 iFuncseq
static mng_bool nsmng_errorproc(mng_handle mng, mng_int32 code,
mng_int8 severity, mng_chunkid chunktype, mng_uint32 chunkseq,
mng_int32 extra1, mng_int32 extra2, mng_pchar text);
#ifndef MNG_INTERNAL_MEMMNGMT
static mng_ptr nsmng_alloc(mng_size_t n);
static void nsmng_free(mng_ptr p, mng_size_t n);
#endif
bool nsmng_create(struct content *c, const char *params[]) {
/* Initialise the library (libmng is compiled with MNG_INTERNAL_MEMMNGMT)
/* Initialise the library
*/
c->data.mng.sprite_area = NULL;
#ifdef MNG_INTERNAL_MEMMNGMT
c->data.mng.handle = mng_initialize(c, MNG_NULL, MNG_NULL, MNG_NULL);
#else
c->data.mng.handle = mng_initialize(c, nsmng_alloc, nsmng_free, MNG_NULL);
#endif
if (c->data.mng.handle == MNG_NULL) {
LOG(("Unable to initialise MNG library."));
return nsmng_broadcast_error(c);
@ -155,18 +165,14 @@ mng_bool nsmng_closestream(mng_handle mng) {
mng_bool nsmng_processheader(mng_handle mng, mng_uint32 width, mng_uint32 height) {
struct content *c;
int sprite_size;
osspriteop_area *sprite_area;
osspriteop_header *sprite_header;
union content_msg_data msg_data;
/* This function is called when the header has been read and we know
the dimensions of the canvas.
*/
c = (struct content *)mng_get_userdata(mng);
sprite_size = width * height * 4 + sizeof(osspriteop_header) + sizeof(osspriteop_area);
c->data.mng.sprite_area = (osspriteop_area *)malloc(sprite_size);
if (!(c->data.mng.sprite_area)) {
c->bitmap = bitmap_create(width, height);
if (!c->bitmap) {
msg_data.error = messages_get("NoMemory");
content_broadcast(c, CONTENT_MSG_ERROR, msg_data);
LOG(("Insufficient memory to create canvas."));
@ -178,27 +184,6 @@ mng_bool nsmng_processheader(mng_handle mng, mng_uint32 width, mng_uint32 height
c->width = width;
c->height = height;
/* Initialise the sprite area
*/
sprite_area = c->data.mng.sprite_area;
sprite_area->size = sprite_size;
sprite_area->sprite_count = 1;
sprite_area->first = sizeof(osspriteop_area);
sprite_area->used = sprite_size;
/* Initialise the sprite header
*/
sprite_header = (osspriteop_header *)(sprite_area + 1);
sprite_header->size = sprite_size - sizeof(osspriteop_area);
memset(sprite_header->name, 0x00, 12);
strcpy(sprite_header->name, "mng");
sprite_header->width = width - 1;
sprite_header->height = height - 1;
sprite_header->left_bit = 0;
sprite_header->right_bit = 31;
sprite_header->mask = sprite_header->image = sizeof(osspriteop_header);
sprite_header->mode = (os_mode) 0x301680b5;
/* Set the canvas style
*/
if (mng_set_canvasstyle(mng, MNG_CANVAS_RGBA8) != MNG_NOERROR) {
@ -262,7 +247,7 @@ bool nsmng_convert(struct content *c, int width, int height) {
c->width, c->height, c->source_size);
}
}
c->size += (c->width * c->height * 4) + sizeof(osspriteop_header) + sizeof(osspriteop_area) + 100;
c->size += c->width * c->height * 4 + 100;
c->status = CONTENT_STATUS_DONE;
@ -282,7 +267,6 @@ bool nsmng_convert(struct content *c, int width, int height) {
mng_ptr nsmng_getcanvasline(mng_handle mng, mng_uint32 line) {
char *base;
struct content *c;
/* Get our content back
@ -291,21 +275,31 @@ mng_ptr nsmng_getcanvasline(mng_handle mng, mng_uint32 line) {
/* Calculate the address
*/
base = ((char *) c->data.mng.sprite_area + c->data.mng.sprite_area->first);
base += sizeof(osspriteop_header);
return base + (c->width * 4) * line;
return bitmap_get_buffer(c->bitmap) +
bitmap_get_rowstride(c->bitmap) * line;
}
/**
* Get the wall-clock time in milliseconds since some fixed time.
*/
mng_uint32 nsmng_gettickcount(mng_handle mng) {
os_t time;
static bool start = true;
static time_t t0;
struct timeval tv;
struct timezone tz;
/* Get the time in centiseconds and return in milliseconds
*/
xos_read_monotonic_time(&time);
return (time * 10);
gettimeofday(&tv, &tz);
if (start) {
t0 = tv.tv_sec;
start = false;
}
return (tv.tv_sec - t0) * 1000 + tv.tv_usec / 1000;
}
mng_bool nsmng_refresh(mng_handle mng, mng_uint32 x, mng_uint32 y, mng_uint32 w, mng_uint32 h) {
union content_msg_data data;
struct content *c;
@ -368,10 +362,8 @@ void nsmng_destroy(struct content *c) {
*/
schedule_remove(nsmng_animate, c);
mng_cleanup(&c->data.mng.handle);
if (c->data.mng.sprite_area) {
free(c->data.mng.sprite_area);
c->data.mng.sprite_area = NULL;
}
if (c->bitmap)
bitmap_destroy(c->bitmap);
free(c->title);
}
@ -383,9 +375,9 @@ bool nsmng_redraw(struct content *c, int x, int y,
{
bool ret;
ret = image_redraw(c->data.mng.sprite_area, x, y, width, height,
c->width * 2, c->height * 2, background_colour,
false, false, IMAGE_PLOT_TINCT_ALPHA);
ret = bitmap_redraw(c, x, y, width, height,
clip_x0, clip_y0, clip_x1, clip_y1,
scale, background_colour);
/* Check if we need to restart the animation
*/
@ -460,4 +452,29 @@ mng_bool nsmng_errorproc(mng_handle mng, mng_int32 code,
return (0);
}
#ifndef MNG_INTERNAL_MEMMNGMT
/**
* Memory allocation callback for libmng.
*/
mng_ptr nsmng_alloc(mng_size_t n)
{
return calloc(1, n);
}
/**
* Memory free callback for libmng.
*/
void nsmng_free(mng_ptr p, mng_size_t n)
{
free(p);
}
#endif
#endif

View File

@ -5,11 +5,14 @@
* Copyright 2004 Richard Wilson <not_ginger_matt@users.sourceforge.net>
*/
#ifndef _NETSURF_RISCOS_MNG_H_
#define _NETSURF_RISCOS_MNG_H_
/** \file
* Content for image/mng, image/png, and image/jng (interface).
*/
#include "libmng/libmng.h"
#include "oslib/osspriteop.h"
#ifndef _NETSURF_IMAGE_MNG_H_
#define _NETSURF_IMAGE_MNG_H_
#include "libmng.h"
struct content;
@ -19,7 +22,6 @@ struct content_mng_data {
int read_size;
bool waiting;
mng_handle handle;
osspriteop_area *sprite_area;
};
bool nsmng_create(struct content *c, const char *params[]);

View File

@ -23,12 +23,14 @@ OBJECTS_COMMON += box.o form.o html.o layout.o textplain.o # render/
OBJECTS_COMMON += messages.o pool.o translit.o url.o utils.o # utils/
OBJECTS_COMMON += imagemap.o loginlist.o options.o # desktop/
OBJECTS_RISCOS = $(OBJECTS_COMMON)
OBJECTS_IMAGE = jpeg.o mng.o # image/
OBJECTS_RISCOS = $(OBJECTS_COMMON) $(OBJECTS_IMAGE)
OBJECTS_RISCOS += browser.o netsurf.o version.o # desktop/
OBJECTS_RISCOS += 401login.o debugwin.o \
OBJECTS_RISCOS += 401login.o bitmap.o debugwin.o \
buffer.o dialog.o download.o draw.o filetype.o font.o gif.o \
gifread.o gui.o help.o history.o hotlist.o htmlredraw.o image.o \
jpeg.o menus.o mng.o mouseactions.o plugin.o print.o \
menus.o mouseactions.o plugin.o print.o \
save.o save_complete.o save_draw.o save_text.o \
schedule.o search.o sprite.o textselection.o theme.o thumbnail.o \
ufont.o uri.o url_protocol.o wimp.o window.o # riscos/
@ -36,22 +38,22 @@ OBJECTS_RISCOS += 401login.o debugwin.o \
OBJECTS_NCOS = $(OBJECTS_RISCOS)
OBJECTS_DEBUG = $(OBJECTS_COMMON)
OBJECTS_DEBUG += filetyped.o fontd.o netsurfd.o # debug/
OBJECTS_DEBUG += gif.o gifread.o jpeg.o mng.o save_complete.o \
OBJECTS_DEBUG = $(OBJECTS_COMMON) $(OBJECTS_IMAGE)
OBJECTS_DEBUG += debug_bitmap.o filetyped.o fontd.o netsurfd.o # debug/
OBJECTS_DEBUG += gif.o gifread.o save_complete.o \
schedule.o # riscos/
OBJECTS_DEBUGRO = $(OBJECTS_COMMON)
OBJECTS_DEBUGRO = $(OBJECTS_COMMON) $(OBJECTS_IMAGE)
OBJECTS_DEBUGRO += netsurfd.o # debug/
OBJECTS_DEBUGRO += version.o # desktop/
OBJECTS_DEBUGRO += draw.o filetype.o font.o \
gif.o gifread.o image.o jpeg.o mng.o save_complete.o \
OBJECTS_DEBUGRO += bitmap.o draw.o filetype.o font.o \
gif.o gifread.o image.o jpeg.o save_complete.o \
schedule.o sprite.o ufont.o # riscos/
OBJECTS_GTK = $(OBJECTS_COMMON)
OBJECTS_GTK = $(OBJECTS_COMMON) $(OBJECTS_IMAGE)
OBJECTS_GTK += filetyped.o # debug/
OBJECTS_GTK += browser.o netsurf.o version.o # desktop/
OBJECTS_GTK += font_pango.o gtk_gui.o gtk_window.o # gtk/
OBJECTS_GTK += font_pango.o gtk_bitmap.o gtk_gui.o gtk_window.o # gtk/
OBJDIR_RISCOS = $(shell $(CC) -dumpmachine)
@ -82,7 +84,7 @@ else
include posix.mk
endif
VPATH = content:css:desktop:render:riscos:utils:debug:gtk
VPATH = content:css:desktop:image:render:riscos:utils:debug:gtk
WARNFLAGS = -W -Wall -Wundef -Wpointer-arith -Wcast-qual \
-Wcast-align -Wwrite-strings -Wstrict-prototypes \

View File

@ -230,9 +230,6 @@ int ro_content_filetype(struct content *content);
/* in schedule.c */
extern bool sched_active;
extern os_t sched_time;
void schedule(int t, void (*callback)(void *p), void *p);
void schedule_remove(void (*callback)(void *p), void *p);
void schedule_run(void);
/* in debugwin.c */
void ro_gui_debugwin_open(void);

View File

@ -1010,30 +1010,30 @@ bool html_redraw_background(int xi, int yi, int width, int height,
/* and plot the image */
switch (box->background->type) {
#ifdef WITH_PNG
case CONTENT_PNG:
case CONTENT_PNG:/*
image_redraw(box->background->data.png.sprite_area,
x, y, image_width, image_height,
box->background->width * 2,
box->background->height * 2,
background_colour,
repeat_x, repeat_y,
IMAGE_PLOT_TINCT_ALPHA);
break;
IMAGE_PLOT_TINCT_ALPHA);*/
break;
#endif
#ifdef WITH_MNG
case CONTENT_JNG:
case CONTENT_MNG:
image_redraw(box->background->data.mng.sprite_area,
/*image_redraw(box->background->data.mng.sprite_area,
x, y, image_width, image_height,
box->background->width * 2,
box->background->height * 2,
background_colour,
repeat_x, repeat_y,
IMAGE_PLOT_TINCT_ALPHA);
IMAGE_PLOT_TINCT_ALPHA);*/
break;
#endif
#ifdef WITH_JPEG
case CONTENT_JPEG:
case CONTENT_JPEG:/*
image_redraw(box->background->data.jpeg.sprite_area,
x, y, image_width, image_height,
box->background->width * 2,
@ -1041,7 +1041,7 @@ bool html_redraw_background(int xi, int yi, int width, int height,
background_colour,
repeat_x, repeat_y,
IMAGE_PLOT_TINCT_OPAQUE);
break;
*/break;
#endif
#ifdef WITH_GIF
case CONTENT_GIF:

View File

@ -430,18 +430,18 @@ void ro_gui_save_object_native(struct content *c, char *path)
switch (c->type) {
#ifdef WITH_JPEG
case CONTENT_JPEG:
error = xosspriteop_save_sprite_file(osspriteop_USER_AREA, c->data.jpeg.sprite_area, path);
bitmap_save(c->bitmap, path);
break;
#endif
#ifdef WITH_PNG
case CONTENT_PNG:
error = xosspriteop_save_sprite_file(osspriteop_USER_AREA, c->data.png.sprite_area, path);
break;
/* error = xosspriteop_save_sprite_file(osspriteop_USER_AREA, c->data.png.sprite_area, path);
break;*/
#endif
#ifdef WITH_MNG
case CONTENT_JNG:
case CONTENT_MNG:
error = xosspriteop_save_sprite_file(osspriteop_USER_AREA, c->data.mng.sprite_area, path);
bitmap_save(c->bitmap, path);
break;
#endif
#ifdef WITH_GIF

View File

@ -703,17 +703,18 @@ static bool add_graphic(struct content *content, struct box *box,
/* cast-tastic... */
switch (content->type) {
case CONTENT_JPEG:
sprite_length = ((osspriteop_header*)((char*)content->data.jpeg.sprite_area+content->data.jpeg.sprite_area->first))->size;
return true;
/*sprite_length = ((osspriteop_header*)((char*)content->data.jpeg.sprite_area+content->data.jpeg.sprite_area->first))->size;*/
break;
#ifdef WITH_PNG
case CONTENT_PNG:
sprite_length = ((osspriteop_header*)((char*)content->data.png.sprite_area+content->data.png.sprite_area->first))->size;
/*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;
/*sprite_length = ((osspriteop_header*)((char*)content->data.mng.sprite_area+content->data.mng.sprite_area->first))->size;*/
break;
#endif
case CONTENT_GIF:
@ -742,17 +743,17 @@ static bool add_graphic(struct content *content, struct box *box,
switch (content->type) {
case CONTENT_JPEG:
memcpy((char*)ds+16, (char*)content->data.jpeg.sprite_area+content->data.jpeg.sprite_area->first, (unsigned)sprite_length);
/*memcpy((char*)ds+16, (char*)content->data.jpeg.sprite_area+content->data.jpeg.sprite_area->first, (unsigned)sprite_length);*/
break;
#ifdef WITH_PNG
case CONTENT_PNG:
memcpy((char*)ds+16, (char*)content->data.png.sprite_area+content->data.png.sprite_area->first, (unsigned)sprite_length);
/*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);
/*memcpy((char*)ds+16, (char*)content->data.mng.sprite_area+content->data.mng.sprite_area->first, (unsigned)sprite_length);*/
break;
#endif
case CONTENT_GIF:

View File

@ -23,11 +23,11 @@
#define WITH_COOKIES
/* Image renderering modules */
#define WITH_JPEG
#define WITH_MNG
#define WITH_PNG
#if defined(riscos) || defined(ncos) || defined(debug)
#define WITH_GIF
#define WITH_JPEG
#define WITH_PNG
#define WITH_MNG
#endif
#if defined(riscos) || defined(ncos)
#define WITH_DRAW