diff options
author | Vincent Sanders <vince@kyllikki.org> | 2015-04-24 11:56:19 +0100 |
---|---|---|
committer | Vincent Sanders <vince@kyllikki.org> | 2015-04-24 11:56:19 +0100 |
commit | 124de5775a3a469d797a805ebe1f97312f7e1a0c (patch) | |
tree | da7f5f88d06d267d5fa01492dcdab424fbb8116f /amiga/bitmap.c | |
parent | 4e7dcde2b056c16a96dde6adcadb29a65ca72fde (diff) | |
download | netsurf-124de5775a3a469d797a805ebe1f97312f7e1a0c.tar.gz netsurf-124de5775a3a469d797a805ebe1f97312f7e1a0c.tar.bz2 |
Update amiga to use bitmap render API
Diffstat (limited to 'amiga/bitmap.c')
-rw-r--r-- | amiga/bitmap.c | 78 |
1 files changed, 77 insertions, 1 deletions
diff --git a/amiga/bitmap.c b/amiga/bitmap.c index 67e7b15ea..bb47ae321 100644 --- a/amiga/bitmap.c +++ b/amiga/bitmap.c @@ -24,14 +24,15 @@ #include <graphics/composite.h> #endif #include <graphics/gfxbase.h> -#include "utils/nsoption.h" #include <proto/datatypes.h> #include <datatypes/pictureclass.h> #include <proto/dos.h> #include <proto/intuition.h> #include <proto/utility.h> +#include <sys/param.h> #include "assert.h" +#include "utils/nsoption.h" #include "utils/messages.h" #include "desktop/mouse.h" #include "desktop/gui_window.h" @@ -505,6 +506,80 @@ struct BitMap *ami_bitmap_get_native(struct bitmap *bitmap, } } +static nserror bitmap_render(struct bitmap *bitmap, hlcache_handle *content) +{ + struct BitScaleArgs bsa; + int plot_width; + int plot_height; + int redraw_tile_size = nsoption_int(redraw_tile_size_x); + struct redraw_context ctx = { + .interactive = false, + .background_images = true, + .plot = &amiplot + }; + + if(nsoption_int(redraw_tile_size_y) < nsoption_int(redraw_tile_size_x)) + redraw_tile_size = nsoption_int(redraw_tile_size_y); + + plot_width = MIN(content_get_width(content), redraw_tile_size); + plot_height = ((plot_width * bitmap->height) + (bitmap->width / 2)) / + bitmap->width; + + bitmap->nativebm = ami_rtg_allocbitmap(bitmap->width, bitmap->height, 32, + BMF_CLEAR, browserglob.bm, RGBFB_A8R8G8B8); + + bitmap->nativebmwidth = bitmap->width; + bitmap->nativebmheight = bitmap->height; + ami_clearclipreg(&browserglob); + + content_scaled_redraw(content, plot_width, plot_height, &ctx); + +#ifdef __amigaos4__ + if(__builtin_expect(GfxBase->LibNode.lib_Version >= 53, 1)) { + /* AutoDoc says v52, but this function isn't in OS4.0, so checking for v53 (OS4.1) */ + float resample_scale = bitmap->width / (float)plot_width; + uint32 flags = COMPFLAG_IgnoreDestAlpha; + if(nsoption_bool(scale_quality)) flags |= COMPFLAG_SrcFilter; + + CompositeTags(COMPOSITE_Src,browserglob.bm,bitmap->nativebm, + COMPTAG_ScaleX, + COMP_FLOAT_TO_FIX(resample_scale), + COMPTAG_ScaleY, + COMP_FLOAT_TO_FIX(resample_scale), + COMPTAG_Flags,flags, + COMPTAG_DestX,0, + COMPTAG_DestY,0, + COMPTAG_DestWidth,bitmap->width, + COMPTAG_DestHeight,bitmap->height, + COMPTAG_OffsetX,0, + COMPTAG_OffsetY,0, + COMPTAG_FriendBitMap, scrn->RastPort.BitMap, + TAG_DONE); + } else +#endif + { + bsa.bsa_SrcX = 0; + bsa.bsa_SrcY = 0; + bsa.bsa_SrcWidth = plot_width; + bsa.bsa_SrcHeight = plot_height; + bsa.bsa_DestX = 0; + bsa.bsa_DestY = 0; + // bsa.bsa_DestWidth = width; + // bsa.bsa_DestHeight = height; + bsa.bsa_XSrcFactor = plot_width; + bsa.bsa_XDestFactor = bitmap->width; + bsa.bsa_YSrcFactor = plot_height; + bsa.bsa_YDestFactor = bitmap->height; + bsa.bsa_SrcBitMap = browserglob.bm; + bsa.bsa_DestBitMap = bitmap->nativebm; + bsa.bsa_Flags = 0; + + BitMapScale(&bsa); + } + + return true; +} + static struct gui_bitmap_table bitmap_table = { .create = amiga_bitmap_create, .destroy = amiga_bitmap_destroy, @@ -518,6 +593,7 @@ static struct gui_bitmap_table bitmap_table = { .get_bpp = bitmap_get_bpp, .save = amiga_bitmap_save, .modified = amiga_bitmap_modified, + .render = bitmap_render, }; struct gui_bitmap_table *amiga_bitmap_table = &bitmap_table; |