summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOle Loots <ole@monochrom.net>2011-04-10 21:47:59 +0000
committerOle Loots <ole@monochrom.net>2011-04-10 21:47:59 +0000
commit9520ad67fe1435a56078dee76d6f47245b204ad7 (patch)
tree72ee8c5b8e4210d08b7b54dec795276c589fdc91
parentac97eac0cf9f0c6551be8f25f130580eb703cf20 (diff)
downloadnetsurf-9520ad67fe1435a56078dee76d6f47245b204ad7.tar.gz
netsurf-9520ad67fe1435a56078dee76d6f47245b204ad7.tar.bz2
cleanupd & comments, fixed clipping of mfdb's
svn path=/trunk/netsurf/; revision=12180
-rwxr-xr-xatari/plot/plotter.c59
-rwxr-xr-xatari/plot/plotter.h118
-rwxr-xr-xatari/plot/plotter_vdi.c65
3 files changed, 87 insertions, 155 deletions
diff --git a/atari/plot/plotter.c b/atari/plot/plotter.c
index 1532bde4d..9436dbc36 100755
--- a/atari/plot/plotter.c
+++ b/atari/plot/plotter.c
@@ -40,47 +40,6 @@
#include "atari/misc.h"
#include "atari/osspec.h"
-
-unsigned char rgb_web_pal[216][3] = {
- {0x00,0x00,0x00}, {0x33,0x00,0x00}, {0x66,0x00,0x00}, {0x99,0x00,0x00}, {0xcc,0x00,0x00}, {0xff,0x00,0x00},
- {0x00,0x33,0x00}, {0x33,0x33,0x00}, {0x66,0x33,0x00}, {0x99,0x33,0x00}, {0xcc,0x33,0x00}, {0xff,0x33,0x00},
- {0x00,0x66,0x00}, {0x33,0x66,0x00}, {0x66,0x66,0x00}, {0x99,0x66,0x00}, {0xcc,0x66,0x00}, {0xff,0x66,0x00},
- {0x00,0x99,0x00}, {0x33,0x99,0x00}, {0x66,0x99,0x00}, {0x99,0x99,0x00}, {0xcc,0x99,0x00}, {0xff,0x99,0x00},
- {0x00,0xcc,0x00}, {0x33,0xcc,0x00}, {0x66,0xcc,0x00}, {0x99,0xcc,0x00}, {0xcc,0xcc,0x00}, {0xff,0xcc,0x00},
- {0x00,0xff,0x00}, {0x33,0xff,0x00}, {0x66,0xff,0x00}, {0x99,0xff,0x00}, {0xcc,0xff,0x00}, {0xff,0xff,0x00},
- {0x00,0x00,0x33}, {0x33,0x00,0x33}, {0x66,0x00,0x33}, {0x99,0x00,0x33}, {0xcc,0x00,0x33}, {0xff,0x00,0x33},
- {0x00,0x33,0x33}, {0x33,0x33,0x33}, {0x66,0x33,0x33}, {0x99,0x33,0x33}, {0xcc,0x33,0x33}, {0xff,0x33,0x33},
- {0x00,0x66,0x33}, {0x33,0x66,0x33}, {0x66,0x66,0x33}, {0x99,0x66,0x33}, {0xcc,0x66,0x33}, {0xff,0x66,0x33},
- {0x00,0x99,0x33}, {0x33,0x99,0x33}, {0x66,0x99,0x33}, {0x99,0x99,0x33}, {0xcc,0x99,0x33}, {0xff,0x99,0x33},
- {0x00,0xcc,0x33}, {0x33,0xcc,0x33}, {0x66,0xcc,0x33}, {0x99,0xcc,0x33}, {0xcc,0xcc,0x33}, {0xff,0xcc,0x33},
- {0x00,0xff,0x33}, {0x33,0xff,0x33}, {0x66,0xff,0x33}, {0x99,0xff,0x33}, {0xcc,0xff,0x33}, {0xff,0xff,0x33},
- {0x00,0x00,0x66}, {0x33,0x00,0x66}, {0x66,0x00,0x66}, {0x99,0x00,0x66}, {0xcc,0x00,0x66}, {0xff,0x00,0x66},
- {0x00,0x33,0x66}, {0x33,0x33,0x66}, {0x66,0x33,0x66}, {0x99,0x33,0x66}, {0xcc,0x33,0x66}, {0xff,0x33,0x66},
- {0x00,0x66,0x66}, {0x33,0x66,0x66}, {0x66,0x66,0x66}, {0x99,0x66,0x66}, {0xcc,0x66,0x66}, {0xff,0x66,0x66},
- {0x00,0x99,0x66}, {0x33,0x99,0x66}, {0x66,0x99,0x66}, {0x99,0x99,0x66}, {0xcc,0x99,0x66}, {0xff,0x99,0x66},
- {0x00,0xcc,0x66}, {0x33,0xcc,0x66}, {0x66,0xcc,0x66}, {0x99,0xcc,0x66}, {0xcc,0xcc,0x66}, {0xff,0xcc,0x66},
- {0x00,0xff,0x66}, {0x33,0xff,0x66}, {0x66,0xff,0x66}, {0x99,0xff,0x66}, {0xcc,0xff,0x66}, {0xff,0xff,0x66},
- {0x00,0x00,0x99}, {0x33,0x00,0x99}, {0x66,0x00,0x99}, {0x99,0x00,0x99}, {0xcc,0x00,0x99}, {0xff,0x00,0x99},
- {0x00,0x33,0x99}, {0x33,0x33,0x99}, {0x66,0x33,0x99}, {0x99,0x33,0x99}, {0xcc,0x33,0x99}, {0xff,0x33,0x99},
- {0x00,0x66,0x99}, {0x33,0x66,0x99}, {0x66,0x66,0x99}, {0x99,0x66,0x99}, {0xcc,0x66,0x99}, {0xff,0x66,0x99},
- {0x00,0x99,0x99}, {0x33,0x99,0x99}, {0x66,0x99,0x99}, {0x99,0x99,0x99}, {0xcc,0x99,0x99}, {0xff,0x99,0x99},
- {0x00,0xcc,0x99}, {0x33,0xcc,0x99}, {0x66,0xcc,0x99}, {0x99,0xcc,0x99}, {0xcc,0xcc,0x99}, {0xff,0xcc,0x99},
- {0x00,0xff,0x99}, {0x33,0xff,0x99}, {0x66,0xff,0x99}, {0x99,0xff,0x99}, {0xcc,0xff,0x99}, {0xff,0xff,0x99},
- {0x00,0x00,0xcc}, {0x33,0x00,0xcc}, {0x66,0x00,0xcc}, {0x99,0x00,0xcc}, {0xcc,0x00,0xcc}, {0xff,0x00,0xcc},
- {0x00,0x33,0xcc}, {0x33,0x33,0xcc}, {0x66,0x33,0xcc}, {0x99,0x33,0xcc}, {0xcc,0x33,0xcc}, {0xff,0x33,0xcc},
- {0x00,0x66,0xcc}, {0x33,0x66,0xcc}, {0x66,0x66,0xcc}, {0x99,0x66,0xcc}, {0xcc,0x66,0xcc}, {0xff,0x66,0xcc},
- {0x00,0x99,0xcc}, {0x33,0x99,0xcc}, {0x66,0x99,0xcc}, {0x99,0x99,0xcc}, {0xcc,0x99,0xcc}, {0xff,0x99,0xcc},
- {0x00,0xcc,0xcc}, {0x33,0xcc,0xcc}, {0x66,0xcc,0xcc}, {0x99,0xcc,0xcc}, {0xcc,0xcc,0xcc}, {0xff,0xcc,0xcc},
- {0x00,0xff,0xcc}, {0x33,0xff,0xcc}, {0x66,0xff,0xcc}, {0x99,0xff,0xcc}, {0xcc,0xff,0xcc}, {0xff,0xff,0xcc},
- {0x00,0x00,0xff}, {0x33,0x00,0xff}, {0x66,0x00,0xff}, {0x99,0x00,0xff}, {0xcc,0x00,0xff}, {0xff,0x00,0xff},
- {0x00,0x33,0xff}, {0x33,0x33,0xff}, {0x66,0x33,0xff}, {0x99,0x33,0xff}, {0xcc,0x33,0xff}, {0xff,0x33,0xff},
- {0x00,0x66,0xff}, {0x33,0x66,0xff}, {0x66,0x66,0xff}, {0x99,0x66,0xff}, {0xcc,0x66,0xff}, {0xff,0x66,0xff},
- {0x00,0x99,0xff}, {0x33,0x99,0xff}, {0x66,0x99,0xff}, {0x99,0x99,0xff}, {0xcc,0x99,0xff}, {0xff,0x99,0xff},
- {0x00,0xcc,0xff}, {0x33,0xcc,0xff}, {0x66,0xcc,0xff}, {0x99,0xcc,0xff}, {0xcc,0xcc,0xff}, {0xff,0xcc,0xff},
- {0x00,0xff,0xff}, {0x33,0xff,0xff}, {0x66,0xff,0xff}, {0x99,0xff,0xff}, {0xcc,0xff,0xff}, {0xff,0xff,0xff}
-};
-
-
unsigned short vdi_web_pal[216][3] = {
{0x000,0x000,0x000}, {0x0c8,0x000,0x000}, {0x190,0x000,0x000}, {0x258,0x000,0x000}, {0x320,0x000,0x000}, {0x3e8,0x000,0x000},
{0x000,0x0c8,0x000}, {0x0c8,0x0c8,0x000}, {0x190,0x0c8,0x000}, {0x258,0x0c8,0x000}, {0x320,0x0c8,0x000}, {0x3e8,0x0c8,0x000},
@@ -217,15 +176,6 @@ struct s_vdi_sysinfo * read_vdi_sysinfo( short vdih, struct s_vdi_sysinfo * info
case VDI_CLUT_HARDWARE:
{
- int i;
- unsigned short *tmp_p;
-/* it's possible to store the vdi painters:
- tmp_p = (unsigned short *)&work_out[16];
-
- for (i=0;i<256;i++) {
- vdi_index[*tmp_p++] = i;
- }
-*/
}
break;
@@ -730,6 +680,7 @@ void plotter_get_clip_grect( GEM_PLOTTER self, GRECT * out )
void plotter_get_visible_grect( GEM_PLOTTER self, GRECT * out )
{
+ /*todo: !!! */
out->g_x = self->clipping.x0;
out->g_y = self->clipping.y0;
out->g_w = self->clipping.x1 - self->clipping.x0;
@@ -748,7 +699,6 @@ int plotter_std_clip(GEM_PLOTTER self, const struct rect * clip)
void plotter_vdi_clip( GEM_PLOTTER self, bool set)
{
- return;
if( set == true ) {
struct rect * c = &self->clipping;
short vdiflags[58];
@@ -760,12 +710,11 @@ void plotter_vdi_clip( GEM_PLOTTER self, bool set)
prev_vdi_clip[3] = vdiflags[48];
newclip[0] = CURFB(self).x + MAX(c->x0, 0);
newclip[1] = CURFB(self).y + MAX(c->y0, 0);
- newclip[2] = CURFB(self).x + MIN(CURFB(self).vis_w, c->x1 - c->x0)-1;
- newclip[3] = CURFB(self).y + MIN(CURFB(self).vis_h, c->y1 - c->y0)-1;
+ newclip[2] = newclip[0] + MIN(CURFB(self).vis_w-c->x0, c->x1 - c->x0)-1;
+ newclip[3] = newclip[1] + MIN(CURFB(self).vis_h-c->y1, c->y1 - c->y0)-1;
vs_clip( self->vdi_handle, 1, (short*)&newclip );
} else {
- short set = 1;
- vs_clip( self->vdi_handle, set, (short *)&prev_vdi_clip );
+ vs_clip( self->vdi_handle, 1, (short *)&prev_vdi_clip );
}
}
diff --git a/atari/plot/plotter.h b/atari/plot/plotter.h
index 394fdfb4f..3da927b60 100755
--- a/atari/plot/plotter.h
+++ b/atari/plot/plotter.h
@@ -48,23 +48,26 @@
#endif
#define MAX_FRAMEBUFS 0x010
-#define C2P (1<<0) /* C2P convert buffer 1 to buffer 2 */
+#define C2P (1<<0) /* C2P convert buffer 1 to buffer 2 */
/* TODO: implement offscreen buffer switch */
+
/* Plotter Flags: */
-#define PLOT_FLAG_OFFSCREEN 0x01
-#define PLOT_FLAG_LOCKED 0x02
-#define PLOT_FLAG_DITHER 0x04
-#define PLOT_FLAG_TRANS 0x08
+#define PLOT_FLAG_OFFSCREEN 0x01 /* offsreen plotter should set/accept this flag */
+#define PLOT_FLAG_LOCKED 0x02 /* plotter should set this flag during screen updates */
+#define PLOT_FLAG_DITHER 0x04 /* true if the plotter shall dither images */
+#define PLOT_FLAG_TRANS 0x08 /* true if the plotter supports transparent operations */
-#define MFDB_FLAG_STAND 0x01
+/* Flags for init_mfdb function: */
+#define MFDB_FLAG_STAND 0x01
#define MFDB_FLAG_ZEROMEM 0x02
#define MFDB_FLAG_NOALLOC 0x04
/* Error codes: */
-#define ERR_BUFFERSIZE_EXCEEDS_SCREEN 1
-#define ERR_NO_MEM 2
-#define ERR_PLOTTER_NOT_AVAILABLE 3
+#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 */
+/* Error code translations: */
static const char * plot_error_codes[] =
{
"None",
@@ -73,14 +76,13 @@ static const char * plot_error_codes[] =
"ERR_PLOTTER_NOT_AVAILABLE"
};
-/* Grapics & Font Plotter Objects: */
+/* 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,
@@ -93,6 +95,7 @@ typedef int (*_fpmf_text)( FONT_PLOTTER self, int x, int y, const char *text,
size_t length, const plot_font_style_t *fstyle);
typedef int (*_fpmf_dtor)( FONT_PLOTTER self );
+/* prototype of the font plotter "object" */
struct s_font_plotter
{
char * name;
@@ -112,30 +115,29 @@ struct s_font_plotter
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 */
+ 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 */
+ 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 s_frame_buf
{
short x;
@@ -178,7 +180,7 @@ typedef int (*_pmf_text)(GEM_PLOTTER self, int x, int y, const char *text, size_
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 */
@@ -218,12 +220,14 @@ struct s_gem_plotter
};
+/* these 2 structs hold info about an specific driver. */
+/* a table in plotter.c defines all the available plotters */
struct s_driver_table_entry
{
- char * name;
- int (*ctor)( GEM_PLOTTER self );
- int flags;
- int max_bpp;
+ char * name; /* name (unique) */
+ int (*ctor)( GEM_PLOTTER self ); /* pointer to ctor of the plotter */
+ int flags; /* a bitmask containing info about supported operations */
+ int max_bpp; /* the maximum supported screen depth of the plotter */
};
struct s_font_driver_table_entry
@@ -336,35 +340,8 @@ int plotter_std_clip(GEM_PLOTTER self, const struct rect * clip);
*/
void plotter_vdi_clip( GEM_PLOTTER self, bool set);
+
#define PLOTTER_IS_LOCKED(plotter) ( plotter->private_flags & PLOTTER_FLAG_LOCKED )
-#define FILL_PLOTTER_VTAB( p ) \
- p->dtor = dtor;\
- p->resize= resize;\
- p->move = move;\
- p->lock = lock;\
- p->unlock = unlock;\
- p->update_region = update_region;\
- p->update_screen_region = update_screen_region;\
- p->update_screen = update_screen;\
- p->put_pixel = put_pixel;\
- p->copy_rect = copy_rect; \
- p->clip = clip;\
- p->arc = arc;\
- p->disc = disc;\
- p->line = line;\
- p->rectangle = rectangle;\
- p->polygon = polygon;\
- p->path = path;\
- p->bitmap = bitmap;\
- p->text = text;\
-
-
-#define FILL_FONT_PLOTTER_VTAB( p ) \
- p->dtor = dtor;\
- p->str_width = str_width;\
- p->str_split = str_split;\
- p->pixel_position = pixel_position;\
- p->text = text;\
#define CURFB( p ) \
p->fbuf[p->cfbi]
@@ -372,11 +349,24 @@ void plotter_vdi_clip( GEM_PLOTTER self, bool set);
#define FIRSTFB( p ) \
p->fbuf[0]
-#define OFFSET_WEB_PAL 16
+/* 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 OFFSET_CUSTOM_COLOR 255
+#define OFFSET_CUSTOM_COLOR 255 /* this one is used by the TC renderer */
#define RGB_TO_VDI(c) rgb_to_666_index( (c&0xFF),(c&0xFF00)>>8,(c&0xFF0000)>>16)+OFFSET_WEB_PAL
#define ABGR_TO_RGB(c) ( ((c&0xFF)<<16) | (c&0xFF00) | ((c&0xFF0000)>>16) ) << 8
+
+/* calculate MFDB compatible rowstride (in number of bits) */
+#define MFDB_STRIDE( w ) (((w & 15) != 0) ? (w | 15)+1 : w)
+
+/*
+Calculate size of an mfdb, params:
+ Bits per pixel,
+ Word aligned rowstride (width) as returned by MFDB_STRIDE,
+ height in pixels
+*/
#define MFDB_SIZE( bpp, stride, h ) ( ((stride >> 3) * h) * bpp )
#endif
diff --git a/atari/plot/plotter_vdi.c b/atari/plot/plotter_vdi.c
index 4098e0e4e..819e9c593 100755
--- a/atari/plot/plotter_vdi.c
+++ b/atari/plot/plotter_vdi.c
@@ -80,15 +80,6 @@ static HermesHandle hermes_cnv_h; /* hermes converter instance handle */
static HermesHandle hermes_res_h;
int32 * hermes_pal_p;
-/*
-static inline void vs_rgbcolor(short vdih, uint32_t cin )
-{
- unsigned short c[4];
- rgb_to_vdi1000( &cin, &c );
- vs_color( vdih, OFFSET_CUST_PAL, &c[0] );
-}
-*/
-
static inline void vsl_rgbcolor( short vdih, uint32_t cin )
{
if( vdi_sysinfo.scr_bpp > 8 ) {
@@ -194,7 +185,6 @@ int ctor_plotter_vdi(GEM_PLOTTER self )
}
if( i >= OFFSET_CUST_PAL ) {
/* here we could define 22 additional colors... */
- /* rgb_to_vdi1000( &rgb_font_pal[i-OFFSET_FONT_PAL], &pal[i] ); */
}
vs_color( self->vdi_handle, i, &pal[i][0] );
}
@@ -205,6 +195,7 @@ int ctor_plotter_vdi(GEM_PLOTTER self )
unsigned char * col;
assert( Hermes_Init() );
+/*
hermes_pal_h = Hermes_PaletteInstance();
hermes_pal_p = Hermes_PaletteGet(hermes_pal_h);
assert(hermes_pal_p);
@@ -221,10 +212,10 @@ int ctor_plotter_vdi(GEM_PLOTTER self )
col[1] = rgb_web_pal[i-OFFSET_WEB_PAL][1];
col[2] = rgb_web_pal[i-OFFSET_WEB_PAL][2];
}
- /* font colors missing */
col[3] = 0;
}
Hermes_PaletteInvalidateCache(hermes_pal_h);
+*/
unsigned long flags = ( self->flags & PLOT_FLAG_DITHER ) ? HERMES_CONVERT_DITHER : 0;
hermes_cnv_h = Hermes_ConverterInstance( flags );
@@ -271,7 +262,7 @@ static int dtor( GEM_PLOTTER self )
/* close Hermes stuff: */
Hermes_ConverterReturn( hermes_cnv_h );
- Hermes_PaletteReturn( hermes_pal_h );
+ /* Hermes_PaletteReturn( hermes_pal_h ); */
Hermes_Done();
if( self->priv_data != NULL ){
@@ -667,6 +658,7 @@ static int bitmap_resize( GEM_PLOTTER self, struct bitmap * img, int nw, int nh
bitmap_destroy( img->resized );
img->resized = NULL;
} else {
+ /* the bitmap is already resized */
return( 0 );
}
}
@@ -709,14 +701,6 @@ static int bitmap_resize( GEM_PLOTTER self, struct bitmap * img, int nw, int nh
return( 0 );
}
-/*
-* 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
-*/
static struct bitmap * snapshot_create(GEM_PLOTTER self, int x, int y, int w, int h)
{
MFDB scr;
@@ -836,7 +820,7 @@ static void snapshot_destroy( GEM_PLOTTER self )
}
}
-/* convert bitmap to framebuffer format */
+/* convert bitmap to the virutal (chunked) framebuffer format */
static int convert_bitmap( GEM_PLOTTER self,
struct bitmap * img,
int x,
@@ -1020,20 +1004,16 @@ static int plot_mfdb (GEM_PLOTTER self, GRECT * loc, MFDB * insrc, uint32_t flag
MFDB * src;
short pxy[8];
short pxyclip[4];
- short c[2] = {OFFSET_CUSTOM_COLOR, WHITE};
- plotter_vdi_clip(self, true);
+ short c[2] = {OFFSET_CUSTOM_COLOR, WHITE};
+ GRECT off;
+ plotter_get_clip_grect( self, &off );
+ if( rc_intersect(loc, &off) == 0 ){
+ return( 1 );
+ }
+
init_mfdb( 0, loc->g_w, loc->g_h, 0, &screen );
- pxy[0] = 0;
- pxy[1] = 0;
- pxy[2] = loc->g_w -1;
- pxy[3] = loc->g_h -1;
- pxy[4] = CURFB(self).x + loc->g_x;
- pxy[5] = CURFB(self).y + loc->g_y;
- pxy[6] = pxy[4] + loc->g_w -1;
- pxy[7] = pxy[5] + loc->g_h -1;
-
if( insrc->fd_stand ){
int size = init_mfdb( insrc->fd_nplanes, loc->g_w, loc->g_h,
MFDB_FLAG_NOALLOC,
@@ -1057,17 +1037,30 @@ static int plot_mfdb (GEM_PLOTTER self, GRECT * loc, MFDB * insrc, uint32_t flag
src = insrc;
}
+ pxy[0] = off.g_x - loc->g_x;
+ pxy[1] = off.g_y - loc->g_y;
+ pxy[2] = pxy[0] + off.g_w - 1;
+ pxy[3] = pxy[1] + off.g_h - 1;
+ pxy[4] = CURFB(self).x + off.g_x;
+ pxy[5] = CURFB(self).y + off.g_y;
+ pxy[6] = pxy[4] + off.g_w-1;
+ pxy[7] = pxy[5] + off.g_h-1;
+
+
if( flags & PLOT_FLAG_TRANS && src->fd_nplanes == 1){
vrt_cpyfm( self->vdi_handle, MD_TRANS, (short*)pxy, src, &screen, (short*)&c );
} else {
-
+ /* this method only plots transparent bitmaps, right now... */
}
+
+ /* TODO: shrink conversion buffer?
+ no, it requires time.
if( insrc->fd_stand ){
- // TODO: shrink conv buffer
+
}
-
- plotter_vdi_clip(self, false);
+ */
+
return( 1 );
}