home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Power-Programmierung
/
CD1.mdf
/
magazine
/
msysjour
/
vol04
/
01b
/
macsl
/
mpmgpi.c
< prev
next >
Wrap
C/C++ Source or Header
|
1988-10-03
|
4KB
|
145 lines
/*-----------------------------------------------------------------*/
/* MpmGPI.c */
/* GPI functions */
/*-----------------------------------------------------------------*/
#include "MacPM.h"
/*-----------------------------------------------------------------*/
/* Draw a character string at the current position */
/*-----------------------------------------------------------------*/
LONG APIENTRY GpiCharString( hps, lLen, pch )
HPS hps;
LONG lLen;
PCH pch;
{
if( ! MpmValidatePS(hps) )
return GPI_ERROR;
thePort = PGRAFOFHPS(hps);
DrawText( pch, 0, (SHORT)lLen );
return GPI_OK;
}
/*-----------------------------------------------------------------*/
/* Draw a character string at the specified position */
/*-----------------------------------------------------------------*/
LONG APIENTRY GpiCharStringAt( hps, pptl, lLen, pch )
HPS hps;
PPOINTL pptl;
LONG lLen;
PCH pch;
{
if( ! GpiMove( hps, pptl ) )
return GPI_ERROR;
return GpiCharString( hps, lLen, pch );
}
/*-----------------------------------------------------------------*/
/* Erase a PS on the screen. */
/*-----------------------------------------------------------------*/
BOOL APIENTRY GpiErase( hps )
HPS hps;
{
if( ! MpmValidatePS(hps) )
return FALSE;
thePort = PGRAFOFHPS(hps);
EraseRgn( thePort->visRgn );
return TRUE;
}
/*-----------------------------------------------------------------*/
/* Set the drawing position to *pptl. */
/*-----------------------------------------------------------------*/
BOOL APIENTRY GpiMove( hps, pptl )
HPS hps;
PPOINTL pptl;
{
PMYWND pwnd;
if( ! MpmValidatePS(hps) )
return FALSE;
thePort = PGRAFOFHPS(hps);
pwnd = PMYWNDOF(HWNDOFHPS(hps));
MoveTo( (SHORT)pptl->x, (SHORT)( pwnd->cy - pptl->y ) );
return TRUE;
}
/*-----------------------------------------------------------------*/
/* Pick up the current font metrics and return it in *pfm. */
/* This is kind of hokey and only initializes some of the fields */
/* properly! */
/*-----------------------------------------------------------------*/
BOOL APIENTRY GpiQueryFontMetrics( hps, lLen, pfm )
HPS hps;
LONG lLen;
PFONTMETRICS pfm;
{
GrafPtr pgraf;
FMInput fmi;
FMOutPtr pfmo;
if( ! MpmValidatePS(hps) )
return FALSE;
pgraf = PGRAFOFHPS( hps );
fmi.family = pgraf->txFont;
fmi.size = pgraf->txSize;
fmi.face = pgraf->txFace;
fmi.needBits = FALSE;
fmi.device = 0;
fmi.numer.h = 1;
fmi.numer.v = 1;
fmi.denom.h = 1;
fmi.denom.v = 1;
pfmo = FMSwapFont( &fmi );
ASSERT( pfmo,
"GpiQueryFontMetrics: FMSwapFont failed?" );
memzero( pfm );
pfm->lAveCharWidth = /* wrong, but make it same as max */
pfm->lMaxCharInc = pfmo->widMax;
pfm->lMaxBaselineExt = pfmo->ascent + pfmo->descent
+ pfmo->leading;
pfm->lMaxDescender = pfmo->descent;
/* more later... */
return TRUE;
}
/*-----------------------------------------------------------------*/
/* Make sure hps is a valid PS handle. */
/*-----------------------------------------------------------------*/
LOCAL BOOL MpmValidatePS( hps )
HPS hps;
{
if( hps != _hps1 )
{
ERROR( "Invalid PS handle!" );
return FALSE;
}
return TRUE;
}
/*-----------------------------------------------------------------*/