File: mi_fllrct.c

package info (click to toggle)
plotutils 2.4.1-15
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k
  • size: 11,072 kB
  • ctags: 6,952
  • sloc: ansic: 76,305; cpp: 12,402; sh: 8,475; yacc: 2,604; makefile: 894; lex: 144
file content (69 lines) | stat: -rw-r--r-- 1,721 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include "sys-defines.h"
#include "extern.h"

#include "xmi.h"
#include "mi_spans.h"
#include "mi_gc.h"
#include "mi_api.h"

/* mi rectangles
   written by Todd Newman, with debts to all and sundry
   */

/* Very straightforward.  We let the low-level paint function invoked by
 * MI_PAINT_SPANS() worry about clipping to the destination.  The miGC
 * struct is unused.
 *
 * Note libxmi's convention: right edges and bottom edges of filled
 * polygons (including rectangles) are unpainted, so that adjacent polygons
 * will abut with no overlaps or gaps. */

void
#ifdef _HAVE_PROTOS
miFillRectangles_internal (miPaintedSet *paintedSet, const miGC *pGC, int nrects, const miRectangle *prectInit)
#else
miFillRectangles_internal (paintedSet, pGC, nrects, prectInit)
     miPaintedSet *paintedSet;
     const miGC *pGC;		/* unused */
     int nrects; 
     const miRectangle *prectInit;
#endif
{
  miPoint *ppt;
  miPoint *pptFirst;
  int xorg, yorg;
  unsigned int *pw, *pwFirst;
  unsigned int height, width;
  const miRectangle *prect; 

  /* ensure we have >=1 rects to fill */
  if (nrects <= 0)
    return;

  prect = prectInit;
  while (nrects--)
    {
      height = prect->height;
      width = prect->width;
      pptFirst = (miPoint *)mi_xmalloc (height * sizeof(miPoint));
      pwFirst = (unsigned int *)mi_xmalloc (height * sizeof(unsigned int));
      ppt = pptFirst;
      pw = pwFirst;

      xorg = prect->x;
      yorg = prect->y;
      while (height--)
	{
	  *pw++ = width;
	  ppt->x = xorg;
	  ppt->y = yorg;
	  ppt++;
	  yorg++;
	}

      /* paint to paintedSet, or if that's NULL, to canvas */
      MI_PAINT_SPANS(paintedSet, pGC->pixels[1], (int)height, pptFirst, pwFirst)

      prect++;
    }
}