From 37b8c5d83da69a13ce155c040a90cc6a850dc456 Mon Sep 17 00:00:00 2001 From: Ole Loots Date: Fri, 13 Jul 2012 22:19:04 +0200 Subject: Plotter refactor: removed one plotter abraction layer. --- atari/plot/plot.h | 187 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 187 insertions(+) create mode 100755 atari/plot/plot.h (limited to 'atari/plot/plot.h') diff --git a/atari/plot/plot.h b/atari/plot/plot.h new file mode 100755 index 000000000..71546648e --- /dev/null +++ b/atari/plot/plot.h @@ -0,0 +1,187 @@ +/* + * Copyright 2010 Ole Loots + * + * This file is part of NetSurf, http://www.netsurf-browser.org/ + * + * NetSurf is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * NetSurf is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef NS_ATARI_PLOT_H +#define NS_ATARI_PLOT_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "desktop/plotters.h" +#include "desktop/plot_style.h" +#include "image/bitmap.h" + +#include "atari/bitmap.h" +#include "atari/plot/eddi.h" +#include "atari/plot/fontplot.h" + +/* how much memory should be kept allocated for temp. conversion bitmaps: */ +#define CONV_KEEP_LIMIT 512000 +/* how much memory to allocate if some is needed: */ +#define CONV_BLOCK_SIZE 32000 + +/* Plotter Option Flags: */ +#define PLOT_FLAG_DITHER 0x04 /* true if the plotter shall dither images */ +#define PLOT_FLAG_TRANS 0x08 /* true if the plotter supports transparent operations */ + +/* Plotter "feature" flags */ +#define PLOT_FLAG_HAS_DITHER 0x0400 +#define PLOT_FLAG_HAS_ALPHA 0x0800 +#define PLOT_FLAG_OFFSCREEN 0x1000 /* offsreen plotter should set this flag */ + +/* Plotter "internal" flags */ +#define PLOT_FLAG_LOCKED 0x08000 /* plotter should set this flag during screen updates */ + +/* Font Plotter flags: */ +#define FONTPLOT_FLAG_MONOGLYPH 0x01 + +/* Flags for init_mfdb function: */ +#define MFDB_FLAG_STAND 0x01 +#define MFDB_FLAG_ZEROMEM 0x02 +#define MFDB_FLAG_NOALLOC 0x04 + +/* Flags for blit functions: */ +#define BITMAPF_MONOGLYPH 4096 /* The bitmap is an character bitmap */ +#define BITMAPF_BUFFER_NATIVE 8192 /* Bitmap shall be kept converted */ + +/* Error codes: */ +#define ERR_BUFFERSIZE_EXCEEDS_SCREEN 1 /* The buffer allocated is larger than the screen */ +#define ERR_NO_MEM 2 /* Not enough memory for requested operation */ +#define ERR_PLOTTER_NOT_AVAILABLE 3 /* invalid plotter driver name passed */ + +struct s_vdi_sysinfo { + short vdi_handle; /* vdi handle */ + short scr_w; /* resolution horz. */ + short scr_h; /* resolution vert. */ + short scr_bpp; /* bits per pixel */ + int colors; /* 0=hiclor, 2=mono */ + unsigned long hicolors; /* if colors = 0 */ + short pixelsize; /* bytes per pixel */ + unsigned short pitch; /* row pitch */ + unsigned short vdiformat; /* pixel format */ + unsigned short clut; /* type of clut support */ + void * screen; /* pointer to screen, or NULL */ + unsigned long screensize; /* size of screen (in bytes) */ + unsigned long mask_r; /* color masks */ + unsigned long mask_g; + unsigned long mask_b; + unsigned long mask_a; + short maxintin; /* maximum pxy items */ + short maxpolycoords; /* max coords for p_line etc. */ + unsigned long EdDiVersion; /* EdDi Version or 0 */ + bool rasterscale; /* raster scaling support */ +}; + +struct rect; + +extern const struct plotter_table atari_plotters; + +int atari_plotter_init(char *); +int atari_plotter_finalise(void); +/* translate an error number */ +const char* plot_err_str(int i) ; + +bool plot_lock(void); +bool plot_unlock(void); +bool plot_set_dimensions( int x, int y, int w, int h ); +bool plot_get_clip(struct rect * out); +/* Get clipping for current framebuffer as GRECT */ +void plotter_get_clip_grect(GRECT * out); +bool plot_clip(const struct rect *clip); +bool plot_rectangle( int x0, int y0, int x1, int y1,const plot_style_t *style ); +bool plot_line( int x0, int y0, int x1, int y1, const plot_style_t *style ); +bool plot_resize_bitmap(struct bitmap * img, int nw, int nh); +bool plot_blit_bitmap(struct bitmap * bmp, int x, int y, + unsigned long bg, unsigned long flags); +bool plot_blit_mfdb(GRECT * loc, MFDB * insrc, unsigned char fgcolor, + uint32_t flags); +bool plot_copy_rect(GRECT src, GRECT dst); +/* +* Capture the screen at x,y location +* param self instance +* param x absolute screen coords +* param y absolute screen coords +* param w width +* param h height +* +* This creates an snapshot in RGBA format (NetSurf's native format) +* +*/ +static struct bitmap * snapshot_create(int x, int y, int w, int h); + +/* Garbage collection of the snapshot routine */ +/* this should be called after you are done with the data returned by snapshot_create */ +/* don't access the screenshot after you called this function */ +static void snapshot_suspend(void); + +/* destroy memory used by screenshot */ +static void snapshot_destroy(void); + +/* convert an vdi color to bgra */ +void vdi1000_to_rgb( unsigned short * in, unsigned char * out ); + +/* convert an bgra color to vdi1000 color */ +void rgb_to_vdi1000( unsigned char * in, unsigned short * out ); + +/* convert an rgb color to an index into the web palette */ +short rgb_to_666_index(unsigned char r, unsigned char g, unsigned char b); + +/* assign vdi line style to dst ( netsurf type ) */ +#define NSLT2VDI(dst, src) \ + dst = 0;\ + switch( src->stroke_type ) {\ + case PLOT_OP_TYPE_DOT: \ + dst = (0xAAAA00 | 7);\ + break;\ + case PLOT_OP_TYPE_DASH:\ + dst = 3; \ + break;\ + case PLOT_OP_TYPE_SOLID:\ + case PLOT_OP_TYPE_NONE:\ + default:\ + dst = 1;\ + break;\ + }\ + + +#define PLOTTER_IS_LOCKED() ( atari_plot_flags & PLOTTER_FLAG_LOCKED ) + + +#ifdef WITH_8BPP_SUPPORT +/* some Well known indexes into the VDI palette */ +/* common indexes into the VDI palette */ +/* (only used when running with 256 colors or less ) */ +#define OFFSET_WEB_PAL 16 +#define OFFSET_CUST_PAL 232 +#define RGB_TO_VDI(c) rgb_to_666_index( (c&0xFF),(c&0xFF00)>>8,(c&0xFF0000)>>16)+OFFSET_WEB_PAL +#endif + +/* the name of this macro is crap - it should be named bgr_to_rgba ... or so */ +#define ABGR_TO_RGB(c) ( ((c&0xFF)<<16) | (c&0xFF00) | ((c&0xFF0000)>>16) ) << 8 +/* this index into the palette is used by the TC renderer to set current draw color: */ +#define OFFSET_CUSTOM_COLOR 255 + +#endif -- cgit v1.2.3