summaryrefslogtreecommitdiff
path: root/Examples/GIFPlot/Lib/pixmap.c
diff options
context:
space:
mode:
Diffstat (limited to 'Examples/GIFPlot/Lib/pixmap.c')
-rw-r--r--Examples/GIFPlot/Lib/pixmap.c159
1 files changed, 159 insertions, 0 deletions
diff --git a/Examples/GIFPlot/Lib/pixmap.c b/Examples/GIFPlot/Lib/pixmap.c
new file mode 100644
index 0000000..a55cf04
--- /dev/null
+++ b/Examples/GIFPlot/Lib/pixmap.c
@@ -0,0 +1,159 @@
+/* -----------------------------------------------------------------------------
+ * 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};
+
+
+