/* ======================================================= *
* Copyright 1998-2005 Stephen C. Grubb *
* http://ploticus.sourceforge.net *
* Covered by GPL; see the file ./Copyright for details. *
* ======================================================= */
/* routines related to low level graphic initialization */
#include "plg.h"
extern int GL_sysdate(), GL_systime(), PLGP_setup(), PLGS_setup(), PLGX_setup(), PLGG_setup(), PLGF_setup();
#define DEFAULT_WIN_WIDTH 8
#define DEFAULT_WIN_HEIGHT 9
#define MM_PER_INCH 25.3807
static int uplefttx = 0, upleftty = 0;
static double pagewidth = DEFAULT_WIN_WIDTH, pageheight = DEFAULT_WIN_HEIGHT;
static int initialized = 0;
static char outfilename[ MAXPATH ] = "";
static char outlabel[80] = "ploticus-graphic";
static int maxdrivervect = 500;
/* ========================================== */
int
PLG_init_initstatic()
{
uplefttx = 0;
upleftty = 0;
pagewidth = DEFAULT_WIN_WIDTH;
pageheight = DEFAULT_WIN_HEIGHT;
initialized = 0;
strcpy( outfilename, "" );
strcpy( outlabel, "ploticus-graphic" );
maxdrivervect = 500;
return( 0 );
}
/* ========================================== */
/* INIT - initialize device */
int
PLG_init( dev )
char dev; /* device code */
{
int yr, mon, day, hr, min, sec;
char sdev[8];
int stat;
GL_sysdate( &mon, &day, &yr ); GL_systime( &hr, &min, &sec );
/* initialize graphics parameters.. */
Edev = dev;
if( dev == 'p' || dev == 'c' || dev == 'e' ) {
#ifdef NOPS
return( Eerr( 12016, "PostScript capability was not included in this build.", "" ) );
#else
stat = PLGP_setup( outlabel, dev, outfilename );
if( stat ) return( stat );
Edev = 'p'; /* driver now knows eps/color/bw, from now on call it 'p' */
#endif
}
/* added support for svg - BT 05/11/01 */
else if( dev == 's' ) {
#ifdef NOSVG
return( Eerr( 12016, "SVG capability was not included in this build.", "" ) );
#else
Epixelsinch = 72;
Esetwinscale( (int)(pagewidth*Epixelsinch), (int)(pageheight*Epixelsinch), pagewidth, pageheight );
stat = PLGS_setup( outlabel, dev, outfilename, Epixelsinch, pagewidth, pageheight, uplefttx, upleftty );
if( stat ) return( stat );
#endif
}
else if( dev == 'x' ) {
#ifdef NOX11
return( Eerr( 12016, "X11 capability was not included in this build.", "" ) );
#else
double sx, sy;
Epixelsinch = 75;
Esetwinscale( (int)(pagewidth*Epixelsinch), (int)(pageheight*Epixelsinch), pagewidth, pageheight );
Egetglobalscale( &sx, &sy );
stat = PLGX_setup( outlabel, Epixelsinch, pagewidth, pageheight, uplefttx, upleftty, maxdrivervect );
if( stat ) return( stat );
#endif
}
else if( dev == 'g' ) {
#ifdef NOGD
return( Eerr( 12016, "GD image capability was not included in this build.", "" ) );
#else
Epixelsinch = 100;
Esetwinscale( (int)(pagewidth*Epixelsinch), (int)(pageheight*Epixelsinch), pagewidth, pageheight );
stat = PLGG_setup( outlabel, Epixelsinch, pagewidth, pageheight, uplefttx, upleftty, maxdrivervect );
if( stat ) return( stat );
Edev = 'g';
#endif
}
else if( dev == 'f' ) {
#ifdef NOSWF
return( Eerr( 12016, "SWF capability was not included in this build.", "" ) );
#else
Epixelsinch = 72;
Esetwinscale( (int)(pagewidth*Epixelsinch), (int)(pageheight*Epixelsinch), pagewidth, pageheight );
stat = PLGF_setup( outlabel, dev, outfilename, Epixelsinch, pagewidth, pageheight, uplefttx, upleftty, maxdrivervect );
if( stat ) return( stat );
#endif
}
else if( dev == 'n' ) ; /* null device */
else {
sprintf( sdev, "%c", dev );
return( Eerr( 12016, "Unsupported display device code", sdev ) );
}
if( dev != 'n' ) initialized = 1;
EWinx = pagewidth; EWiny = pageheight;
PLG_setdefaults();
return( 0 );
}
/* ================================== */
/* SETSIZE - set the size and position of the display. Should be called before init()
*/
int
PLG_setsize( ux, uy, upleftx, uplefty )
double ux, uy; /* size of window in inches.. */
int upleftx, uplefty; /* point (in native window system coords ) of upper-left corner of window */
{
extern int PLGX_resizewin();
if( ! initialized ) { /* getting ready to initialize-- set size parameters */
pagewidth = ux; pageheight = uy; uplefttx = upleftx; upleftty = uplefty;
return( 0 );
}
if( initialized ) { /* window already exists, resize it.. */
/* update parameters: window size and original size */
/* do this regardless of device since any code may use EWin variables.. */
if( ux >= 0 ) { EWinx = ux; EWinx_0 = ux; }
if( uy >= 0 ) { EWiny = uy; EWiny_0 = uy; }
#ifndef NOX11
if( Edev == 'x' ) {
/* update scaling */
Esetwinscale( (int)(ux*Epixelsinch), (int)(uy*Epixelsinch), ux, uy );
/* resize window */
PLGX_resizewin( Epixelsinch, upleftx, uplefty, ux, uy );
}
#endif
#ifndef NOGD
else if( Edev == 'g' ) {
/* terminate existing image and start a new one with new size.. */
Esetwinscale( (int)(pagewidth*Epixelsinch), (int)(pageheight*Epixelsinch), pagewidth, pageheight );
PLGG_setup( "", Epixelsinch, pagewidth, pageheight, uplefttx, upleftty );
}
#endif
}
return( 0 );
}
/* ====================================== */
int
PLG_setdefaults()
{
Efont( Estandard_font );
Etextsize( 10 );
Etextdir( 0 );
Elinetype( 0, 0.6, 1.0 );
Ecolor( Estandard_color );
strcpy( Ecurcolor, Estandard_color ); /* added scg 7/28/04 ... related to pcode color change optimization */
Ebackcolor( Estandard_bkcolor );
Escaletype( "linear", 'x' );
Escaletype( "linear", 'y' );
Epaper( 0 );
Eblacklines = 1; /* set to 0 only when half-tone lines desired when displaying on b/w device */
EEvent = 0;
return( 0 );
}
/* =================== */
int
PLG_setoutfilename( name )
char *name;
{
strncpy( outfilename, name, MAXPATH-1 );
outfilename[ MAXPATH-1 ] = '\0';
return( 0 );
}
/* =================== */
int
PLG_getoutfilename( name )
char *name;
{
strcpy( name, outfilename );
return( 0 );
}
/* ==================== */
int
PLG_setoutlabel( name )
char *name;
{
strncpy( outlabel, name, 78 );
outlabel[78] = '\0';
return( 0 );
}
/* ===================== */
/* added scg 5/4/04 */
int
PLG_setmaxdrivervect( j )
int j;
{
maxdrivervect = j;
return( 0 );
}
/* ========================= */
int
PLG_handle_events( x, y, e )
double x, y;
int e;
{
/* fprintf( stderr, "[event %d]\n", e ); */
if( e == E_EXPOSE || e == E_RESIZE ) Erestorewin();
#ifdef GETGUI
getgui_late_refresh();
#endif
return( 0 );
}
/* ======================================================= *
* Copyright 1998-2005 Stephen C. Grubb *
* http://ploticus.sourceforge.net *
* Covered by GPL; see the file ./Copyright for details. *
* ======================================================= */
syntax highlighted by Code2HTML, v. 0.9.1