|
|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T d
Length: 4628 (0x1214)
Types: TextFile
Names: »ddxdraw.c«
└─⟦a0efdde77⟧ Bits:30001252 EUUGD11 Tape, 1987 Spring Conference Helsinki
└─⟦526ad3590⟧ »EUUGD11/gnu-31mar87/X.V10.R4.tar.Z«
└─⟦2109abc41⟧
└─⟦this⟧ »./X.V10R4/libqvss/ddxdraw.c«
/************************************************************************/
/************************************************************************/
/* */
/* DDX DRAW CURVE INTERFACE */
/* */
/* written by : MATT CORKUM 09-12-85 */
/* modified 09-23-85: make it look like the ddx interface */
/* */
/* */
/* The ddx draw curve interface code */
/* */
/* MODIFICATION HISTORY */
/* */
/* Carver 8510.21 Fixed "bwidth, bwidth" to be "bwidth, bheight" */
/* */
/* Carver 8510.21 Put in single plane code. */
/* */
/* Carver 8510.09 Fixed "if (mode = 1)" to be "if (mode == 1)" */
/* */
/* Carver 8510.03 Bad idea... after a few infinite loops we don't */
/* ignore errors returned by the path list */
/* converter anymore. */
/* */
/* Carver 8509.25 Removed error handling code */
/* */
/* */
/************************************************************************/
/************************************************************************/
/* THERE IS A CONFLICT BETWEEN ddxqvss.h and qvss.h (wpitch) SO MAKE SURE
TO INCLUDE ddxqvss.h FIRST */
#include "ddxqvss.h"
#include "qvss.h"
#include "extern.h"
#include "vstagbl.h"
extern BITMAP pbm;
\f
DrawCurve( verts, vertcnt, xbase, ybase, srcpix, altpix, mode, bwidth, bheight,
pat, patlen, patmult, clips, clipcount, func, zmask )
Vertex *verts; /* vertexes and flags */
int vertcnt; /* vertex count */
int xbase; /* destination offset in x */
int ybase; /* destination offset in y */
int srcpix; /* source pixel */
int altpix; /* alternate source pixel */
int mode; /* 0:solid 1:dashed 2:patterned */
int bwidth; /* brush width */
int bheight; /* brush height */
int pat; /* pattern */
int patlen; /* pattern length */
int patmult; /* pattern repeat count */
CLIP *clips; /* clipping rectangles */
int clipcount; /* count of clipping rectangles */
int func; /* GX display function */
int zmask; /* plane mask */
{
long error; /* error value to be returned*/
char s_pixel_flag; /* single pixel flag */
short *newvert; /* new vertex list */
int newvertcnt; /* new vertex count */
/* LIMIT THE DRAW OPERATION TO ONE PLANE */
if ((zmask & 1) == 0)
return;
srcpix = srcpix & 1;
altpix = altpix & 1;
/* pre-process the specified path list ..... create another one
containing only absolute straight line drawing */
error = path_list_converter ( &verts, &vertcnt, xbase, ybase,
&newvert, &newvertcnt );
if ( error )
{
DeviceError ("DrawCurve failure\n");
};
/* are we in single pixel mode or not ? */
if ( (bwidth == 1) && (bheight == 1)) s_pixel_flag = 1;
else s_pixel_flag = 0;
if ((mode == 0) && (s_pixel_flag) ) /* solid single pixel */
/* call the solid single pixel draw command */
error = draw_cons_solid_spix_line(srcpix, (short *)pbm.data,
pbm.width, pbm.height, func, newvertcnt,
newvert, clipcount, clips);
else if (mode == 0 ) /* solid mode */
/* s_pixel_flag = 0 ( multiple pixel ) */
/* call the solid multi-pixel draw command */
error = draw_cons_solid_mpix_line(srcpix, bwidth, bheight,
(short *)pbm.data, pbm.width, pbm.height,
func, newvertcnt, newvert, clipcount, clips);
else if ((mode == 1) && ( s_pixel_flag ) ) /* dashed mode */
/* call dashed single pixel draw curve */
error = draw_cons_pat_spix_line(srcpix, (short *)pbm.data,
pbm.width, pbm.height, func,
newvertcnt, newvert, patlen, pat,
patmult, 0, 0, clipcount, clips);
else if (mode == 1) /* dashed mode */
/* s_pixel_flag = 0 ( multiple pixel ) */
/* call multiple pixel dashed draw command */
error = draw_cons_pat_mpix_line(srcpix, bwidth, bheight,
(short *)pbm.data, pbm.width, pbm.height,
func, newvertcnt, newvert, patlen, pat,
patmult, 0, 0, clipcount, clips);
else if ((mode == 2) && (s_pixel_flag) ) /* patterned mode */
{
error = draw_2_src_cons_spix_line(srcpix, altpix,
(short *)pbm.data, pbm.width, pbm.height,
func, newvertcnt, newvert, patlen, pat,
patmult, 0, 0, clipcount, clips);
} /* end of patterned single pixel */
else if (mode == 2) /* patterned lines */
{
error = draw_2_src_mpix_line(srcpix, altpix,
bwidth, bheight, (short *)pbm.data, pbm.width,
pbm.height, func, newvertcnt,
newvert, patlen, pat, patmult,
0, 0, clipcount, clips);
}
}