diff options
Diffstat (limited to 'frontends')
51 files changed, 386 insertions, 842 deletions
diff --git a/frontends/amiga/bitmap.c b/frontends/amiga/bitmap.c index e160f9351..e8534a395 100644 --- a/frontends/amiga/bitmap.c +++ b/frontends/amiga/bitmap.c @@ -108,7 +108,7 @@ static APTR pool_bitmap = NULL; static bool guigfx_warned = false; /* exported function documented in amiga/bitmap.h */ -void *amiga_bitmap_create(int width, int height, unsigned int state) +void *amiga_bitmap_create(int width, int height, enum gui_bitmap_flags flags) { struct bitmap *bitmap; @@ -139,8 +139,7 @@ void *amiga_bitmap_create(int width, int height, unsigned int state) bitmap->width = width; bitmap->height = height; - if(state & BITMAP_OPAQUE) bitmap->opaque = true; - else bitmap->opaque = false; + bitmap->opaque = (flags & BITMAP_OPAQUE) == BITMAP_OPAQUE; bitmap->nativebm = NULL; bitmap->nativebmwidth = 0; @@ -307,25 +306,6 @@ void amiga_bitmap_set_opaque(void *bitmap, bool opaque) /* exported function documented in amiga/bitmap.h */ -bool amiga_bitmap_test_opaque(void *bitmap) -{ - struct bitmap *bm = bitmap; - uint32 p = bm->width * bm->height; - uint32 a = 0; - uint32 *bmi = (uint32 *)amiga_bitmap_get_buffer(bm); - - assert(bitmap); - - for(a=0;a<p;a+=4) - { - if ((*bmi & 0x000000ffU) != 0x000000ffU) return false; - bmi++; - } - return true; -} - - -/* exported function documented in amiga/bitmap.h */ bool amiga_bitmap_get_opaque(void *bitmap) { struct bitmap *bm = bitmap; @@ -367,40 +347,6 @@ int bitmap_get_height(void *bitmap) } } - -/** - * Find the bytes per pixel of a bitmap - * - * \param vbitmap a bitmap, as returned by bitmap_create() - * \return bytes per pixel - */ -static size_t bitmap_get_bpp(void *vbitmap) -{ - struct bitmap *bitmap = (struct bitmap *)vbitmap; - assert(bitmap); - return 4; -} - -static void ami_bitmap_argb_to_rgba(struct bitmap *bm) -{ - if(bm == NULL) return; - - ULONG *data = (ULONG *)amiga_bitmap_get_buffer(bm); - for(int i = 0; i < (bm->width * bm->height); i++) { - data[i] = (data[i] << 8) | (data[i] >> 24); - } -} - -static void ami_bitmap_rgba_to_argb(struct bitmap *bm) -{ - if(bm == NULL) return; - - ULONG *data = (ULONG *)amiga_bitmap_get_buffer(bm); - for(int i = 0; i < (bm->width * bm->height); i++) { - data[i] = (data[ i] >> 8) | (data[i] << 24); - } -} - #ifdef BITMAP_DUMP void bitmap_dump(struct bitmap *bitmap) { @@ -436,7 +382,7 @@ Object *ami_datatype_object_from_bitmap(struct bitmap *bitmap) { bmhd->bmh_Width = (UWORD)bitmap_get_width(bitmap); bmhd->bmh_Height = (UWORD)bitmap_get_height(bitmap); - bmhd->bmh_Depth = (UBYTE)bitmap_get_bpp(bitmap) * 8; + bmhd->bmh_Depth = (UBYTE)32; if(!amiga_bitmap_get_opaque(bitmap)) bmhd->bmh_Masking = mskHasAlpha; } @@ -450,7 +396,7 @@ Object *ami_datatype_object_from_bitmap(struct bitmap *bitmap) TAG_DONE); IDoMethod(dto, PDTM_WRITEPIXELARRAY, amiga_bitmap_get_buffer(bitmap), - PBPAFMT_RGBA, amiga_bitmap_get_rowstride(bitmap), 0, 0, + PBPAFMT_ARGB, amiga_bitmap_get_rowstride(bitmap), 0, 0, bitmap_get_width(bitmap), bitmap_get_height(bitmap)); } @@ -475,10 +421,10 @@ struct bitmap *ami_bitmap_from_datatype(char *filename) bm = amiga_bitmap_create(bmh->bmh_Width, bmh->bmh_Height, 0); IDoMethod(dto, PDTM_READPIXELARRAY, amiga_bitmap_get_buffer(bm), - PBPAFMT_RGBA, amiga_bitmap_get_rowstride(bm), 0, 0, + PBPAFMT_ARGB, amiga_bitmap_get_rowstride(bm), 0, 0, bmh->bmh_Width, bmh->bmh_Height); - amiga_bitmap_set_opaque(bm, amiga_bitmap_test_opaque(bm)); + amiga_bitmap_set_opaque(bm, bitmap_test_opaque(bm)); } DisposeDTObject(dto); } @@ -531,7 +477,6 @@ static inline struct BitMap *ami_bitmap_get_generic(struct bitmap *bitmap, dithermode = DITHERMODE_FS; } - ami_bitmap_rgba_to_argb(bitmap); bitmap->drawhandle = ObtainDrawHandle( NULL, &rp, @@ -548,7 +493,6 @@ static inline struct BitMap *ami_bitmap_get_generic(struct bitmap *bitmap, ReleaseDrawHandle(bitmap->drawhandle); bitmap->drawhandle = NULL; } - ami_bitmap_argb_to_rgba(bitmap); } else { if(guigfx_warned == false) { amiga_warn_user("BMConvErr", NULL); @@ -698,7 +642,7 @@ PLANEPTR ami_bitmap_get_mask(struct bitmap *bitmap, int width, for(y=0; y<height; y++) { for(x=0; x<width; x++) { - if ((*bmi & 0x000000ffU) <= (ULONG)nsoption_int(mask_alpha)) maskbit = 0; + if ((*bmi & 0xff000000U) <= (ULONG)nsoption_int(mask_alpha)) maskbit = 0; else maskbit = 1; bmi++; bitmap->native_mask[(y*bpr) + (x/8)] |= @@ -775,8 +719,6 @@ static nserror bitmap_render(struct bitmap *bitmap, struct hlcache_handle *conte BLITA_DestY, 0, TAG_DONE); - ami_bitmap_argb_to_rgba(bitmap); - /**\todo In theory we should be able to move the bitmap to our native area to try to avoid re-conversion (at the expense of memory) */ @@ -824,13 +766,10 @@ static struct gui_bitmap_table bitmap_table = { .destroy = amiga_bitmap_destroy, .set_opaque = amiga_bitmap_set_opaque, .get_opaque = amiga_bitmap_get_opaque, - .test_opaque = amiga_bitmap_test_opaque, .get_buffer = amiga_bitmap_get_buffer, .get_rowstride = amiga_bitmap_get_rowstride, .get_width = bitmap_get_width, .get_height = bitmap_get_height, - .get_bpp = bitmap_get_bpp, - .save = amiga_bitmap_save, .modified = amiga_bitmap_modified, .render = bitmap_render, }; diff --git a/frontends/amiga/bitmap.h b/frontends/amiga/bitmap.h index aaec26ac2..a7dc9198f 100755 --- a/frontends/amiga/bitmap.h +++ b/frontends/amiga/bitmap.h @@ -25,7 +25,9 @@ #include <intuition/classusr.h> #include <libraries/Picasso96.h> -#define AMI_BITMAP_FORMAT RGBFB_R8G8B8A8 +#include "netsurf/bitmap.h" + +#define AMI_BITMAP_FORMAT RGBFB_A8R8G8B8 #define AMI_BITMAP_SCALE_ICON 0xFF extern struct gui_bitmap_table *amiga_bitmap_table; @@ -101,10 +103,10 @@ void ami_bitmap_fini(void); * * \param width width of image in pixels * \param height width of image in pixels - * \param state a flag word indicating the initial state + * \param flags flags for bitmap creation * \return an opaque struct bitmap, or NULL on memory exhaustion */ -void *amiga_bitmap_create(int width, int height, unsigned int state); +void *amiga_bitmap_create(int width, int height, enum gui_bitmap_flags flags); /** * Return a pointer to the pixel data in a bitmap. @@ -174,14 +176,6 @@ void amiga_bitmap_modified(void *bitmap); void amiga_bitmap_set_opaque(void *bitmap, bool opaque); /** - * Tests whether a bitmap has an opaque alpha channel - * - * \param bitmap a bitmap, as returned by bitmap_create() - * \return whether the bitmap is opaque - */ -bool amiga_bitmap_test_opaque(void *bitmap); - -/** * Gets whether a bitmap should be plotted opaque * * \param bitmap a bitmap, as returned by bitmap_create() diff --git a/frontends/amiga/dist/Rexx/YT_download_page.nsrx b/frontends/amiga/dist/Rexx/YT_download_page.nsrx new file mode 100644 index 000000000..fdc06923d --- /dev/null +++ b/frontends/amiga/dist/Rexx/YT_download_page.nsrx @@ -0,0 +1,21 @@ +/* YT play.nsrx by Chris Handley + This script shows download links for a YouTube video using YT (OS4Depot:video/misc/yt.lha) +*/ + +options results + +if ~open('yt','AppDir:YT','R') then do + GETSCREENNAME + address command 'requestchoice >NIL: "NetSurf" "YT must be installed for this script to function.*n*nIt can be downloaded from OS4Depot:video/misc/yt" "OK" PubScreen='||result + OPEN 'http://os4depot.net/?function=showfile&file=video/misc/yt.lha' NEWTAB ACTIVE /* This doesn't work due to a NetSurf(?) bug */ + exit +end +close('yt') + +GETURL +/*address command 'requestchoice >NIL: "TEST" "'||result||'" "OK"'*/ +address command 'AppDir:YT <>CON:0/30/640/256/YT/AUTO/CLOSE "'||result||'" html silent' + +/* Hack to activate the newest tab */ +OPEN 'file:///RAM:' NEWTAB ACTIVE +CLOSE diff --git a/frontends/amiga/dist/Rexx/YT_open.nsrx b/frontends/amiga/dist/Rexx/YT_open.nsrx new file mode 100644 index 000000000..4454f0c29 --- /dev/null +++ b/frontends/amiga/dist/Rexx/YT_open.nsrx @@ -0,0 +1,21 @@ +/* YT play.nsrx by Chris Handley + This script opens a YouTube video using YT (OS4Depot:video/misc/yt.lha) +*/ + +options results + +if ~open('yt','AppDir:YT','R') then do + GETSCREENNAME + address command 'requestchoice >NIL: "NetSurf" "YT must be installed for this script to function.*n*nIt can be downloaded from OS4Depot:video/misc/yt" "OK" PubScreen='||result + OPEN 'http://os4depot.net/?function=showfile&file=video/misc/yt.lha' NEWTAB ACTIVE /* This doesn't work due to a NetSurf(?) bug */ + exit +end +close('yt') + +address COMMAND 'Run >NIL: RequestChoice Title="NetSurf" BODY="When finished with YT, click OK to return to NetSurf" GADGETS="OK" INACTIVE >NIL:' /* Hack to get Workbench to front */ + +GETURL +/*address command 'requestchoice >NIL: "TEST" "'||result||'" "OK"'*/ +address command 'AppDir:YT <>CON:0/30/640/256/YT/AUTO/CLOSE "'||result||'"' + +/*TOBACK*/ /* ideally we'd bring Workbench to front */ diff --git a/frontends/amiga/dist/Rexx/YT_play.nsrx b/frontends/amiga/dist/Rexx/YT_play.nsrx new file mode 100644 index 000000000..a8e29162f --- /dev/null +++ b/frontends/amiga/dist/Rexx/YT_play.nsrx @@ -0,0 +1,19 @@ +/* YT play.nsrx by Chris Handley + This script auto-plays a YouTube video using YT (OS4Depot:video/misc/yt.lha) +*/ + +options results + +if ~open('yt','AppDir:YT','R') then do + GETSCREENNAME + address command 'requestchoice >NIL: "NetSurf" "YT must be installed for this script to function.*n*nIt can be downloaded from OS4Depot:video/misc/yt" "OK" PubScreen='||result + OPEN 'http://os4depot.net/?function=showfile&file=video/misc/yt.lha' NEWTAB ACTIVE /* This doesn't work due to a NetSurf(?) bug */ + exit +end +close('yt') + +GETURL +/*address command 'requestchoice >NIL: "TEST" "'||result||'" "OK"'*/ +address command 'AppDir:YT <>CON:0/30/640/256/YT/AUTO/CLOSE "'||result||'" AutoPlay' + +/*TOBACK*/ /* ideally we'd bring Workbench to front */ diff --git a/frontends/amiga/dt_anim.c b/frontends/amiga/dt_anim.c index a9fe809cf..1162d7214 100644 --- a/frontends/amiga/dt_anim.c +++ b/frontends/amiga/dt_anim.c @@ -173,7 +173,7 @@ bool amiga_dt_anim_convert(struct content *c) size_t size; UBYTE *bm_buffer; struct BitMapHeader *bmh; - unsigned int bm_flags = BITMAP_NEW | BITMAP_OPAQUE; + unsigned int bm_flags = BITMAP_OPAQUE; struct adtFrame adt_frame; APTR clut; diff --git a/frontends/amiga/dt_picture.c b/frontends/amiga/dt_picture.c index ed1272bc1..e13790d5c 100644 --- a/frontends/amiga/dt_picture.c +++ b/frontends/amiga/dt_picture.c @@ -187,7 +187,7 @@ static struct bitmap *amiga_dt_picture_cache_convert(struct content *c) if((dto = amiga_dt_picture_newdtobject(adt))) { - bitmap = amiga_bitmap_create(c->width, c->height, BITMAP_NEW); + bitmap = amiga_bitmap_create(c->width, c->height, BITMAP_NONE); if (!bitmap) { msg_data.errordata.errorcode = NSERROR_NOMEM; msg_data.errordata.errormsg = messages_get("NoMemory"); @@ -202,7 +202,7 @@ static struct bitmap *amiga_dt_picture_cache_convert(struct content *c) amiga_bitmap_get_rowstride(bitmap), 0, 0, c->width, c->height); - amiga_bitmap_set_opaque(bitmap, amiga_bitmap_test_opaque(bitmap)); + amiga_bitmap_set_opaque(bitmap, bitmap_test_opaque(bitmap)); DisposeDTObject(dto); adt->dto = NULL; diff --git a/frontends/amiga/icon.c b/frontends/amiga/icon.c index 001874c86..2b7f61281 100644 --- a/frontends/amiga/icon.c +++ b/frontends/amiga/icon.c @@ -201,7 +201,7 @@ bool amiga_icon_convert(struct content *c) return false; } - icon_c->bitmap = amiga_bitmap_create(width, height, BITMAP_NEW); + icon_c->bitmap = amiga_bitmap_create(width, height, BITMAP_NONE); if (!icon_c->bitmap) { msg_data.errordata.errorcode = NSERROR_NOMEM; msg_data.errordata.errormsg = messages_get("NoMemory"); diff --git a/frontends/amiga/libs.c b/frontends/amiga/libs.c index 3c09bcb27..eb1f21617 100644 --- a/frontends/amiga/libs.c +++ b/frontends/amiga/libs.c @@ -223,6 +223,7 @@ bool ami_libs_open(void) #ifdef __amigaos4__ /* Libraries only needed on OS4 */ AMINS_LIB_OPEN("application.library", 53, Application, "application", 2, false) + AMINS_LIB_OPEN("dos.library", 37, DOS, "main", 1, true) #else /* Libraries we get automatically on OS4 but not OS3 */ AMINS_LIB_OPEN("utility.library", 37, Utility, "main", 1, true) @@ -231,7 +232,6 @@ bool ami_libs_open(void) AMINS_LIB_OPEN("asl.library", 37, Asl, "main", 1, true) AMINS_LIB_OPEN("datatypes.library", 39, DataTypes, "main", 1, true) AMINS_LIB_OPEN("diskfont.library", 40, Diskfont, "main", 1, true) - AMINS_LIB_OPEN("dos.library", 37, DOS, "main", 1, true) AMINS_LIB_OPEN("gadtools.library", 37, GadTools, "main", 1, true) AMINS_LIB_OPEN("graphics.library", 40, Graphics, "main", 1, true) AMINS_LIB_OPEN("icon.library", 44, Icon, "main", 1, true) @@ -332,7 +332,6 @@ void ami_libs_close(void) AMINS_LIB_CLOSE(Asl) AMINS_LIB_CLOSE(DataTypes) AMINS_LIB_CLOSE(Diskfont) - AMINS_LIB_CLOSE(DOS) AMINS_LIB_CLOSE(GadTools) AMINS_LIB_CLOSE(Graphics) AMINS_LIB_CLOSE(Icon) @@ -345,6 +344,7 @@ void ami_libs_close(void) AMINS_LIB_CLOSE(Workbench) #ifdef __amigaos4__ AMINS_LIB_CLOSE(Application) + AMINS_LIB_CLOSE(DOS) #else AMINS_LIB_CLOSE(Utility) #endif diff --git a/frontends/amiga/pkg/SearchEngines b/frontends/amiga/pkg/SearchEngines index 3f4bdd95b..3095d43cf 100644 --- a/frontends/amiga/pkg/SearchEngines +++ b/frontends/amiga/pkg/SearchEngines @@ -1,2 +1,2 @@ -Aminet|www.aminet.net|http://aminet.net/search?query=%s|http://aminet.net/favicon.ico| +Aminet|www.aminet.net|https://aminet.net/search?query=%s|https://aminet.net/favicon.ico| OS4Depot|www.os4depot.net|http://www.os4depot.net/index.php?function=search&tool=simple&f_fields=%s|http://www.os4depot.net/favicon.ico| diff --git a/frontends/amiga/plotters.c b/frontends/amiga/plotters.c index fe1e58f13..8bc1712dd 100644 --- a/frontends/amiga/plotters.c +++ b/frontends/amiga/plotters.c @@ -126,11 +126,34 @@ struct gui_globals *ami_plot_ra_alloc(ULONG width, ULONG height, bool force32bit if(depth < 16) { gg->palette_mapped = true; if(force32bit == false) palette_mapped = true; + + bitmap_set_format(&(bitmap_fmt_t) { + .layout = BITMAP_LAYOUT_ARGB8888, + .pma = true, + }); + + NSLOG(netsurf, INFO, "Set bitmap format to 0xAARRGGBB (native endian) (PMA)"); + } else { gg->palette_mapped = false; - if(force32bit == false) palette_mapped = false; + + bitmap_set_format(&(bitmap_fmt_t) { + .layout = BITMAP_LAYOUT_ARGB8888, + .pma = false, + }); + + NSLOG(netsurf, INFO, "Set bitmap format to 0xAARRGGBB (native endian)"); + } #else + bitmap_set_format(&(bitmap_fmt_t) { + .layout = BITMAP_LAYOUT_ARGB8888, + .pma = true, + }); + + NSLOG(netsurf, INFO, "Set bitmap format to 0xAARRGGBB (native endian) (PMA)"); + + /* Friend BitMaps are weird. * For OS4, we shouldn't use a friend BitMap here (see below). * For OS3 AGA, we get no display blitted if we use a friend BitMap, @@ -149,7 +172,6 @@ struct gui_globals *ami_plot_ra_alloc(ULONG width, ULONG height, bool force32bit if(force32bit == false) palette_mapped = true; } else { gg->palette_mapped = false; - if(force32bit == false) palette_mapped = false; } #endif diff --git a/frontends/atari/bitmap.c b/frontends/atari/bitmap.c index ae42da837..9b5a016a5 100644 --- a/frontends/atari/bitmap.c +++ b/frontends/atari/bitmap.c @@ -77,36 +77,36 @@ int init_mfdb(int bpp, int w, int h, uint32_t flags, MFDB * out ) * \param pixdata NULL or an memory address to use as the bitmap pixdata * \return an opaque struct bitmap, or NULL on memory exhaustion */ -static void *atari_bitmap_create_ex( int w, int h, short bpp, int rowstride, unsigned int state, void * pixdata ) +static void *atari_bitmap_create_ex( int w, int h, short bpp, int rowstride, enum gui_bitmap_flags flags, void * pixdata ) { - struct bitmap * bitmap; + struct bitmap * bitmap; - NSLOG(netsurf, INFO, - "width %d (rowstride: %d, bpp: %d), height %d, state %u", w, - rowstride, bpp, h, state); + NSLOG(netsurf, INFO, + "width %d (rowstride: %d, bpp: %d), height %d, flags %u", w, + rowstride, bpp, h, (unsigned)flags); if( rowstride == 0) { rowstride = bpp * w; } assert( rowstride >= (w * bpp) ); - bitmap = calloc(1 , sizeof(struct bitmap) ); - if (bitmap) { + bitmap = calloc(1 , sizeof(struct bitmap) ); + if (bitmap) { if( pixdata == NULL) { - bitmap->pixdata = calloc(1, (rowstride * h)+128); + bitmap->pixdata = calloc(1, (rowstride * h)+128); } else { bitmap->pixdata = pixdata; } - if (bitmap->pixdata != NULL) { + if (bitmap->pixdata != NULL) { bitmap->width = w; bitmap->height = h; - bitmap->opaque = (state & BITMAP_OPAQUE) ? true : false; + bitmap->opaque = (flags & BITMAP_OPAQUE) ? true : false; bitmap->bpp = bpp; bitmap->resized = NULL; bitmap->rowstride = rowstride; - } else { + } else { free(bitmap); bitmap=NULL; NSLOG(netsurf, INFO, "Out of memory!"); @@ -118,9 +118,9 @@ static void *atari_bitmap_create_ex( int w, int h, short bpp, int rowstride, uns /* exported interface documented in atari/bitmap.h */ -void *atari_bitmap_create(int w, int h, unsigned int state) +void *atari_bitmap_create(int w, int h, enum gui_bitmap_flags flags) { - return atari_bitmap_create_ex( w, h, NS_BMP_DEFAULT_BPP, w * NS_BMP_DEFAULT_BPP, state, NULL ); + return atari_bitmap_create_ex( w, h, NS_BMP_DEFAULT_BPP, w * NS_BMP_DEFAULT_BPP, flags, NULL ); } /** @@ -249,21 +249,6 @@ void atari_bitmap_destroy(void *bitmap) /** - * Save a bitmap in the platform's native format. - * - * \param bitmap a bitmap, as returned by bitmap_create() - * \param path pathname for file - * \param flags flags controlling how the bitmap is saved. - * \return true on success, false on error and error reported - */ - -static bool bitmap_save(void *bitmap, const char *path, unsigned flags) -{ - return true; -} - - -/** * Sets whether a bitmap should be plotted opaque * * \param bitmap a bitmap, as returned by bitmap_create() @@ -284,40 +269,6 @@ static void bitmap_set_opaque(void *bitmap, bool opaque) } -/** - * Tests whether a bitmap has an opaque alpha channel - * - * \param bitmap a bitmap, as returned by bitmap_create() - * \return whether the bitmap is opaque - */ -static bool bitmap_test_opaque(void *bitmap) -{ - int tst; - struct bitmap *bm = bitmap; - - if (bitmap == NULL) { - NSLOG(netsurf, INFO, "NULL bitmap!"); - return false; - } - - if( nsoption_int(atari_transparency) == 0 ){ - return( true ); - } - - tst = bm->width * bm->height; - - while (tst-- > 0) { - if (bm->pixdata[(tst << 2) + 3] != 0xff) { - NSLOG(netsurf, INFO, - "bitmap %p has transparency", bm); - return false; - } - } - NSLOG(netsurf, INFO, "bitmap %p is opaque", bm); - return true; -} - - /* exported interface documented in atari/bitmap.h */ bool atari_bitmap_get_opaque(void *bitmap) { @@ -358,22 +309,12 @@ int atari_bitmap_get_height(void *bitmap) return(bm->height); } - -/** - * Gets the number of BYTES per pixel. - */ -static size_t bitmap_get_bpp(void *bitmap) -{ - struct bitmap *bm = bitmap; - return bm->bpp; -} - /* exported interface documented in atari/bitmap.h */ bool atari_bitmap_resize(struct bitmap *img, HermesHandle hermes_h, HermesFormat *fmt, int nw, int nh) { - unsigned int state = 0; - short bpp = bitmap_get_bpp( img ); + enum gui_bitmap_flags flags = 0; + short bpp = img->bpp; int stride = atari_bitmap_get_rowstride( img ); int err; @@ -389,9 +330,9 @@ bool atari_bitmap_resize(struct bitmap *img, HermesHandle hermes_h, /* allocate the mem for resized bitmap */ if (img->opaque == true) { - state |= BITMAP_OPAQUE; + flags |= BITMAP_OPAQUE; } - img->resized = atari_bitmap_create_ex( nw, nh, bpp, nw*bpp, state, NULL ); + img->resized = atari_bitmap_create_ex( nw, nh, bpp, nw*bpp, flags, NULL ); if( img->resized == NULL ) { printf("W: %d, H: %d, bpp: %d\n", nw, nh, bpp); assert(img->resized); @@ -439,13 +380,10 @@ static struct gui_bitmap_table bitmap_table = { .destroy = atari_bitmap_destroy, .set_opaque = bitmap_set_opaque, .get_opaque = atari_bitmap_get_opaque, - .test_opaque = bitmap_test_opaque, .get_buffer = bitmap_get_buffer, .get_rowstride = atari_bitmap_get_rowstride, .get_width = atari_bitmap_get_width, .get_height = atari_bitmap_get_height, - .get_bpp = bitmap_get_bpp, - .save = bitmap_save, .modified = bitmap_modified, .render = bitmap_render, }; diff --git a/frontends/atari/bitmap.h b/frontends/atari/bitmap.h index 72bad555e..88985ad3c 100644 --- a/frontends/atari/bitmap.h +++ b/frontends/atari/bitmap.h @@ -90,7 +90,7 @@ int init_mfdb(int bpp, int w, int h, uint32_t flags, MFDB * out ); * \param state a flag word indicating the initial state * \return an opaque struct bitmap, or NULL on memory exhaustion */ -void *atari_bitmap_create(int w, int h, unsigned int state); +void *atari_bitmap_create(int w, int h, enum gui_bitmap_flags flags); /** * Find the width of a pixel row in bytes. diff --git a/frontends/atari/plot/font_freetype.c b/frontends/atari/plot/font_freetype.c index f8109f6f2..3ff4ab115 100644 --- a/frontends/atari/plot/font_freetype.c +++ b/frontends/atari/plot/font_freetype.c @@ -25,6 +25,7 @@ #include "utils/log.h" #include "utils/nsoption.h" #include "netsurf/mouse.h" +#include "netsurf/bitmap.h" #include "netsurf/plot_style.h" #include "atari/gui.h" diff --git a/frontends/atari/plot/font_internal.c b/frontends/atari/plot/font_internal.c index 709697f74..11732c5ea 100644 --- a/frontends/atari/plot/font_internal.c +++ b/frontends/atari/plot/font_internal.c @@ -25,6 +25,7 @@ #include "utils/utf8.h" #include "utils/log.h" #include "netsurf/mouse.h" +#include "netsurf/bitmap.h" #include "netsurf/plot_style.h" #include "atari/gui.h" diff --git a/frontends/beos/bitmap.cpp b/frontends/beos/bitmap.cpp index c4b008755..f7e8fa032 100644 --- a/frontends/beos/bitmap.cpp +++ b/frontends/beos/bitmap.cpp @@ -114,28 +114,28 @@ static inline void nsbeos_rgba_to_bgra(void *src, * Create a bitmap. * * \param width width of image in pixels - * \param height width of image in pixels - * \param state a flag word indicating the initial state + * \param height height of image in pixels + * \param bflags flags for bitmap creation * \return an opaque struct bitmap, or NULL on memory exhaustion */ -static void *bitmap_create(int width, int height, unsigned int state) +static void *bitmap_create(int width, int height, enum gui_bitmap_flags flags) { struct bitmap *bmp = (struct bitmap *)malloc(sizeof(struct bitmap)); if (bmp == NULL) return NULL; - int32 flags = 0; - if (state & BITMAP_CLEAR_MEMORY) - flags |= B_BITMAP_CLEAR_TO_WHITE; + int32 Bflags = 0; + if (flags & BITMAP_CLEAR) + Bflags |= B_BITMAP_CLEAR_TO_WHITE; BRect frame(0, 0, width - 1, height - 1); //XXX: bytes per row ? - bmp->primary = new BBitmap(frame, flags, B_RGBA32); - bmp->shadow = new BBitmap(frame, flags, B_RGBA32); + bmp->primary = new BBitmap(frame, Bflags, B_RGBA32); + bmp->shadow = new BBitmap(frame, Bflags, B_RGBA32); bmp->pretile_x = bmp->pretile_y = bmp->pretile_xy = NULL; - bmp->opaque = (state & BITMAP_OPAQUE) != 0; + bmp->opaque = (flags & BITMAP_OPAQUE) != 0; return bmp; } @@ -156,21 +156,6 @@ static void bitmap_set_opaque(void *vbitmap, bool opaque) /** - * Tests whether a bitmap has an opaque alpha channel - * - * \param vbitmap a bitmap, as returned by bitmap_create() - * \return whether the bitmap is opaque - */ -static bool bitmap_test_opaque(void *vbitmap) -{ - struct bitmap *bitmap = (struct bitmap *)vbitmap; - assert(bitmap); - /* todo: test if bitmap is opaque */ - return false; -} - - -/** * Gets whether a bitmap should be plotted opaque * * \param vbitmap a bitmap, as returned by bitmap_create() @@ -216,20 +201,6 @@ static size_t bitmap_get_rowstride(void *vbitmap) /** - * Find the bytes per pixels of a bitmap. - * - * \param vbitmap a bitmap, as returned by bitmap_create() - * \return bytes per pixels of the bitmap - */ -static size_t bitmap_get_bpp(void *vbitmap) -{ - struct bitmap *bitmap = (struct bitmap *)vbitmap; - assert(bitmap); - return 4; -} - - -/** * Free pretiles of a bitmap. * * \param bitmap The bitmap to free the pretiles of. @@ -261,32 +232,6 @@ static void bitmap_destroy(void *vbitmap) /** - * Save a bitmap in the platform's native format. - * - * \param vbitmap a bitmap, as returned by bitmap_create() - * \param path pathname for file - * \param flags modify the behaviour of the save - * \return true on success, false on error and error reported - */ -static bool bitmap_save(void *vbitmap, const char *path, unsigned flags) -{ - struct bitmap *bitmap = (struct bitmap *)vbitmap; - BTranslatorRoster *roster = BTranslatorRoster::Default(); - BBitmapStream stream(bitmap->primary); - BFile file(path, B_WRITE_ONLY | B_CREATE_FILE); - uint32 type = B_PNG_FORMAT; - - if (file.InitCheck() < B_OK) - return false; - - if (roster->Translate(&stream, NULL, NULL, &file, type) < B_OK) - return false; - - return true; -} - - -/** * The bitmap image has changed, so flush any persistant cache. * * \param vbitmap a bitmap, as returned by bitmap_create() @@ -543,13 +488,10 @@ static struct gui_bitmap_table bitmap_table = { /*.destroy =*/ bitmap_destroy, /*.set_opaque =*/ bitmap_set_opaque, /*.get_opaque =*/ bitmap_get_opaque, - /*.test_opaque =*/ bitmap_test_opaque, /*.get_buffer =*/ bitmap_get_buffer, /*.get_rowstride =*/ bitmap_get_rowstride, /*.get_width =*/ bitmap_get_width, /*.get_height =*/ bitmap_get_height, - /*.get_bpp =*/ bitmap_get_bpp, - /*.save =*/ bitmap_save, /*.modified =*/ bitmap_modified, /*.render =*/ bitmap_render, }; diff --git a/frontends/framebuffer/bitmap.c b/frontends/framebuffer/bitmap.c index 1fc9f46a2..c9b58541e 100644 --- a/frontends/framebuffer/bitmap.c +++ b/frontends/framebuffer/bitmap.c @@ -47,19 +47,16 @@ * \param state a flag word indicating the initial state * \return an opaque struct bitmap, or NULL on memory exhaustion */ -static void *bitmap_create(int width, int height, unsigned int state) +static void *bitmap_create(int width, int height, enum gui_bitmap_flags flags) { - nsfb_t *bm; - - NSLOG(netsurf, INFO, "width %d, height %d, state %u", width, height, - state); + nsfb_t *bm; bm = nsfb_new(NSFB_SURFACE_RAM); if (bm == NULL) { return NULL; } - if ((state & BITMAP_OPAQUE) == 0) { + if ((flags & BITMAP_OPAQUE) == 0) { nsfb_set_geometry(bm, width, height, NSFB_FMT_ABGR8888); } else { nsfb_set_geometry(bm, width, height, NSFB_FMT_XBGR8888); @@ -70,9 +67,7 @@ static void *bitmap_create(int width, int height, unsigned int state) return NULL; } - NSLOG(netsurf, INFO, "bitmap %p", bm); - - return bm; + return bm; } @@ -133,20 +128,6 @@ static void bitmap_destroy(void *bitmap) /** - * Save a bitmap in the platform's native format. - * - * \param bitmap a bitmap, as returned by bitmap_create() - * \param path pathname for file - * \param flags flags controlling how the bitmap is saved. - * \return true on success, false on error and error reported - */ -static bool bitmap_save(void *bitmap, const char *path, unsigned flags) -{ - return true; -} - - -/** * The bitmap image has changed, so flush any persistant cache. * * \param bitmap a bitmap, as returned by bitmap_create() @@ -175,39 +156,6 @@ static void bitmap_set_opaque(void *bitmap, bool opaque) /** - * Tests whether a bitmap has an opaque alpha channel - * - * \param bitmap a bitmap, as returned by bitmap_create() - * \return whether the bitmap is opaque - */ -static bool bitmap_test_opaque(void *bitmap) -{ - int tst; - nsfb_t *bm = bitmap; - unsigned char *bmpptr; - int width; - int height; - - assert(bm != NULL); - - nsfb_get_buffer(bm, &bmpptr, NULL); - - nsfb_get_geometry(bm, &width, &height, NULL); - - tst = width * height; - - while (tst-- > 0) { - if (bmpptr[(tst << 2) + 3] != 0xff) { - NSLOG(netsurf, INFO, "bitmap %p has transparency", bm); - return false; - } - } - NSLOG(netsurf, INFO, "bitmap %p is opaque", bm); - return true; -} - - -/** * Gets weather a bitmap should be plotted opaque * * \param bitmap a bitmap, as returned by bitmap_create() @@ -251,12 +199,6 @@ static int bitmap_get_height(void *bitmap) return(height); } -/* get bytes per pixel */ -static size_t bitmap_get_bpp(void *bitmap) -{ - return 4; -} - /** * Render content into a bitmap. * @@ -332,13 +274,10 @@ static struct gui_bitmap_table bitmap_table = { .destroy = bitmap_destroy, .set_opaque = bitmap_set_opaque, .get_opaque = framebuffer_bitmap_get_opaque, - .test_opaque = bitmap_test_opaque, .get_buffer = bitmap_get_buffer, .get_rowstride = bitmap_get_rowstride, .get_width = bitmap_get_width, .get_height = bitmap_get_height, - .get_bpp = bitmap_get_bpp, - .save = bitmap_save, .modified = bitmap_modified, .render = bitmap_render, }; diff --git a/frontends/gtk/bitmap.c b/frontends/gtk/bitmap.c index e7b859d06..bfd29e1f4 100644 --- a/frontends/gtk/bitmap.c +++ b/frontends/gtk/bitmap.c @@ -45,22 +45,21 @@ * Create a bitmap. * * \param width width of image in pixels - * \param height width of image in pixels - * \param state a flag word indicating the initial state + * \param height height of image in pixels + * \param flags flags for bitmap creation * \return an opaque struct bitmap, or NULL on memory exhaustion */ -static void *bitmap_create(int width, int height, unsigned int state) +static void *bitmap_create(int width, int height, enum gui_bitmap_flags flags) { struct bitmap *gbitmap; gbitmap = calloc(1, sizeof(struct bitmap)); if (gbitmap != NULL) { - if ((state & BITMAP_OPAQUE) != 0) { - gbitmap->surface = cairo_image_surface_create(CAIRO_FORMAT_RGB24, width, height); - } else { - gbitmap->surface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, width, height); + if (flags & BITMAP_OPAQUE) { + gbitmap->opaque = true; } + gbitmap->surface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, width, height); if (cairo_surface_status(gbitmap->surface) != CAIRO_STATUS_SUCCESS) { cairo_surface_destroy(gbitmap->surface); free(gbitmap); @@ -81,76 +80,8 @@ static void *bitmap_create(int width, int height, unsigned int state) static void bitmap_set_opaque(void *vbitmap, bool opaque) { struct bitmap *gbitmap = (struct bitmap *)vbitmap; - cairo_format_t fmt; - cairo_surface_t *nsurface = NULL; - assert(gbitmap); - - fmt = cairo_image_surface_get_format(gbitmap->surface); - if (fmt == CAIRO_FORMAT_RGB24) { - if (opaque == false) { - /* opaque to transparent */ - nsurface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, - cairo_image_surface_get_width(gbitmap->surface), - cairo_image_surface_get_height(gbitmap->surface)); - - } - - } else { - if (opaque == true) { - /* transparent to opaque */ - nsurface = cairo_image_surface_create(CAIRO_FORMAT_RGB24, - cairo_image_surface_get_width(gbitmap->surface), - cairo_image_surface_get_height(gbitmap->surface)); - - } - } - - if (nsurface != NULL) { - if (cairo_surface_status(nsurface) != CAIRO_STATUS_SUCCESS) { - cairo_surface_destroy(nsurface); - } else { - memcpy(cairo_image_surface_get_data(nsurface), - cairo_image_surface_get_data(gbitmap->surface), - cairo_image_surface_get_stride(gbitmap->surface) * cairo_image_surface_get_height(gbitmap->surface)); - cairo_surface_destroy(gbitmap->surface); - gbitmap->surface = nsurface; - - cairo_surface_mark_dirty(gbitmap->surface); - - } - - } -} - - -/** - * Tests whether a bitmap has an opaque alpha channel - * - * \param vbitmap a bitmap, as returned by bitmap_create() - * \return whether the bitmap is opaque - */ -static bool bitmap_test_opaque(void *vbitmap) -{ - struct bitmap *gbitmap = (struct bitmap *)vbitmap; - unsigned char *pixels; - int pcount; - int ploop; - - assert(gbitmap); - - pixels = cairo_image_surface_get_data(gbitmap->surface); - - pcount = cairo_image_surface_get_stride(gbitmap->surface) * - cairo_image_surface_get_height(gbitmap->surface); - - for (ploop = 3; ploop < pcount; ploop += 4) { - if (pixels[ploop] != 0xff) { - return false; - } - } - - return true; + gbitmap->opaque = opaque; } @@ -162,16 +93,8 @@ static bool bitmap_test_opaque(void *vbitmap) static bool bitmap_get_opaque(void *vbitmap) { struct bitmap *gbitmap = (struct bitmap *)vbitmap; - cairo_format_t fmt; - assert(gbitmap); - - fmt = cairo_image_surface_get_format(gbitmap->surface); - if (fmt == CAIRO_FORMAT_RGB24) { - return true; - } - - return false; + return gbitmap->opaque; } @@ -187,83 +110,13 @@ static bool bitmap_get_opaque(void *vbitmap) static unsigned char *bitmap_get_buffer(void *vbitmap) { struct bitmap *gbitmap = (struct bitmap *)vbitmap; - int pixel_loop; - int pixel_count; uint8_t *pixels; - uint32_t t, r, g, b; - cairo_format_t fmt; assert(gbitmap); cairo_surface_flush(gbitmap->surface); pixels = cairo_image_surface_get_data(gbitmap->surface); - if (!gbitmap->converted) - return pixels; - - fmt = cairo_image_surface_get_format(gbitmap->surface); - pixel_count = cairo_image_surface_get_width(gbitmap->surface) * - cairo_image_surface_get_height(gbitmap->surface); - - if (fmt == CAIRO_FORMAT_RGB24) { - /* Opaque image */ - for (pixel_loop=0; pixel_loop < pixel_count; pixel_loop++) { - /* Cairo surface is ARGB, written in native endian */ -#if G_BYTE_ORDER == G_LITTLE_ENDIAN - b = pixels[4 * pixel_loop + 0]; - g = pixels[4 * pixel_loop + 1]; - r = pixels[4 * pixel_loop + 2]; - t = pixels[4 * pixel_loop + 3]; -#else - t = pixels[4 * pixel_loop + 0]; - r = pixels[4 * pixel_loop + 1]; - g = pixels[4 * pixel_loop + 2]; - b = pixels[4 * pixel_loop + 3]; -#endif - - /* Core bitmaps always have a component order of rgba, - * regardless of system endianness */ - pixels[4 * pixel_loop + 0] = r; - pixels[4 * pixel_loop + 1] = g; - pixels[4 * pixel_loop + 2] = b; - pixels[4 * pixel_loop + 3] = t; - } - } else { - /* Alpha image: de-multiply alpha */ - for (pixel_loop=0; pixel_loop < pixel_count; pixel_loop++) { -#if G_BYTE_ORDER == G_LITTLE_ENDIAN - b = pixels[4 * pixel_loop + 0]; - g = pixels[4 * pixel_loop + 1]; - r = pixels[4 * pixel_loop + 2]; - t = pixels[4 * pixel_loop + 3]; -#else - t = pixels[4 * pixel_loop + 0]; - r = pixels[4 * pixel_loop + 1]; - g = pixels[4 * pixel_loop + 2]; - b = pixels[4 * pixel_loop + 3]; -#endif - - if (t != 0) { - r = (r << 8) / t; - g = (g << 8) / t; - b = (b << 8) / t; - - r = (r > 255) ? 255 : r; - g = (g > 255) ? 255 : g; - b = (b > 255) ? 255 : b; - } else { - r = g = b = 0; - } - - pixels[4 * pixel_loop + 0] = r; - pixels[4 * pixel_loop + 1] = g; - pixels[4 * pixel_loop + 2] = b; - pixels[4 * pixel_loop + 3] = t; - } - } - - gbitmap->converted = false; - return (unsigned char *) pixels; } @@ -284,22 +137,6 @@ static size_t bitmap_get_rowstride(void *vbitmap) /** - * Find the bytes per pixel of a bitmap - * - * \param vbitmap a bitmap, as returned by bitmap_create() - * \return bytes per pixel - */ -static size_t bitmap_get_bpp(void *vbitmap) -{ - struct bitmap *gbitmap = (struct bitmap *)vbitmap; - assert(gbitmap); - - return 4; -} - - - -/** * Free a bitmap. * * \param vbitmap a bitmap, as returned by bitmap_create() @@ -320,23 +157,6 @@ static void bitmap_destroy(void *vbitmap) /** - * Save a bitmap in the platform's native format. - * - * \param vbitmap a bitmap, as returned by bitmap_create() - * \param path pathname for file - * \param flags modify the behaviour of the save - * \return true on success, false on error and error reported - */ -static bool bitmap_save(void *vbitmap, const char *path, unsigned flags) -{ - struct bitmap *gbitmap = (struct bitmap *)vbitmap; - assert(gbitmap); - - return false; -} - - -/** * The bitmap image has changed, so flush any persistant cache. * * \param vbitmap a bitmap, as returned by bitmap_create() @@ -344,81 +164,10 @@ static bool bitmap_save(void *vbitmap, const char *path, unsigned flags) static void bitmap_modified(void *vbitmap) { struct bitmap *gbitmap = (struct bitmap *)vbitmap; - int pixel_loop; - int pixel_count; - uint8_t *pixels; - uint32_t t, r, g, b; - cairo_format_t fmt; assert(gbitmap); - fmt = cairo_image_surface_get_format(gbitmap->surface); - - pixel_count = cairo_image_surface_get_width(gbitmap->surface) * - cairo_image_surface_get_height(gbitmap->surface); - pixels = cairo_image_surface_get_data(gbitmap->surface); - - if (gbitmap->converted) { - cairo_surface_mark_dirty(gbitmap->surface); - return; - } - - if (fmt == CAIRO_FORMAT_RGB24) { - /* Opaque image */ - for (pixel_loop=0; pixel_loop < pixel_count; pixel_loop++) { - /* Core bitmaps always have a component order of rgba, - * regardless of system endianness */ - r = pixels[4 * pixel_loop + 0]; - g = pixels[4 * pixel_loop + 1]; - b = pixels[4 * pixel_loop + 2]; - t = pixels[4 * pixel_loop + 3]; - - /* Cairo surface is ARGB, written in native endian */ -#if G_BYTE_ORDER == G_LITTLE_ENDIAN - pixels[4 * pixel_loop + 0] = b; - pixels[4 * pixel_loop + 1] = g; - pixels[4 * pixel_loop + 2] = r; - pixels[4 * pixel_loop + 3] = t; -#else - pixels[4 * pixel_loop + 0] = t; - pixels[4 * pixel_loop + 1] = r; - pixels[4 * pixel_loop + 2] = g; - pixels[4 * pixel_loop + 3] = b; -#endif - } - } else { - /* Alpha image: pre-multiply alpha */ - for (pixel_loop=0; pixel_loop < pixel_count; pixel_loop++) { - r = pixels[4 * pixel_loop + 0]; - g = pixels[4 * pixel_loop + 1]; - b = pixels[4 * pixel_loop + 2]; - t = pixels[4 * pixel_loop + 3]; - - if (t != 0) { - r = ((r * (t + 1)) >> 8) & 0xff; - g = ((g * (t + 1)) >> 8) & 0xff; - b = ((b * (t + 1)) >> 8) & 0xff; - } else { - r = g = b = 0; - } - -#if G_BYTE_ORDER == G_LITTLE_ENDIAN - pixels[4 * pixel_loop + 0] = b; - pixels[4 * pixel_loop + 1] = g; - pixels[4 * pixel_loop + 2] = r; - pixels[4 * pixel_loop + 3] = t; -#else - pixels[4 * pixel_loop + 0] = t; - pixels[4 * pixel_loop + 1] = r; - pixels[4 * pixel_loop + 2] = g; - pixels[4 * pixel_loop + 3] = b; -#endif - } - } - cairo_surface_mark_dirty(gbitmap->surface); - - gbitmap->converted = true; } /* exported interface documented in gtk/bitmap.h */ @@ -530,13 +279,10 @@ static struct gui_bitmap_table bitmap_table = { .destroy = bitmap_destroy, .set_opaque = bitmap_set_opaque, .get_opaque = bitmap_get_opaque, - .test_opaque = bitmap_test_opaque, .get_buffer = bitmap_get_buffer, .get_rowstride = bitmap_get_rowstride, .get_width = nsgtk_bitmap_get_width, .get_height = nsgtk_bitmap_get_height, - .get_bpp = bitmap_get_bpp, - .save = bitmap_save, .modified = bitmap_modified, .render = bitmap_render, }; diff --git a/frontends/gtk/bitmap.h b/frontends/gtk/bitmap.h index 0f46d19a8..80a0e7a3a 100644 --- a/frontends/gtk/bitmap.h +++ b/frontends/gtk/bitmap.h @@ -26,7 +26,7 @@ extern struct gui_bitmap_table *nsgtk_bitmap_table; struct bitmap { cairo_surface_t *surface; /* original cairo surface */ cairo_surface_t *scsurface; /* scaled surface */ - bool converted; /** set if the surface data has been converted */ + bool opaque; }; int nsgtk_bitmap_get_width(void *vbitmap); diff --git a/frontends/gtk/gui.c b/frontends/gtk/gui.c index a826b053a..661176ded 100644 --- a/frontends/gtk/gui.c +++ b/frontends/gtk/gui.c @@ -44,6 +44,7 @@ #include "netsurf/browser.h" #include "netsurf/browser_window.h" #include "netsurf/netsurf.h" +#include "netsurf/bitmap.h" #include "content/fetch.h" #include "content/backing_store.h" #include "desktop/save_complete.h" @@ -131,12 +132,16 @@ uint32_t gtk_gui_gdkkey_to_nskey(GdkEventKey *key) case GDK_KEY(BackSpace): if (key->state & GDK_SHIFT_MASK) return NS_KEY_DELETE_LINE_START; + else if (key->state & GDK_CONTROL_MASK) + return NS_KEY_DELETE_WORD_LEFT; else return NS_KEY_DELETE_LEFT; case GDK_KEY(Delete): if (key->state & GDK_SHIFT_MASK) return NS_KEY_DELETE_LINE_END; + else if (key->state & GDK_CONTROL_MASK) + return NS_KEY_DELETE_WORD_RIGHT; else return NS_KEY_DELETE_RIGHT; @@ -148,10 +153,14 @@ uint32_t gtk_gui_gdkkey_to_nskey(GdkEventKey *key) case GDK_KEY(Left): case GDK_KEY(KP_Left): + if (key->state & GDK_CONTROL_MASK) + return NS_KEY_WORD_LEFT; return NS_KEY_LEFT; case GDK_KEY(Right): case GDK_KEY(KP_Right): + if (key->state & GDK_CONTROL_MASK) + return NS_KEY_WORD_RIGHT; return NS_KEY_RIGHT; case GDK_KEY(Up): @@ -972,6 +981,11 @@ static nserror nsgtk_setup(int argc, char** argv, char **respath) browser_set_dpi(gdk_screen_get_resolution(gdk_screen_get_default())); NSLOG(netsurf, INFO, "Set CSS DPI to %d", browser_get_dpi()); + bitmap_set_format(&(bitmap_fmt_t) { + .layout = BITMAP_LAYOUT_ARGB8888, + .pma = true, + }); + filepath_sfinddef(respath, buf, "mime.types", "/etc/"); gtk_fetch_filetype_init(buf); diff --git a/frontends/gtk/misc.c b/frontends/gtk/misc.c index bda0dd688..8ab1d914c 100644 --- a/frontends/gtk/misc.c +++ b/frontends/gtk/misc.c @@ -21,9 +21,11 @@ * Implementation of netsurf miscellaneous operations table */ +#include <string.h> #include <stdbool.h> #include <gtk/gtk.h> +#include "utils/config.h" #include "utils/errors.h" #include "utils/log.h" #include "utils/messages.h" diff --git a/frontends/gtk/scaffolding.c b/frontends/gtk/scaffolding.c index f08d5d0d0..71c96a8ba 100644 --- a/frontends/gtk/scaffolding.c +++ b/frontends/gtk/scaffolding.c @@ -18,6 +18,7 @@ #include <gtk/gtk.h> #include <stdbool.h> +#include <stdlib.h> #include <string.h> #include "utils/utils.h" diff --git a/frontends/gtk/search.c b/frontends/gtk/search.c index 068624153..17447bbb7 100644 --- a/frontends/gtk/search.c +++ b/frontends/gtk/search.c @@ -25,6 +25,7 @@ * that generally means web search and is confusing. */ +#include <stdlib.h> #include <stdbool.h> #include <gtk/gtk.h> diff --git a/frontends/gtk/toolbar.c b/frontends/gtk/toolbar.c index 32adabc5b..be676e210 100644 --- a/frontends/gtk/toolbar.c +++ b/frontends/gtk/toolbar.c @@ -3066,7 +3066,7 @@ contents_button_clicked_cb(GtkWidget *widget, gpointer data) struct nsgtk_toolbar *tb = (struct nsgtk_toolbar *)data; nserror res; - res = toolbar_navigate_to_url(tb, "http://www.netsurf-browser.org/documentation/"); + res = toolbar_navigate_to_url(tb, "https://www.netsurf-browser.org/documentation/"); if (res != NSERROR_OK) { nsgtk_warning(messages_get_errorcode(res), 0); } @@ -3087,7 +3087,7 @@ guide_button_clicked_cb(GtkWidget *widget, gpointer data) struct nsgtk_toolbar *tb = (struct nsgtk_toolbar *)data; nserror res; - res = toolbar_navigate_to_url(tb, "http://www.netsurf-browser.org/documentation/guide"); + res = toolbar_navigate_to_url(tb, "https://www.netsurf-browser.org/documentation/guide"); if (res != NSERROR_OK) { nsgtk_warning(messages_get_errorcode(res), 0); } @@ -3109,7 +3109,7 @@ info_button_clicked_cb(GtkWidget *widget, gpointer data) struct nsgtk_toolbar *tb = (struct nsgtk_toolbar *)data; nserror res; - res = toolbar_navigate_to_url(tb, "http://www.netsurf-browser.org/documentation/info"); + res = toolbar_navigate_to_url(tb, "https://www.netsurf-browser.org/documentation/info"); if (res != NSERROR_OK) { nsgtk_warning(messages_get_errorcode(res), 0); } diff --git a/frontends/monkey/bitmap.c b/frontends/monkey/bitmap.c index e53b565d1..900dbca72 100644 --- a/frontends/monkey/bitmap.c +++ b/frontends/monkey/bitmap.c @@ -31,26 +31,26 @@ struct bitmap { size_t rowstride; int width; int height; - unsigned int state; + bool opaque; }; -static void *bitmap_create(int width, int height, unsigned int state) +static void *bitmap_create(int width, int height, enum gui_bitmap_flags flags) { struct bitmap *ret = calloc(sizeof(*ret), 1); if (ret == NULL) return NULL; - + ret->width = width; ret->height = height; - ret->state = state; - + ret->opaque = (flags & BITMAP_OPAQUE) == BITMAP_OPAQUE; + ret->ptr = calloc(width, height * 4); - + if (ret->ptr == NULL) { free(ret); return NULL; } - + return ret; } @@ -64,23 +64,15 @@ static void bitmap_destroy(void *bitmap) static void bitmap_set_opaque(void *bitmap, bool opaque) { struct bitmap *bmap = bitmap; - - if (opaque) - bmap->state |= (BITMAP_OPAQUE); - else - bmap->state &= ~(BITMAP_OPAQUE); -} -static bool bitmap_test_opaque(void *bitmap) -{ - return false; + bmap->opaque = opaque; } static bool bitmap_get_opaque(void *bitmap) { struct bitmap *bmap = bitmap; - - return (bmap->state & BITMAP_OPAQUE) == BITMAP_OPAQUE; + + return bmap->opaque; } static unsigned char *bitmap_get_buffer(void *bitmap) @@ -96,21 +88,9 @@ static size_t bitmap_get_rowstride(void *bitmap) return bmap->width * 4; } -static size_t bitmap_get_bpp(void *bitmap) -{ - /* OMG?! */ - return 4; -} - -static bool bitmap_save(void *bitmap, const char *path, unsigned flags) -{ - return true; -} - static void bitmap_modified(void *bitmap) { - struct bitmap *bmap = bitmap; - bmap->state |= BITMAP_MODIFIED; + return; } static int bitmap_get_width(void *bitmap) @@ -137,13 +117,10 @@ static struct gui_bitmap_table bitmap_table = { .destroy = bitmap_destroy, .set_opaque = bitmap_set_opaque, .get_opaque = bitmap_get_opaque, - .test_opaque = bitmap_test_opaque, .get_buffer = bitmap_get_buffer, .get_rowstride = bitmap_get_rowstride, .get_width = bitmap_get_width, .get_height = bitmap_get_height, - .get_bpp = bitmap_get_bpp, - .save = bitmap_save, .modified = bitmap_modified, .render = bitmap_render, }; diff --git a/frontends/riscos/Makefile b/frontends/riscos/Makefile index af6585c46..79e6fc493 100644 --- a/frontends/riscos/Makefile +++ b/frontends/riscos/Makefile @@ -33,7 +33,7 @@ ifeq ($(HOST),riscos) LDFLAGS += -LOSLib: -lOSLib32 else LDFLAGS += -lOSLib32 - ifeq ($(SUBTARGET),-elf) + ifeq ($(findstring -elf,$(SUBTARGET)),-elf) # Go for static builds & AIF binary at the moment: CFLAGS += -static LDFLAGS += -static @@ -184,5 +184,5 @@ netsurf.zip: $(EXETARGET) $(Q) rsync --archive --verbose $(FRONTEND_SOURCE_DIR)/distribution/3rdParty $($@_TMPDIR) $(Q) cp $(FRONTEND_SOURCE_DIR)/distribution/ReadMe $($@_TMPDIR) $(Q) cp $(FRONTEND_SOURCE_DIR)/distribution/LeesMij $($@_TMPDIR) - $(Q) cd $($@_TMPDIR) && /opt/netsurf/arm-unknown-riscos/env/bin/zip -9vr\, $(CURDIR)/$@ * + $(Q) cd $($@_TMPDIR) && $(ZIP) -9vr\, $(CURDIR)/$@ * $(Q) $(RM) -rf $($@_TMPDIR) diff --git a/frontends/riscos/Makefile.tools b/frontends/riscos/Makefile.tools index 9ea5c29f2..19a2e7768 100644 --- a/frontends/riscos/Makefile.tools +++ b/frontends/riscos/Makefile.tools @@ -15,21 +15,42 @@ ifeq ($(HOST),riscos) CXX := g++ EXEEXT := PKG_CONFIG := + ZIP := zip else - # Cross-build for RO (either using GCCSDK 3.4.6 - AOF, - # either using GCCSDK 4 - ELF) + # Cross-build for RO + # Three options are available: + # a. GCCSDK 3.4.6 - AOF (machine: arm-unknown-riscos) + # b. GCCSDK 4 - ELF (machine: arm-unknown-riscos) + # c. GCCSDK 8+ - ELF, using EABI (machine: arm-riscos-gnueabihf) + # GCCSDK 3.4.6 and 4 are distinguished by GCCSDK 3.4.6 binary names + # not having the machine prefix (e.g. gcc), whereas GCCSDK 4 binaries + # do (e.g. arm-unknown-riscos-gcc). + + # Search for the toolchain install locations if we haven't been told + # The search order prefers GCCSDK 3.4.6/4 over 8+. ifeq ($(origin GCCSDK_INSTALL_ENV),undefined) ifneq ($(realpath /opt/netsurf/arm-unknown-riscos/env),) GCCSDK_INSTALL_ENV := /opt/netsurf/arm-unknown-riscos/env else - GCCSDK_INSTALL_ENV := /home/riscos/env + ifneq ($(realpath /opt/netsurf/arm-riscos-gnueabihf/env),) + GCCSDK_INSTALL_ENV := /opt/netsurf/arm-riscos-gnueabihf/env + else + # No NetSurf-specific toolchain found: try the "normal" GCCSDK path + GCCSDK_INSTALL_ENV := /home/riscos/env + endif endif endif - ifeq ($(origin GCCSDK_INSTALL_CROSSBIN),undefined) + + ifeq ($(origin GCCSDK_INSTALL_CROSSBIN),undefined) ifneq ($(realpath /opt/netsurf/arm-unknown-riscos/cross/bin),) GCCSDK_INSTALL_CROSSBIN := /opt/netsurf/arm-unknown-riscos/cross/bin else - GCCSDK_INSTALL_CROSSBIN := /home/riscos/cross/bin + ifneq ($(realpath /opt/netsurf/arm-riscos-gnueabihf/cross/bin),) + GCCSDK_INSTALL_CROSSBIN := /opt/netsurf/arm-riscos-gnueabihf/cross/bin + else + # No NetSurf-specific toolchain found: try the "normal" GCCSDK path + GCCSDK_INSTALL_CROSSBIN := /home/riscos/cross/bin + endif endif endif @@ -39,14 +60,27 @@ else SQUEEZE := $(GCCSDK_INSTALL_CROSSBIN)/squeeze RUNEXT := ,feb CC := $(wildcard $(GCCSDK_INSTALL_CROSSBIN)/*gcc) + + # Work out what kind of toolchain we're dealing with ifneq (,$(findstring arm-unknown-riscos-gcc,$(CC))) + # GCCSDK 4 SUBTARGET := -elf EXEEXT := ,e1f ELF2AIF := $(GCCSDK_INSTALL_CROSSBIN)/elf2aif else - SUBTARGET := -aof - EXEEXT := ,ff8 + ifneq (,$(findstring arm-riscos-gnueabihf-gcc,$(CC))) + # GCCSDK 8+ + SUBTARGET := -elfeabi + EXEEXT := ,e1f + ELF2AIF := $(GCCSDK_INSTALL_CROSSBIN)/elf2aif -e + else + # GCCSDK 3.4.6 + SUBTARGET := -aof + EXEEXT := ,ff8 + endif endif + CXX := $(wildcard $(GCCSDK_INSTALL_CROSSBIN)/*g++) - PKG_CONFIG := $(GCCSDK_INSTALL_ENV)/ro-pkg-config + PKG_CONFIG = PKG_CONFIG_LIBDIR="$(PREFIX)/lib/pkgconfig:$(GCCSDK_INSTALL_ENV)/lib/pkgconfig:$(GCCSDK_INSTALL_ENV)/share/pkgconfig" pkg-config + ZIP := $(GCCSDK_INSTALL_CROSSBIN)/zip endif diff --git a/frontends/riscos/appdir/Resources/SearchEngines b/frontends/riscos/appdir/Resources/SearchEngines index e7fd7cb65..1e4530f06 100644 --- a/frontends/riscos/appdir/Resources/SearchEngines +++ b/frontends/riscos/appdir/Resources/SearchEngines @@ -1,22 +1,21 @@ -Google|www.google.com|http://www.google.com/search?q=%s|http://www.google.com/favicon.ico| -Yahoo|search.yahoo.com|http://search.yahoo.com/search?p=%s|http://www.yahoo.com/favicon.ico| -Bing|www.bing.com|http://www.bing.com/search?q=%s|http://www.bing.com/favicon.ico| -Business.com|www.business.com|http://www.business.com/search/rslt_default.asp?query=%s|http://www.business.com/favicon.ico| -Omgili|www.omgili.com|http://www.omgili.com/AAAAA/%s.html|http://www.omgili.com/favicon.ico| -BBC News|search.bbc.co.uk|http://search.bbc.co.uk/search?q=%s&tab=ns|http://news.bbc.co.uk/favicon.ico| -Ubuntu Packages|packages.ubuntu.com|http://packages.ubuntu.com/search?keywords=%s|http://packages.ubuntu.com/favicon.ico| -Creative Commons|creativecommons.org|http://creativecommons.org/?s=%s|http://creativecommons.org/favicon.ico| -Ask.com|www.ask.com|http://www.ask.com/web?q=%s|http://www.ask.com/favicon.ico| -Answers.com|www.answers.com|http://www.answers.com/%s|http://www.answers.com/favicon.ico| -Dictionary.com|dictionary.reference.com|http://dictionary.reference.com/browse/%s?jss=0|http://dictionary.reference.com/favicon.ico| -Youtube|www.youtube.com|http://www.youtube.com/results?search_query=%s|http://www.youtube.com/favicon.ico| -AeroMp3|www.aeromp3.com|http://www.aeromp3.com/search?q=%s|http://www.aeromp3.com/favicon.ico| -AOL|search.aol.com|http://search.aol.com/aol/search?query=%s|http://www.aol.com/favicon.ico| -Baidu|www.baidu.com|http://www.baidu.com/s?wd=%s|http://www.baidu.com/favicon.ico| -Amazon|www.amazon.com|http://www.amazon.com/s/ref=nb_ss_gw?field-keywords=%s|http://www.amazon.com/favicon.ico| -Ebay|shop.ebay.com|http://shop.ebay.com/items/%s|http://www.ebay.com/favicon.ico| -IMDB|www.imdb.com|http://www.imdb.com/find?q=%s|http://www.imdb.com/favicon.ico| -ESPN|search.espn.go.com|http://search.espn.go.com/%s/|http://www.espn.go.com/favicon.ico| -Wikipedia|en.wikipedia.org|http://en.wikipedia.org/w/index.php?title=Special%%3ASearch&search=%s|http://en.wikipedia.org/favicon.ico| -DuckDuckGo|www.duckduckgo.com|http://www.duckduckgo.com/?q=%s|http://www.duckduckgo.com/favicon.ico| -Seeks|www.seeks-project.info|https://www.seeks-project.info/search.php/search?q=%s|http://www.seeks-project.info/search.php/public/images/seek_icon_32x32_transparent.png| +Google|www.google.com|https://www.google.com/search?q=%s|https://www.google.com/favicon.ico| +Yahoo|search.yahoo.com|https://search.yahoo.com/search?p=%s|https://www.yahoo.com/favicon.ico| +Bing|www.bing.com|https://www.bing.com/search?q=%s|https://www.bing.com/favicon.ico| +Business.com|www.business.com|https://www.business.com/search/rslt_default.asp?query=%s|https://www.business.com/favicon.ico| +Omgili|www.omgili.com|https://www.omgili.com/AAAAA/%s.html|https://www.omgili.com/favicon.ico| +BBC News|search.bbc.co.uk|https://search.bbc.co.uk/search?q=%s&tab=ns|https://news.bbc.co.uk/favicon.ico| +Ubuntu Packages|packages.ubuntu.com|https://packages.ubuntu.com/search?keywords=%s|https://packages.ubuntu.com/favicon.ico| +Creative Commons|creativecommons.org|https://creativecommons.org/?s=%s|https://creativecommons.org/favicon.ico| +Ask.com|www.ask.com|https://www.ask.com/web?q=%s|https://www.ask.com/favicon.ico| +Answers.com|www.answers.com|https://www.answers.com/%s|https://www.answers.com/favicon.ico| +Dictionary.com|dictionary.reference.com|https://dictionary.reference.com/browse/%s?jss=0|https://dictionary.reference.com/favicon.ico| +Youtube|www.youtube.com|https://www.youtube.com/results?search_query=%s|https://www.youtube.com/favicon.ico| +AeroMp3|www.aeromp3.com|https://www.aeromp3.com/search?q=%s|https://www.aeromp3.com/favicon.ico| +AOL|search.aol.com|https://search.aol.com/aol/search?query=%s|https://www.aol.com/favicon.ico| +Baidu|www.baidu.com|https://www.baidu.com/s?wd=%s|https://www.baidu.com/favicon.ico| +Amazon|www.amazon.com|https://www.amazon.com/s/ref=nb_ss_gw?field-keywords=%s|https://www.amazon.com/favicon.ico| +Ebay|shop.ebay.com|https://shop.ebay.com/items/%s|https://www.ebay.com/favicon.ico| +IMDB|www.imdb.com|https://www.imdb.com/find?q=%s|https://www.imdb.com/favicon.ico| +ESPN|search.espn.go.com|https://search.espn.go.com/%s/|https://www.espn.go.com/favicon.ico| +Wikipedia|en.wikipedia.org|https://en.wikipedia.org/w/index.php?title=Special%%3ASearch&search=%s|https://en.wikipedia.org/favicon.ico| +DuckDuckGo|www.duckduckgo.com|https://www.duckduckgo.com/?q=%s|https://www.duckduckgo.com/favicon.ico| diff --git a/frontends/riscos/bitmap.c b/frontends/riscos/bitmap.c index d554d54b4..97dce6acc 100644 --- a/frontends/riscos/bitmap.c +++ b/frontends/riscos/bitmap.c @@ -44,7 +44,6 @@ #include "utils/log.h" #include "utils/messages.h" #include "netsurf/plotters.h" -#include "netsurf/bitmap.h" #include "netsurf/content.h" #include "riscos/gui.h" @@ -91,7 +90,7 @@ static bool bitmap_initialise(struct bitmap *bitmap) assert(!bitmap->sprite_area); area_size = 16 + 44 + bitmap->width * bitmap->height * 4; - if (bitmap->state & BITMAP_CLEAR_MEMORY) + if (bitmap->clear) bitmap->sprite_area = calloc(1, area_size); else bitmap->sprite_area = malloc(area_size); @@ -123,7 +122,7 @@ static bool bitmap_initialise(struct bitmap *bitmap) /* exported interface documented in riscos/bitmap.h */ -void *riscos_bitmap_create(int width, int height, unsigned int state) +void *riscos_bitmap_create(int width, int height, enum gui_bitmap_flags flags) { struct bitmap *bitmap; @@ -135,7 +134,8 @@ void *riscos_bitmap_create(int width, int height, unsigned int state) return NULL; bitmap->width = width; bitmap->height = height; - bitmap->state = state; + bitmap->opaque = (flags & BITMAP_OPAQUE) == BITMAP_OPAQUE; + bitmap->clear = (flags & BITMAP_CLEAR) == BITMAP_CLEAR; return bitmap; } @@ -172,10 +172,7 @@ static void bitmap_set_opaque(void *vbitmap, bool opaque) struct bitmap *bitmap = (struct bitmap *) vbitmap; assert(bitmap); - if (opaque) - bitmap->state |= BITMAP_OPAQUE; - else - bitmap->state &= ~BITMAP_OPAQUE; + bitmap->opaque = opaque; } @@ -192,61 +189,12 @@ static size_t bitmap_get_rowstride(void *vbitmap) } -/** - * Tests whether a bitmap has an opaque alpha channel - * - * \param vbitmap a bitmap, as returned by bitmap_create() - * \return whether the bitmap is opaque - */ -static bool bitmap_test_opaque(void *vbitmap) -{ - struct bitmap *bitmap = (struct bitmap *) vbitmap; - unsigned char *sprite; - unsigned int width, height, size; - osspriteop_header *sprite_header; - unsigned *p, *ep; - - assert(bitmap); - - sprite = riscos_bitmap_get_buffer(bitmap); - if (!sprite) - return false; - - width = bitmap_get_rowstride(bitmap); - - sprite_header = (osspriteop_header *) (bitmap->sprite_area + 1); - - height = (sprite_header->height + 1); - - size = width * height; - - p = (void *) sprite; - - ep = (void *) (sprite + (size & ~31)); - while (p < ep) { - /* \todo prefetch(p, 128)? */ - if (((p[0] & p[1] & p[2] & p[3] & p[4] & p[5] & p[6] & p[7]) - & 0xff000000U) != 0xff000000U) - return false; - p += 8; - } - - ep = (void *) (sprite + size); - while (p < ep) { - if ((*p & 0xff000000U) != 0xff000000U) return false; - p++; - } - - return true; -} - - /* exported interface documented in riscos/bitmap.h */ bool riscos_bitmap_get_opaque(void *vbitmap) { struct bitmap *bitmap = (struct bitmap *) vbitmap; assert(bitmap); - return (bitmap->state & BITMAP_OPAQUE); + return bitmap->opaque; } @@ -449,8 +397,7 @@ bool riscos_bitmap_save(void *vbitmap, const char *path, unsigned flags) */ static void bitmap_modified(void *vbitmap) { - struct bitmap *bitmap = (struct bitmap *) vbitmap; - bitmap->state |= BITMAP_MODIFIED; + (void)(vbitmap); } @@ -480,20 +427,6 @@ static int bitmap_get_height(void *vbitmap) } -/** - * Find the bytes per pixel of a bitmap - * - * \param vbitmap a bitmap, as returned by bitmap_create() - * \return bytes per pixel - */ -static size_t bitmap_get_bpp(void *vbitmap) -{ - struct bitmap *bitmap = (struct bitmap *)vbitmap; - assert(bitmap); - return 4; -} - - /* exported interface documented in riscos/bitmap.h */ void riscos_bitmap_overlay_sprite(struct bitmap *bitmap, const osspriteop_header *s) @@ -874,13 +807,10 @@ static struct gui_bitmap_table bitmap_table = { .destroy = riscos_bitmap_destroy, .set_opaque = bitmap_set_opaque, .get_opaque = riscos_bitmap_get_opaque, - .test_opaque = bitmap_test_opaque, .get_buffer = riscos_bitmap_get_buffer, .get_rowstride = bitmap_get_rowstride, .get_width = bitmap_get_width, .get_height = bitmap_get_height, - .get_bpp = bitmap_get_bpp, - .save = riscos_bitmap_save, .modified = bitmap_modified, .render = riscos_bitmap_render, }; diff --git a/frontends/riscos/bitmap.h b/frontends/riscos/bitmap.h index f66ebb317..628ec4b7a 100644 --- a/frontends/riscos/bitmap.h +++ b/frontends/riscos/bitmap.h @@ -19,6 +19,8 @@ #ifndef _NETSURF_RISCOS_BITMAP_H_ #define _NETSURF_RISCOS_BITMAP_H_ +#include "netsurf/bitmap.h" + struct osspriteop_area; struct osspriteop_header; struct hlcache_handle; @@ -37,7 +39,8 @@ struct bitmap { int width; /**< width of bitmap */ int height; /**< height of bitmap */ - unsigned int state; /**< The bitmap attributes (opaque/dirty etc.) */ + bool opaque; /**< Whether the bitmap is opaque. */ + bool clear; /**< Whether the bitmap should be initialised to zeros. */ struct osspriteop_area *sprite_area; /**< Uncompressed data, or NULL */ }; @@ -71,11 +74,11 @@ void riscos_bitmap_overlay_sprite(struct bitmap *bitmap, const struct osspriteop * Create a bitmap. * * \param width width of image in pixels - * \param height width of image in pixels - * \param state the state to create the bitmap in. + * \param height height of image in pixels + * \param flags flags for bitmap creation. * \return an opaque struct bitmap, or NULL on memory exhaustion */ -void *riscos_bitmap_create(int width, int height, unsigned int state); +void *riscos_bitmap_create(int width, int height, enum gui_bitmap_flags flags); /** * Free a bitmap. diff --git a/frontends/riscos/configure/con_image.c b/frontends/riscos/configure/con_image.c index 23c663aff..86e6b8f6f 100644 --- a/frontends/riscos/configure/con_image.c +++ b/frontends/riscos/configure/con_image.c @@ -209,6 +209,7 @@ bool ro_gui_options_image_click(wimp_pointer *pointer) data.indirected_text.text, true); ro_gui_set_icon_selected_state(pointer->w, IMAGE_DISABLE_ANIMATION, false); + /* fall through */ case IMAGE_DISABLE_ANIMATION: ro_gui_options_update_shading(pointer->w); break; diff --git a/frontends/riscos/content-handlers/artworks.c b/frontends/riscos/content-handlers/artworks.c index 0227603d9..c107ec6b4 100644 --- a/frontends/riscos/content-handlers/artworks.c +++ b/frontends/riscos/content-handlers/artworks.c @@ -93,7 +93,7 @@ struct awinfo_block { /* Assembler routines for interfacing with the ArtworksRenderer module */ extern os_error *awrender_init(const char **doc, - unsigned long *doc_size, + size_t *doc_size, void *routine, void *workspace); diff --git a/frontends/riscos/content-handlers/awrender.s b/frontends/riscos/content-handlers/awrender.s index 5bcafe520..fe37f66fb 100644 --- a/frontends/riscos/content-handlers/awrender.s +++ b/frontends/riscos/content-handlers/awrender.s @@ -209,12 +209,18 @@ errblk % 256 @ os_error *awrender_init(byte **doc, size_t *doc_size, void *init_routine, void *init_workspace); .global awrender_init -awrender_init: MOV ip,sp +awrender_init: +#ifndef __ARM_EABI__ + MOV ip,sp STMFD sp!,{a1,a2,v1,v2,fp,ip,lr,pc} SUB fp,ip,#4 SUB ip,sp,#512 CMP ip,sl BLMI __rt_stkovf_split_big +#else + STMFD sp!,{a1,a2,v1,v2,fp,lr} + ADD fp,sp,#4*4 +#endif LDR v2,=aw_temp LDR a1,[a1] @@ -235,14 +241,18 @@ awrender_init: MOV ip,sp @ return updated block ptr & size to caller - LDR a2,[fp,#-28] - LDR a3,[fp,#-24] + LDR a2,[sp],#4 + LDR a3,[sp],#4 LDR ip,[v2,#aw_rsz_block] LDR lr,[v2,#aw_rsz_size] STR ip,[a2] STR lr,[a3] - LDMEA fp,{v1,v2,fp,sp,pc} +#ifndef __ARM_EABI__ + LDMDB fp,{v1,v2,fp,sp,pc} +#else + LDMIA sp!,{v1,v2,fp,pc} +#endif @ os_error *awrender_render(const char *doc, @@ -258,37 +268,46 @@ awrender_init: MOV ip,sp @ void *workspace); .global awrender_render -awrender_render: MOV ip,sp - STMFD sp!,{v1-v4,fp,ip,lr,pc} +awrender_render: +#ifndef __ARM_EABI__ + MOV ip,sp + STMFD sp!,{v1-v6,fp,ip,lr,pc} SUB fp,ip,#4 SUB ip,sp,#512 CMP ip,sl BLMI __rt_stkovf_split_big + ADD ip,fp,#4 @ ip -> stacked args +#else + MOV ip,sp @ ip -> stacked args + STMFD sp!,{v1-v6,fp,lr} + ADD fp,sp,#6*4 +#endif - LDR R12,[fp,#20] LDR R14,=aw_temp - LDR R5,[fp,#4] - LDR R6,[fp,#12] + LDR R5,[ip,#0] @ rsz_block + LDR R6,[ip,#8] @ wysiwyg_setting LDR R4,[R5] @ resizable block - LDR R7,[fp,#16] + LDR R7,[ip,#12] @ output_dest + LDR R8,[ip,#16] @ doc_size + LDR R9,[ip,#4] @ rsz_size STR R4,[R14,#aw_rsz_block] STR R0,[R14,#aw_fixed_block] @ document ptr - STR R12,[R14,#aw_fixed_size] @ document size - LDR R12,[fp,#8] + STR R8,[R14,#aw_fixed_size] @ document size STR R5,[sp,#-4]! @ ptr to receive block - STR R12,[sp,#-4]! @ ptr to receive size + STR R9,[sp,#-4]! @ ptr to receive size - LDR R12,[R12] + LDR R9,[R9] ADR R5,aw_callback - STR R12,[R14,#aw_rsz_size] + STR R9,[R14,#aw_rsz_size] STR sl,[R14,#aw_sl] STR fp,[R14,#aw_fp] - LDR R12,[fp,#28] + LDR R8,[ip,#20] @ routine + LDR R12,[ip,#24] @ workspace MOV lr,pc - LDR pc,[fp,#24] + MOV pc,R8 MOVVC a1,#0 @ return updated block ptr & size to caller @@ -301,7 +320,11 @@ awrender_render: MOV ip,sp STR R5,[R12] STR R6,[R4] - LDMEA fp,{v1-v4,fp,sp,pc} +#ifndef __ARM_EABI__ + LDMDB fp,{v1-v6,fp,sp,pc} +#else + LDMIA sp!,{v1-v6,fp,pc} +#endif @ Callback routine for block resizing @@ -340,11 +363,18 @@ aw_callback: TEQ R11,#3 CMP R1,R2 BLS aw_read - STMFD R13!,{R1,R10-R12,R14} + STMFD R13!,{R1,R4,R10-R12,R14} +#ifdef __ARM_EABI__ + MOV R4,R13 @ save original sp + BIC R13,R13,#7 @ align to multiple of 8 +#endif LDR sl,[R11,#aw_sl] LDR fp,[R11,#aw_fp] BL realloc - LDMFD R13!,{R1,R10-R12,R14} +#ifdef __ARM_EABI__ + MOV R13,R4 @ restore unaligned sp +#endif + LDMFD R13!,{R1,R4,R10-R12,R14} CMP R0,#0 @ did it work? BEQ aw_nomem @@ -359,7 +389,11 @@ aw_read: @ return details of fixed block SUBS R11,R11,R11 @ clear V MOV PC,R14 -aw_nomem: STMFD R13!,{R10,R12,R14} +aw_nomem: STMFD R13!,{R4,R10,R12,R14} +#ifdef __ARM_EABI__ + MOV R4,R13 @ save original sp + BIC R13,R13,#7 @ align to multiple of 8 +#endif LDR sl,[R11,#aw_sl] LDR fp,[R11,#aw_fp] ADR R0,tok_nomem @@ -370,13 +404,17 @@ aw_nomem: STMFD R13!,{R10,R12,R14} SUB R0,R0,#4 @ error number already 0 MOV R11,#0 @ restore reason code CMP PC,#1<<31 @ set V - LDMFD R13!,{R10,R12,PC} +#ifdef __ARM_EABI__ + MOV R13,R4 @ restore original sp +#endif + LDMFD R13!,{R4,R10,R12,PC} tok_nomem: .asciz "NoMemory" .align .bss + .align aw_temp: .space sizeof_aw .type aw_temp, %object .size aw_temp, . - aw_temp diff --git a/frontends/riscos/download.c b/frontends/riscos/download.c index bdc705426..216f5750c 100644 --- a/frontends/riscos/download.c +++ b/frontends/riscos/download.c @@ -313,8 +313,8 @@ gui_download_window_create(download_context *ctx, struct gui_window *gui) /** @todo change this to take a reference to the nsurl and use * that value directly rather than using a fixed buffer. */ - strncpy(dw->url, nsurl_access(url), sizeof dw->url); - dw->url[sizeof dw->url - 1] = 0; + strncpy(dw->url, nsurl_access(url), sizeof(dw->url) - 1); + dw->url[sizeof(dw->url) - 1] = 0; dw->status[0] = 0; gettimeofday(&dw->start_time, 0); @@ -414,7 +414,8 @@ gui_download_window_create(download_context *ctx, struct gui_window *gui) return 0; } else { - strncpy(dw->path, local_path, sizeof dw->path); + strncpy(dw->path, local_path, sizeof(dw->path) - 1); + dw->path[sizeof(dw->path)-1] = 0; free(local_path); } @@ -484,7 +485,8 @@ static void gui_download_window_error(struct gui_download_window *dw, riscos_schedule(-1, ro_gui_download_update_status_wrapper, dw); /* place error message in status icon in red */ - strncpy(dw->status, error_msg, sizeof dw->status); + strncpy(dw->status, error_msg, sizeof(dw->status) - 1); + dw->status[sizeof(dw->status)-1] = 0; error = xwimp_set_icon_state(dw->window, ICON_DOWNLOAD_STATUS, wimp_COLOUR_RED << wimp_ICON_FG_COLOUR_SHIFT, @@ -872,11 +874,11 @@ bool ro_gui_download_click(wimp_pointer *pointer) ro_gui_drag_icon(x, y, sprite); } else if (pointer->i == ICON_DOWNLOAD_DESTINATION) { - char command[256] = "Filer_OpenDir "; + char command[sizeof(dw->path) + 14 + 1] = "Filer_OpenDir "; char *dot; - strncpy(command + 14, dw->path, 242); - command[255] = 0; + strncpy(command + 14, dw->path, sizeof(command) - 14 - 1); + command[sizeof(command) - 1] = 0; dot = strrchr(command, '.'); if (dot) { os_error *error; @@ -1384,7 +1386,8 @@ bool ro_gui_download_save(struct gui_download_window *dw, } dw->saved = true; - strncpy(dw->path, file_name, sizeof dw->path); + strncpy(dw->path, file_name, sizeof(dw->path) - 1); + dw->path[sizeof(dw->path)-1] = 0; if (!dw->send_dataload || dw->save_message.data.data_xfer.est_size != -1) ro_gui_download_remember_dir(file_name); diff --git a/frontends/riscos/gui.c b/frontends/riscos/gui.c index f9268cac1..22f6f257c 100644 --- a/frontends/riscos/gui.c +++ b/frontends/riscos/gui.c @@ -306,7 +306,7 @@ set_colour_from_wimp(struct nsoption_s *opts, static nserror set_defaults(struct nsoption_s *defaults) { /* Set defaults for absent option strings */ - nsoption_setnull_charp(ca_bundle, strdup("NetSurf:Resources.ca-bundle")); + nsoption_setnull_charp(ca_bundle, strdup("<NetSurf$CABundle>")); nsoption_setnull_charp(cookie_file, strdup("NetSurf:Cookies")); nsoption_setnull_charp(cookie_jar, strdup(CHOICES_PREFIX "Cookies")); @@ -1231,16 +1231,9 @@ static nserror gui_init(int argc, char** argv) /* Initialise save complete functionality */ save_complete_init(); - /* Initialise the font subsystem */ - nsfont_init(); - - /* Load in visited URLs, Cookies, and hostlist */ + /* Load in visited URLs and Cookies */ urldb_load(nsoption_charp(url_path)); urldb_load_cookies(nsoption_charp(cookie_file)); - hotlist_init(nsoption_charp(hotlist_path), - nsoption_bool(external_hotlists) ? - NULL : - nsoption_charp(hotlist_save)); /* Initialise with the wimp */ error = xwimp_initialise(wimp_VERSION_RO38, task_name, @@ -1271,6 +1264,15 @@ static nserror gui_init(int argc, char** argv) ro_message_register_route(message_WINDOW_INFO, ro_msg_window_info); + /* Initialise the font subsystem (must be after Wimp_Initialise) */ + nsfont_init(); + + /* Initialise the hotlist (must be after fonts) */ + hotlist_init(nsoption_charp(hotlist_path), + nsoption_bool(external_hotlists) ? + NULL : + nsoption_charp(hotlist_save)); + /* Initialise global information */ ro_gui_get_screen_properties(); ro_gui_wimp_get_desktop_font(); diff --git a/frontends/riscos/gui/button_bar.c b/frontends/riscos/gui/button_bar.c index 34ae39ae5..50e1de3c1 100644 --- a/frontends/riscos/gui/button_bar.c +++ b/frontends/riscos/gui/button_bar.c @@ -189,7 +189,8 @@ struct button_bar *ro_gui_button_bar_create(struct theme_descriptor *theme, icon->bar_next = NULL; strncpy(icon->sprite, buttons[def].icon, - BUTTONBAR_SPRITE_NAME_LENGTH); + BUTTONBAR_SPRITE_NAME_LENGTH - 1); + icon->sprite[BUTTONBAR_SPRITE_NAME_LENGTH-1] = 0; snprintf(icon->validation, BUTTONBAR_VALIDATION_LENGTH, "R5;S%s,p%s", icon->sprite, icon->sprite); diff --git a/frontends/riscos/gui/throbber.c b/frontends/riscos/gui/throbber.c index f3b79a68e..e3e4106cc 100644 --- a/frontends/riscos/gui/throbber.c +++ b/frontends/riscos/gui/throbber.c @@ -32,6 +32,7 @@ #include "oslib/wimp.h" #include "utils/log.h" +#include "utils/utils.h" #include "riscos/gui.h" #include "riscos/gui/throbber.h" @@ -385,7 +386,8 @@ bool ro_gui_throbber_animate(struct throbber *throbber) throbber->current_frame = 1; snprintf(sprite_name, THROBBER_SPRITE_NAME_LENGTH, - "throbber%i", throbber->current_frame); + "throbber%i", + min(max(throbber->current_frame, 0), 999)); ro_gui_set_icon_string(throbber->window, throbber->icon, sprite_name, true); diff --git a/frontends/riscos/gui/url_bar.c b/frontends/riscos/gui/url_bar.c index ec21e9371..8802db731 100644 --- a/frontends/riscos/gui/url_bar.c +++ b/frontends/riscos/gui/url_bar.c @@ -1506,7 +1506,7 @@ ro_gui_url_bar_set_content_favicon(struct url_bar *url_bar, struct gui_window *g) { int type = 0; - char sprite[URLBAR_FAVICON_NAME_LENGTH]; + char sprite[URLBAR_FAVICON_NAME_LENGTH-1]; struct hlcache_handle *h; if (url_bar == NULL || diff --git a/frontends/riscos/iconbar.c b/frontends/riscos/iconbar.c index a9a62a98f..c85827030 100644 --- a/frontends/riscos/iconbar.c +++ b/frontends/riscos/iconbar.c @@ -207,7 +207,7 @@ bool ro_gui_iconbar_menu_select(wimp_w w, wimp_i i, wimp_menu *menu, switch (action) { case HELP_OPEN_CONTENTS: - error = nsurl_create("http://www.netsurf-browser.org/documentation/", &url); + error = nsurl_create("https://www.netsurf-browser.org/documentation/", &url); if (error == NSERROR_OK) { error = browser_window_create(BW_CREATE_HISTORY, url, diff --git a/frontends/riscos/print.c b/frontends/riscos/print.c index b390c693d..e87f47857 100644 --- a/frontends/riscos/print.c +++ b/frontends/riscos/print.c @@ -106,7 +106,7 @@ static bool print_document(struct gui_window *g, const char *filename); static const char *print_declare_fonts(struct hlcache_handle *h); static void print_fonts_callback(void *context, const char *font_name, unsigned int font_size, - const char *s8, unsigned short *s16, unsigned int n, + const uint8_t *s8, const uint32_t *s32, unsigned int n, int x, int y); @@ -998,7 +998,7 @@ end: void print_fonts_callback(void *context, const char *font_name, unsigned int font_size, - const char *s8, unsigned short *s16, unsigned int n, + const uint8_t *s8, const uint32_t *s32, unsigned int n, int x, int y) { unsigned int i; @@ -1009,7 +1009,7 @@ void print_fonts_callback(void *context, (void) x; /* unused */ (void) y; /* unused */ - assert(s8 || s16); + assert(s8 || s32); /* check if the font name is new */ for (i = 0; i != print_fonts_count && diff --git a/frontends/riscos/save.c b/frontends/riscos/save.c index 86797602b..e6b43f1a3 100644 --- a/frontends/riscos/save.c +++ b/frontends/riscos/save.c @@ -40,8 +40,10 @@ #include "utils/config.h" #include "utils/log.h" #include "utils/messages.h" -#include "utils/utf8.h" +#include "utils/nsoption.h" #include "utils/nsurl.h" +#include "utils/utf8.h" +#include "utils/utils.h" #include "netsurf/browser_window.h" #include "netsurf/window.h" #include "netsurf/bitmap.h" @@ -60,7 +62,6 @@ #include "riscos/menus.h" #include "riscos/message.h" #include "riscos/mouse.h" -#include "utils/nsoption.h" #include "riscos/query.h" #include "riscos/save.h" #include "riscos/save_draw.h" @@ -243,7 +244,7 @@ ro_gui_save_create_thumbnail(struct hlcache_handle *h, const char *name) struct bitmap *bitmap; osspriteop_area *area; - bitmap = riscos_bitmap_create(34, 34, BITMAP_NEW | BITMAP_OPAQUE | BITMAP_CLEAR_MEMORY); + bitmap = riscos_bitmap_create(34, 34, BITMAP_OPAQUE | BITMAP_CLEAR); if (!bitmap) { NSLOG(netsurf, INFO, "Thumbnail initialisation failed."); return false; @@ -257,7 +258,8 @@ ro_gui_save_create_thumbnail(struct hlcache_handle *h, const char *name) } sprite_header = (osspriteop_header *)(area + 1); - strncpy(sprite_header->name, name, 12); + memset(sprite_header->name, 0, 12); + memcpy(sprite_header->name, name, min(strlen(name), 12)); /* we can't resize the saveas sprite area because it may move @@ -1018,7 +1020,7 @@ ro_gui_save_content(struct hlcache_handle *h, char *path, bool force_overwrite) } else gui_save_current_type = GUI_SAVE_OBJECT_ORIG; /** \todo do this earlier? */ - /* no break */ + /* fall through */ case GUI_SAVE_SOURCE: case GUI_SAVE_OBJECT_ORIG: source_data = content_get_source_data(h, &source_size); diff --git a/frontends/riscos/scripts/Run b/frontends/riscos/scripts/Run index 4a51d7838..94aa933b0 100644 --- a/frontends/riscos/scripts/Run +++ b/frontends/riscos/scripts/Run @@ -43,6 +43,9 @@ If "<InetDBase$Path>" = "" Then Error Internet resources can not be found If "<Unicode$Path>" = "" Then Error NetSurf requires the !Unicode resource. This can be found, along with the Iconv module, at http://www.netsurf-browser.org/projects/iconv/ If "<Inet$MimeMappings>" = "" Then Set Inet$MimeMappings InetDBase:MimeMap +| Use OS copy of root CA bundle, if present +IfThere InetDBase:CertData Then Set NetSurf$CABundle InetDBase:CertData Else Set NetSurf$CABundle NetSurf:Resources.ca-bundle + | Define this alias for clarity | Syntax: NetSurfRMLoad <Path to module> Set Alias$NetSurfRMLoad IfThere %%*0 Then RMLoad %%*0 diff --git a/frontends/riscos/templates/de b/frontends/riscos/templates/de index 19a23e330..4ad051383 100644 --- a/frontends/riscos/templates/de +++ b/frontends/riscos/templates/de @@ -1145,7 +1145,7 @@ wimp_window { icon_esg:0 icon_fg:wimp_COLOUR_BLACK icon_bg:wimp_COLOUR_VERY_LIGHT_GREY - text.text:"http://netsurf.sourceforge.net/netsurf.zip" + text.text:"https://netsurf.sourceforge.net/netsurf.zip" text.size:* text.validation:"R2" } diff --git a/frontends/riscos/templates/en b/frontends/riscos/templates/en index d5259d922..c418ed7b9 100644 --- a/frontends/riscos/templates/en +++ b/frontends/riscos/templates/en @@ -1355,7 +1355,7 @@ wimp_window { icon_esg:0 icon_fg:wimp_COLOUR_BLACK icon_bg:wimp_COLOUR_VERY_LIGHT_GREY - text.text:"http://netsurf.sourceforge.net/netsurf.zip" + text.text:"https://netsurf.sourceforge.net/netsurf.zip" text.size:* text.validation:"R2" } diff --git a/frontends/riscos/templates/fr b/frontends/riscos/templates/fr index 76a4611bf..cdc109855 100644 --- a/frontends/riscos/templates/fr +++ b/frontends/riscos/templates/fr @@ -1145,7 +1145,7 @@ wimp_window { icon_esg:0 icon_fg:wimp_COLOUR_BLACK icon_bg:wimp_COLOUR_VERY_LIGHT_GREY - text.text:"http://netsurf.sourceforge.net/netsurf.zip" + text.text:"https://netsurf.sourceforge.net/netsurf.zip" text.size:* text.validation:"R2" } diff --git a/frontends/riscos/templates/nl b/frontends/riscos/templates/nl index 01188b097..2fba8b5c9 100644 --- a/frontends/riscos/templates/nl +++ b/frontends/riscos/templates/nl @@ -1359,8 +1359,8 @@ wimp_window { icon_esg:0 icon_fg:wimp_COLOUR_BLACK icon_bg:wimp_COLOUR_VERY_LIGHT_GREY - text.text:"http://netsurf.sourceforge.net/netsurf.zip" - text.size:43 + text.text:"https://netsurf.sourceforge.net/netsurf.zip" + text.size:* text.validation:"R2" } wimp_icon { diff --git a/frontends/riscos/window.c b/frontends/riscos/window.c index 28ef06fa9..2b51c2fb9 100644 --- a/frontends/riscos/window.c +++ b/frontends/riscos/window.c @@ -1312,7 +1312,7 @@ ro_gui_window_handle_local_keypress(struct gui_window *g, case IS_WIMP_KEY + wimp_KEY_F1: /* Help. */ { nserror error = nsurl_create( - "http://www.netsurf-browser.org/documentation/", + "https://www.netsurf-browser.org/documentation/", &url); if (error == NSERROR_OK) { error = browser_window_create(BW_CREATE_HISTORY, @@ -2574,7 +2574,7 @@ ro_gui_window_menu_select(wimp_w w, /* help actions */ case HELP_OPEN_CONTENTS: - error = nsurl_create("http://www.netsurf-browser.org/documentation/", &url); + error = nsurl_create("https://www.netsurf-browser.org/documentation/", &url); if (error == NSERROR_OK) { error = browser_window_create(BW_CREATE_HISTORY, url, @@ -2586,7 +2586,7 @@ ro_gui_window_menu_select(wimp_w w, break; case HELP_OPEN_GUIDE: - error = nsurl_create("http://www.netsurf-browser.org/documentation/guide", &url); + error = nsurl_create("https://www.netsurf-browser.org/documentation/guide", &url); if (error == NSERROR_OK) { error = browser_window_create(BW_CREATE_HISTORY, url, @@ -2598,7 +2598,7 @@ ro_gui_window_menu_select(wimp_w w, break; case HELP_OPEN_INFORMATION: - error = nsurl_create("http://www.netsurf-browser.org/documentation/info", &url); + error = nsurl_create("https://www.netsurf-browser.org/documentation/info", &url); if (error == NSERROR_OK) { error = browser_window_create(BW_CREATE_HISTORY, url, @@ -3594,7 +3594,8 @@ static void gui_window_set_title(struct gui_window *g, const char *title) title, scale_disp); } } else { - strncpy(g->title, title, sizeof(g->title)); + strncpy(g->title, title, sizeof(g->title) - 1); + g->title[sizeof(g->title)-1] = 0; } ro_gui_set_window_title(g->window, g->title); @@ -4568,7 +4569,7 @@ ro_gui_window_iconise(struct gui_window *g, wimp_full_message_window_info *wi) /* create the thumbnail sprite */ bitmap = riscos_bitmap_create(width, height, - BITMAP_NEW | BITMAP_OPAQUE | BITMAP_CLEAR_MEMORY); + BITMAP_OPAQUE | BITMAP_CLEAR); if (!bitmap) { NSLOG(netsurf, INFO, "Thumbnail initialisation failed."); return; diff --git a/frontends/windows/bitmap.c b/frontends/windows/bitmap.c index eed3d3a15..a52f29ad9 100644 --- a/frontends/windows/bitmap.c +++ b/frontends/windows/bitmap.c @@ -41,19 +41,19 @@ * Create a bitmap. * * \param width width of image in pixels - * \param height width of image in pixels - * \param state a flag word indicating the initial state + * \param height height of image in pixels + * \param state flags flags for bitmap creation * \return an opaque struct bitmap, or NULL on memory exhaustion */ -void *win32_bitmap_create(int width, int height, unsigned int state) +static void *win32_bitmap_create(int width, int height, enum gui_bitmap_flags flags) { struct bitmap *bitmap; BITMAPV5HEADER *pbmi; HBITMAP windib; uint8_t *pixdata; - NSLOG(netsurf, INFO, "width %d, height %d, state %u", width, height, - state); + NSLOG(netsurf, INFO, "width %d, height %d, flags %u", width, height, + (unsigned)flags); pbmi = calloc(1, sizeof(BITMAPV5HEADER)); if (pbmi == NULL) { @@ -91,7 +91,7 @@ void *win32_bitmap_create(int width, int height, unsigned int state) bitmap->windib = windib; bitmap->pbmi = pbmi; bitmap->pixdata = pixdata; - if ((state & BITMAP_OPAQUE) != 0) { + if ((flags & BITMAP_OPAQUE) != 0) { bitmap->opaque = true; } else { bitmap->opaque = false; @@ -164,20 +164,6 @@ void win32_bitmap_destroy(void *bitmap) /** - * Save a bitmap in the platform's native format. - * - * \param bitmap a bitmap, as returned by bitmap_create() - * \param path pathname for file - * \param flags flags controlling how the bitmap is saved. - * \return true on success, false on error and error reported - */ -static bool bitmap_save(void *bitmap, const char *path, unsigned flags) -{ - return true; -} - - -/** * The bitmap image has changed, so flush any persistant cache. * * \param bitmap a bitmap, as returned by bitmap_create() @@ -207,35 +193,6 @@ static void bitmap_set_opaque(void *bitmap, bool opaque) /** - * Tests whether a bitmap has an opaque alpha channel - * - * \param bitmap a bitmap, as returned by bitmap_create() - * \return whether the bitmap is opaque - */ -static bool bitmap_test_opaque(void *bitmap) -{ - int tst; - struct bitmap *bm = bitmap; - - if (bitmap == NULL) { - NSLOG(netsurf, INFO, "NULL bitmap!"); - return false; - } - - tst = bm->width * bm->height; - - while (tst-- > 0) { - if (bm->pixdata[(tst << 2) + 3] != 0xff) { - NSLOG(netsurf, INFO, "bitmap %p has transparency", bm); - return false; - } - } - NSLOG(netsurf, INFO, "bitmap %p is opaque", bm); - return true; -} - - -/** * Gets whether a bitmap should be plotted opaque * * \param bitmap a bitmap, as returned by bitmap_create() @@ -276,11 +233,6 @@ static int bitmap_get_height(void *bitmap) return(bm->height); } -static size_t bitmap_get_bpp(void *bitmap) -{ - return 4; -} - struct bitmap *bitmap_scale(struct bitmap *prescale, int width, int height) { struct bitmap *ret = malloc(sizeof(struct bitmap)); @@ -346,7 +298,7 @@ bitmap_render(struct bitmap *bitmap, struct hlcache_handle *content) } /* create a full size bitmap and plot into it */ - fsbitmap = win32_bitmap_create(width, height, BITMAP_NEW | BITMAP_CLEAR_MEMORY | BITMAP_OPAQUE); + fsbitmap = win32_bitmap_create(width, height, BITMAP_CLEAR | BITMAP_OPAQUE); SelectObject(bufferdc, fsbitmap->windib); @@ -375,13 +327,10 @@ static struct gui_bitmap_table bitmap_table = { .destroy = win32_bitmap_destroy, .set_opaque = bitmap_set_opaque, .get_opaque = bitmap_get_opaque, - .test_opaque = bitmap_test_opaque, .get_buffer = bitmap_get_buffer, .get_rowstride = bitmap_get_rowstride, .get_width = bitmap_get_width, .get_height = bitmap_get_height, - .get_bpp = bitmap_get_bpp, - .save = bitmap_save, .modified = bitmap_modified, .render = bitmap_render, }; diff --git a/frontends/windows/bitmap.h b/frontends/windows/bitmap.h index c57061d77..a370dd619 100644 --- a/frontends/windows/bitmap.h +++ b/frontends/windows/bitmap.h @@ -33,8 +33,6 @@ struct bitmap { struct bitmap *bitmap_scale(struct bitmap *prescale, int width, int height); -void *win32_bitmap_create(int width, int height, unsigned int state); - void win32_bitmap_destroy(void *bitmap); #endif diff --git a/frontends/windows/res/installer.nsi b/frontends/windows/res/installer.nsi index 7a03192f5..e91f29090 100644 --- a/frontends/windows/res/installer.nsi +++ b/frontends/windows/res/installer.nsi @@ -20,9 +20,9 @@ !endif # These will be displayed by the "Click here for support information" link in "Add/Remove Programs" -!define HELPURL "http://www.netsurf-browser.org/" # "Support Information" link -!define UPDATEURL "http://www.netsurf-browser.org/" # "Product Updates" link -!define ABOUTURL "http://www.netsurf-browser.org/" # "Publisher" link +!define HELPURL "https://www.netsurf-browser.org/" # "Support Information" link +!define UPDATEURL "https://www.netsurf-browser.org/" # "Product Updates" link +!define ABOUTURL "https://www.netsurf-browser.org/" # "Publisher" link # This is the size (in kB) of all the files copied into "Program Files" !define INSTALLSIZE 9000 diff --git a/frontends/windows/window.c b/frontends/windows/window.c index 750c57703..2f48ae28b 100644 --- a/frontends/windows/window.c +++ b/frontends/windows/window.c @@ -1250,17 +1250,17 @@ nsws_window_command(HWND hwnd, case IDM_HELP_CONTENTS: nsws_window_go(hwnd, - "http://www.netsurf-browser.org/documentation/"); + "https://www.netsurf-browser.org/documentation/"); break; case IDM_HELP_GUIDE: nsws_window_go(hwnd, - "http://www.netsurf-browser.org/documentation/guide"); + "https://www.netsurf-browser.org/documentation/guide"); break; case IDM_HELP_INFO: nsws_window_go(hwnd, - "http://www.netsurf-browser.org/documentation/info"); + "https://www.netsurf-browser.org/documentation/info"); break; case IDM_HELP_ABOUT: |