www.pudn.com > ilib > IGC.c


/*
 * IImage.c
 *
 * Image library
 *
 * Description:
 *	Portable routines to manipulate raster images.
 *
 * History:
 *	23-Aug-99	Craig Knudsen	cknudsen@radix.net
 *			Added ISetTextStyle().
 *	20-May-96	Craig Knudsen	cknudsen@radix.net
 *			Created
 *
 ****************************************************************************/

#include 
#include 
#include 

#include "Ilib.h"
#include "IlibP.h"


IGC ICreateGC ()
{
  IGCP *gc;

  gc = (IGCP *) malloc ( sizeof ( IGCP ) );
  memset ( gc, '\0', sizeof ( IGCP ) );

  gc->magic = IMAGIC_GC;
  gc->foreground = _IGetColor ( IBLACK_PIXEL );
  gc->background = _IGetColor ( IWHITE_PIXEL );
  gc->line_width = 1;
  gc->line_style = ILINE_SOLID;
  gc->text_style = ITEXT_NORMAL;

  return ( (IGC) gc );
}


IError _IFreeGC ( gc )
IGC gc;
{
  IGCP *gcp = (IGCP *)gc;

  if ( gcp ) {
    if ( gcp->magic != IMAGIC_GC )
      return ( IInvalidGC );
    gcp->magic = 0;
    free ( gcp );
  }

  return ( INoError );
}


IError ISetFont ( gc, font )
IGC gc;
IFont font;
{
  IFontP *fontp = (IFontP *)font;
  IGCP *gcp = (IGCP *)gc;

  if ( gcp ) {
    if ( gcp->magic != IMAGIC_GC )
      return ( IInvalidGC );
  }
  else 
    return ( IInvalidGC );

  if ( fontp ) {
    if ( fontp->magic != IMAGIC_FONT )
      return ( IInvalidFont );
  }
  else 
    return ( IInvalidFont );

  gcp->font = fontp;
  gcp->antialiased = 0;

  return ( INoError );
}



/*
** NOTE: this is just experimental code.
** It produces some pretty ugly text.  Need to look at gimp and
** so how they do this.
*/
IError ISetAntiAliasedFont ( gc, font )
IGC gc;
IFont font;
{
  IFontP *fontp = (IFontP *)font;
  IGCP *gcp = (IGCP *)gc;

  if ( gcp ) {
    if ( gcp->magic != IMAGIC_GC )
      return ( IInvalidGC );
  }
  else 
    return ( IInvalidGC );

  if ( fontp ) {
    if ( fontp->magic != IMAGIC_FONT )
      return ( IInvalidFont );
  }
  else 
    return ( IInvalidFont );

  gcp->font = fontp;
  gcp->antialiased = 1;

  return ( INoError );
}


IError ISetForeground ( gc, color )
IGC gc;
IColor color;
{
  IGCP *gcp = (IGCP *)gc;
  IColorP *colorp;

  if ( gcp ) {
    if ( gcp->magic != IMAGIC_GC )
      return ( IInvalidGC );
  }
  else 
    return ( IInvalidGC );

  colorp = _IGetColor ( color );
  if ( ! colorp )
    return ( IInvalidColor );

  gcp->foreground = colorp;

  return ( INoError );
}



IError ISetBackground ( gc, color )
IGC gc;
IColor color;
{
  IGCP *gcp = (IGCP *)gc;
  IColorP *colorp;

  if ( gcp ) {
    if ( gcp->magic != IMAGIC_GC )
      return ( IInvalidGC );
  }
  else 
    return ( IInvalidGC );

  colorp = _IGetColor ( color );
  if ( ! colorp )
    return ( IInvalidColor );

  gcp->background = colorp;

  return ( INoError );
}


IError ISetLineWidth ( gc, line_width )
IGC gc;
unsigned int line_width;
{
  IGCP *gcp = (IGCP *)gc;

  if ( gcp ) {
    if ( gcp->magic != IMAGIC_GC )
      return ( IInvalidGC );
  }

  gcp->line_width = line_width;

  return ( INoError );
}



IError ISetLineStyle ( gc, line_style )
IGC gc;
ILineStyle line_style;
{
  IGCP *gcp = (IGCP *)gc;

  if ( gcp ) {
    if ( gcp->magic != IMAGIC_GC )
      return ( IInvalidGC );
  }

  gcp->line_style = line_style;

  return ( INoError );
}




IError ISetTextStyle ( gc, text_style )
IGC gc;
ITextStyle text_style;
{
  IGCP *gcp = (IGCP *)gc;

  if ( gcp ) {
    if ( gcp->magic != IMAGIC_GC )
      return ( IInvalidGC );
  }

  gcp->text_style = text_style;

  return ( INoError );
}