From f2aa118025ac1623947ce6d04840554e518759bd Mon Sep 17 00:00:00 2001 From: Ole Loots Date: Fri, 13 Jul 2012 22:21:06 +0200 Subject: Refactor plot implementation (removed old files) --- atari/plot/plotter.h | 364 --------------------------------------------------- 1 file changed, 364 deletions(-) delete mode 100755 atari/plot/plotter.h (limited to 'atari/plot/plotter.h') diff --git a/atari/plot/plotter.h b/atari/plot/plotter.h deleted file mode 100755 index 40fe6c62d..000000000 --- a/atari/plot/plotter.h +++ /dev/null @@ -1,364 +0,0 @@ -/* - * 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 _GEM_PLOTTER_API_H_ -#define _GEM_PLOTTER_API_H_ -#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/osspec.h" -#include "atari/gui.h" -#include "atari/font.h" -#include "desktop/options.h" -#include "atari/findfile.h" -#include "utils/utf8.h" -#include "utils/log.h" - -#ifndef ceilf -#warning "ceilf emulation" -#define ceilf(x) (float)ceil((double)x) -#endif - -#ifdef TEST_PLOTTER -#define verbose_log 1 -#define LOG(x) do { if (verbose_log) (printf(__FILE__ " %s %i: ", __PRETTY_FUNCTION__, __LINE__), printf x, fputc('\n', stdout)); } while (0) -#endif - -#define MAX_FRAMEBUFS 0x010 -#define C2P (1<<0) /* C2P convert buffer 1 to buffer 2 */ -/* TODO: implement offscreen buffer switch */ - -/* 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 */ - -/* Grapics & Font Plotter "Objects": */ -typedef struct s_font_plotter * FONT_PLOTTER; -typedef struct s_gem_plotter * GEM_PLOTTER; -typedef struct s_font_plotter * GEM_FONT_PLOTTER; /* for public use ... */ - - -/* declaration of font plotter member functions: (_fpmf_ prefix) */ -typedef int (*_fpmf_str_width)( FONT_PLOTTER self, const plot_font_style_t *fstyle, - const char * str, size_t length, int * width); -typedef int (*_fpmf_str_split)( FONT_PLOTTER self, const plot_font_style_t *fstyle, - const char *string, size_t length, - int x, size_t *char_offset, int *actual_x); -typedef int (*_fpmf_pixel_pos)( FONT_PLOTTER self, const plot_font_style_t *fstyle, - const char *string, size_t length, - int x, size_t *char_offset, int *actual_x); -typedef int (*_fpmf_text)( FONT_PLOTTER self, int x, int y, const char *text, - size_t length, const plot_font_style_t *fstyle); - -typedef void (*_fpmf_draw_glyph)(FONT_PLOTTER self, GRECT * clip, GRECT * loc, - uint8_t * pixdata, int pitch, uint32_t colour); -typedef int (*_fpmf_dtor)( FONT_PLOTTER self ); - - -/* prototype of the font plotter "object" */ -struct s_font_plotter -{ - char * name; - int flags; - int vdi_handle; - void * priv_data; - GEM_PLOTTER plotter; - - _fpmf_str_width str_width; - _fpmf_str_split str_split; - _fpmf_pixel_pos pixel_pos; - _fpmf_text text; - _fpmf_draw_glyph draw_glyph; - _fpmf_dtor dtor; -}; - - -struct rect; - -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 */ -}; - - -/* declaration of plotter member functions ( _pmf_ prefix )*/ -typedef int (*_pmf_resize)(GEM_PLOTTER self, int w, int h); -typedef int (*_pmf_move)(GEM_PLOTTER self, short x, short y ); -typedef void * (*_pmf_create_framebuffer)(GEM_PLOTTER self); -typedef void * (*_pmf_switch_to_framebuffer)(GEM_PLOTTER self); -typedef int (*_pmf_lock)(GEM_PLOTTER self); -typedef int (*_pmf_unlock)(GEM_PLOTTER self); -typedef int (*_pmf_put_pixel)(GEM_PLOTTER self, int x, int y, int color ); -typedef int (*_pmf_copy_rect)(GEM_PLOTTER self, GRECT src, GRECT dst ); -typedef int (*_pmf_set_clip)(GEM_PLOTTER self, const struct rect * clip ); -typedef int (*_pmf_get_clip)(GEM_PLOTTER self, struct rect * clip_out ); -typedef int (*_pmf_arc)(GEM_PLOTTER self, int x, int y, int radius, int angle1, int angle2, const plot_style_t * pstyle); -typedef int (*_pmf_disc)(GEM_PLOTTER self, int x, int y, int radius, const plot_style_t * pstyle); -typedef int (*_pmf_line)(GEM_PLOTTER self, int x0, int y0, int x1, int y1, const plot_style_t * pstyle); -typedef int (*_pmf_rectangle)(GEM_PLOTTER self, int x0, int y0, int x1, int y1, const plot_style_t * pstyle); -typedef int (*_pmf_polygon)(GEM_PLOTTER self, const int *p, unsigned int n, const plot_style_t * pstyle); -typedef int (*_pmf_path)(GEM_PLOTTER self, const float *p, unsigned int n, int fill, float width, int c, const float transform[6]); -typedef int (*_pmf_bitmap_resize) ( GEM_PLOTTER self, struct bitmap * bm, int nw, int nh ); -typedef int (*_pmf_bitmap_convert)( GEM_PLOTTER self, struct bitmap * img, int x, int y, - GRECT * clip, uint32_t bg, uint32_t flags, MFDB *out ); -typedef int (*_pmf_bitmap)(GEM_PLOTTER self, struct bitmap * bmp, int x, int y, - unsigned long bg, unsigned long flags ); -typedef int (*_pmf_plot_mfdb)(GEM_PLOTTER self, GRECT * loc, MFDB * mfdb, unsigned char fgcolor, uint32_t flags); -typedef int (*_pmf_text)(GEM_PLOTTER self, int x, int y, const char *text, size_t length, const plot_font_style_t *fstyle); -typedef int (*_pmf_blit)(GEM_PLOTTER self, GRECT * region); -typedef int (*_pmf_dtor)(GEM_PLOTTER self); - - -/* this is the prototype of an plotter "object" */ -struct s_gem_plotter -{ - char * name; /* name that identifies the Plotter */ - unsigned long flags; - int vdi_handle; - struct s_vdi_sysinfo * scr; - void * priv_data; - /* bit depth of framebuffers: */ - int bpp_virt; - - FONT_PLOTTER font_plotter; - /* set new dimensions (realloc memory): */ - _pmf_resize resize; - /* set drawing origin: */ - _pmf_move move; - _pmf_lock lock; - _pmf_unlock unlock; - _pmf_create_framebuffer create_framebuffer; - _pmf_switch_to_framebuffer switch_to_framebuffer; - _pmf_put_pixel put_pixel; - _pmf_copy_rect copy_rect; - _pmf_set_clip set_clip; - _pmf_get_clip get_clip; - _pmf_arc arc; - _pmf_disc disc; - _pmf_line line; - _pmf_rectangle rectangle; - _pmf_polygon polygon; - _pmf_path path; - /* scale an netsurf bitmap: */ - _pmf_bitmap_resize bitmap_resize; - /* convert an ABGR (netsurf) bitmap to screen format, ready for vro_cpyfm */ - _pmf_bitmap_convert bitmap_convert; - /* plot an netsurf bitmap into the buffer / screen: */ - _pmf_bitmap bitmap; - /* plot an mfdb into the buffer / screen: */ - _pmf_plot_mfdb plot_mfdb; - /* draw to screen, only valid for offscreen plotters: */ - _pmf_blit blit; - _pmf_text text; - _pmf_dtor dtor; -}; - - -/* these 2 structs hold info about an specific driver. */ -/* a table in plotter.c defines all the available plotters */ -struct s_driver_table_entry -{ - - /* name (unique) */ - char * name; - - /* pointer to ctor of the plotter */ - int (*ctor)( GEM_PLOTTER self, GRECT * log_isze ); - - /* a bitmask containing info about supported operations */ - int flags; - - /* the maximum supported screen depth of the plotter */ - int max_bpp; -}; - -struct s_font_driver_table_entry -{ - const char * name; - int (*ctor)( FONT_PLOTTER self ); - int flags; -}; - -typedef struct s_driver_table_entry * PLOTTER_INFO; -typedef struct s_font_driver_table_entry * FONT_PLOTTER_INFO; - -/* get s_driver_table_entry from driver table */ -struct s_driver_table_entry * get_screen_driver_entry(char * name); - -/* get s_font_driver_table_entry from driver table */ -struct s_font_driver_table_entry * get_font_driver_entry(char * name); - -/* fill screen / sys info */ -struct s_vdi_sysinfo * read_vdi_sysinfo(short vdih, struct s_vdi_sysinfo * info ); - -/* - Create an new plotter object - Error Values: - -1 no mem - -2 error configuring plotter - -3 Plotter not available -*/ -GEM_PLOTTER new_plotter(int vdihandle, char * name, - GRECT *, int virt_bpp, unsigned long flags, FONT_PLOTTER font_renderer, - int * error); - -/* - Create an new font plotter object - Error Values: - -1 no mem - -2 error configuring font plotter - -3 Font Plotter not available -*/ -FONT_PLOTTER new_font_plotter(int vdihandle, char * name, unsigned long flags, int * error ); - -/* free the plotter resources */ -int delete_plotter( GEM_PLOTTER p ); -int delete_font_plotter( FONT_PLOTTER p ); - - -/* calculate size of intermediate buffer */ -int calc_chunked_buffer_size(int x, int y, int stride, int bpp); - -/* calculates the pixel offset from x,y pos */ -int get_pixel_offset( int x, int y, int stride, int bpp ); - -/* translate an error number */ -const char* plotter_err_str(int i) ; - -void dump_font_drivers(void); -void dump_plot_drivers(void); -void dump_vdi_info(short); - -/* 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); - -/* - setup an MFDB struct and allocate memory for it when it is needed. - If bpp == 0, this function assumes that the MFDB shall point to the screen - and will not allocate any memory (mfdb.fd_addr == 0). - The function will return 0 when the memory allocation fails - ( out of memory), otherwise it returns the size of the mfdb.fd_addr - as number of bytes. -*/ -int init_mfdb(int bpp, int w, int h, uint32_t flags, MFDB * out ); - -/* shared / static methods follows */ - -/* - Get clipping for current framebuffer -*/ -int plotter_get_clip( GEM_PLOTTER self, struct rect * out ); - -/* - Get clipping for current framebuffer as GRECT -*/ -void plotter_get_clip_grect( GEM_PLOTTER self, GRECT * out ); - - -#define PLOTTER_IS_LOCKED(plotter) ( plotter->private_flags & PLOTTER_FLAG_LOCKED ) - - -/* - calculates MFDB compatible rowstride (in number of bits) -*/ -#define MFDB_STRIDE( w ) (((w & 15) != 0) ? (w | 15)+1 : w) - -/* -Calculate size of an mfdb, - - params: - - bpp: Bits per pixel, - stride: Word aligned rowstride (width) as returned by MFDB_STRIDE, - h: Height in pixels -*/ -#define MFDB_SIZE( bpp, stride, h ) ( ((stride >> 3) * h) * bpp ) - -#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