Sophie

Sophie

distrib > Mandriva > 9.1 > i586 > by-pkgid > 3c88344d1f3d15057277d028d0022277 > files > 135

swig-1.3.11-4mdk.i586.rpm

/* ----------------------------------------------------------------------------- 
 * pixmap.c
 *
 *     Pixel maps (i.e., bitmaps)
 * 
 * Author(s) : David Beazley (beazley@cs.uchicago.edu)
 * Copyright (C) 1995-1996
 *
 * See the file LICENSE for information on usage and redistribution.	
 * ----------------------------------------------------------------------------- */

#define PIXMAP
#include "gifplot.h"

/* -----------------------------------------------------------------------
   PixMap *new_PixMap(int width, int height, int centerx, int centery)

   Create a new pixmap of given size
   ----------------------------------------------------------------------- */
PixMap *new_PixMap(int width, int height, int centerx, int centery) {
  PixMap *pm;
  if ((width > 0) && (height > 0)) {
    pm = (PixMap *) malloc(sizeof(PixMap));
    pm->width = width;
    pm->height = height;
    pm->centerx = centerx;
    pm->centery = centery;
    pm->map = (int *) malloc(height*width*sizeof(int));
    return pm;
  }
  return (PixMap *) 0;
}

/* --------------------------------------------------------------------------
   void delete_PixMap(PixMap *pm)

   Destroy a pixmap
   -------------------------------------------------------------------------- */

void delete_PixMap(PixMap *pm) {
  if (pm) {
    free((char *) pm->map);
    free((char *) pm);
  }
}

/* ---------------------------------------------------------------------------
   void PixMap_set(PixMap *pm, int x, int y, int pix)

   Set a pixel in the bitmap
   --------------------------------------------------------------------------- */
void
PixMap_set(PixMap *pm, int x, int y, int pix) {
  if ((x < 0) || (x>=pm->width)) return;
  if ((y < 0) || (y>=pm->height)) return;

  pm->map[pm->width*y + x] = pix;
}

/* -----------------------------------------------------------------------------
   void FrameBuffer_drawpixmap(FrameBuffer *f, PixMap *pm, int x, int y, int fgcolor, int bgcolor) 

   Draw a pixmap onto the framebuffer.   This is somewhat optimized for speed.
   ------------------------------------------------------------------------------ */

void
FrameBuffer_drawpixmap(FrameBuffer *f, PixMap *pm, int x, int y, int fgcolor, int bgcolor) {

  int startx, starty;         /* Starting location on framebuffer */
  int startpixx = 0, startpixy = 0;   /* Starting location in pixmap      */
  int endx, endy;             /* Ending location on framebuffer   */
  int i,j, px, py;
  int c;
  
  startx = x - pm->centerx;
  starty = y + pm->centery;
  endx = startx + pm->width;
  endy = starty - pm->height;

  /* Figure out if we need to clip */

  if (startx < f->xmin) {
    startpixx = f->xmin - startx;
    startx = f->xmin;
  }
  if (starty >= f->ymax) {
    startpixy = starty - f->ymax;
    starty = f->ymax-1;
  }
  if (endx >= f->xmax) {
    endx = f->xmax-1;
  }
  if (endy < f->ymin) {
    endy = f->ymin;
  }
  py = startpixy;
  for (j = starty; j >= endy; j--) {
    px = startpixx;
    for (i = startx; i < endx; i++) {
      c = pm->map[py*pm->width + px];
      switch (c) {
      case GIFPLOT_FOREGROUND:
	f->pixels[j][i] = fgcolor;
	break;
      case GIFPLOT_BACKGROUND:
	f->pixels[j][i] = bgcolor;
	break;
      default:
	break;
      }
      px++;
    }
    py++;
  }
}

/**************************************************************************
 * Some common PixMaps  (for plotting)
 *
 **************************************************************************/

int _SQUARE_MAP[] = {
  0,1,1,1,1,1,1,1,
  0,1,1,1,1,1,1,1,
  0,1,1,1,1,1,1,1,
  0,1,1,1,1,1,1,1,
  0,1,1,1,1,1,1,1,
  0,1,1,1,1,1,1,1,
  0,1,1,1,1,1,1,1,
  0,0,0,0,0,0,0,0 };

PixMap  PixMap_SQUARE = { 8,8,4,4, _SQUARE_MAP};

int _TRIANGLE_MAP[] = {
  0,0,0,1,0,0,0,0,
  0,0,0,1,0,0,0,0,
  0,0,1,1,1,0,0,0,
  0,0,1,1,1,0,0,0,
  0,1,1,1,1,1,0,0,
  0,1,1,1,1,1,0,0,
  1,1,1,1,1,1,1,0,
  0,0,0,0,0,0,0,0 };

PixMap  PixMap_TRIANGLE = { 8,8,4,4,_TRIANGLE_MAP};

int _CROSS_MAP[] = {
  0,0,0,1,0,0,0,0,
  0,0,0,1,0,0,0,0,
  0,0,0,1,0,0,0,0,
  1,1,1,1,1,1,1,0,
  0,0,0,1,0,0,0,0,
  0,0,0,1,0,0,0,0,
  0,0,0,1,0,0,0,0,
  0,0,0,0,0,0,0,0 };

PixMap  PixMap_CROSS = { 8,8,4,4,_CROSS_MAP};