diff options
author | Jamey Sharp <jamey@minilop.net> | 2010-05-08 13:38:00 -0700 |
---|---|---|
committer | Jamey Sharp <jamey@minilop.net> | 2010-05-13 16:24:54 -0700 |
commit | 83f7ec97279405958aed86c6a57704a460c3bfba (patch) | |
tree | 93e3bdfa9d6b5a5a8f90ca7efdae802f46f3ff7a /mi | |
parent | c9e7ca4404803fe44d4684e0bb2ca2ee10fd4bb3 (diff) |
miwideline: Factor out span buffer allocation.
Signed-off-by: Jamey Sharp <jamey@minilop.net>
Reviewed-by: Keith Packard <keithp@keithp.com>
Reviewed-by: Adam Jackson <ajax@redhat.com>
Diffstat (limited to 'mi')
-rw-r--r-- | mi/miwideline.c | 106 |
1 files changed, 32 insertions, 74 deletions
diff --git a/mi/miwideline.c b/mi/miwideline.c index c54e2deb1..22e15cf47 100644 --- a/mi/miwideline.c +++ b/mi/miwideline.c @@ -52,6 +52,21 @@ from The Open Group. #include "miwideline.h" #include "mi.h" +static Bool +InitSpans(Spans *spans, size_t nspans) +{ + spans->points = malloc(nspans * sizeof (*spans->points)); + if (!spans->points) + return FALSE; + spans->widths = malloc(nspans * sizeof (*spans->widths)); + if (!spans->widths) + { + free(spans->points); + return FALSE; + } + return TRUE; +} + /* * interface data to span-merging polygon filler */ @@ -110,9 +125,7 @@ miFillPolyHelper (DrawablePtr pDrawable, GCPtr pGC, unsigned long pixel, int left_height = 0, right_height = 0; DDXPointPtr ppt; - DDXPointPtr pptInit = NULL; int *pwidth; - int *pwidthInit = NULL; XID oldPixel; int xorg; Spans spanRec; @@ -120,19 +133,12 @@ miFillPolyHelper (DrawablePtr pDrawable, GCPtr pGC, unsigned long pixel, left_height = 0; right_height = 0; + if (!InitSpans(&spanRec, overall_height)) + return; + ppt = spanRec.points; + pwidth = spanRec.widths; if (!spanData) { - pptInit = malloc(overall_height * sizeof(*ppt)); - if (!pptInit) - return; - pwidthInit = malloc(overall_height * sizeof(*pwidth)); - if (!pwidthInit) - { - free(pptInit); - return; - } - ppt = pptInit; - pwidth = pwidthInit; oldPixel = pGC->fgPixel; if (pixel != oldPixel) { @@ -141,20 +147,6 @@ miFillPolyHelper (DrawablePtr pDrawable, GCPtr pGC, unsigned long pixel, ValidateGC (pDrawable, pGC); } } - else - { - spanRec.points = malloc(overall_height * sizeof (*ppt)); - if (!spanRec.points) - return; - spanRec.widths = malloc(overall_height * sizeof (int)); - if (!spanRec.widths) - { - free(spanRec.points); - return; - } - ppt = spanRec.points; - pwidth = spanRec.widths; - } xorg = 0; if (pGC->miTranslate) @@ -226,11 +218,12 @@ miFillPolyHelper (DrawablePtr pDrawable, GCPtr pGC, unsigned long pixel, } } } + spanRec.count = ppt - spanRec.points; if (!spanData) { - (*pGC->ops->FillSpans) (pDrawable, pGC, ppt - pptInit, pptInit, pwidthInit, TRUE); - free(pwidthInit); - free(pptInit); + (*pGC->ops->FillSpans) (pDrawable, pGC, spanRec.count, spanRec.points, spanRec.widths, TRUE); + free(spanRec.widths); + free(spanRec.points); if (pixel != oldPixel) { dixChangeGC (NullClient, pGC, GCForeground, &oldPixel, NULL); @@ -238,10 +231,7 @@ miFillPolyHelper (DrawablePtr pDrawable, GCPtr pGC, unsigned long pixel, } } else - { - spanRec.count = ppt - spanRec.points; AppendSpanGroup (pGC, pixel, &spanRec, spanData); - } } static void @@ -283,15 +273,8 @@ miFillRectPolyHelper ( } else { - spanRec.points = malloc(h * sizeof (*ppt)); - if (!spanRec.points) + if (!InitSpans(&spanRec, h)) return; - spanRec.widths = malloc(h * sizeof (int)); - if (!spanRec.widths) - { - free(spanRec.points); - return; - } ppt = spanRec.points; pwidth = spanRec.widths; @@ -1058,8 +1041,6 @@ miLineArc ( double yorg, Bool isInt) { - DDXPointPtr points; - int *widths; int xorgi = 0, yorgi = 0; XID oldPixel; Spans spanRec; @@ -1105,17 +1086,10 @@ miLineArc ( } isInt = FALSE; } + if (!InitSpans(&spanRec, pGC->lineWidth)) + return; if (!spanData) { - points = malloc(sizeof(DDXPointRec) * pGC->lineWidth); - if (!points) - return; - widths = malloc(sizeof(int) * pGC->lineWidth); - if (!widths) - { - free(points); - return; - } oldPixel = pGC->fgPixel; if (pixel != oldPixel) { @@ -1124,32 +1098,19 @@ miLineArc ( ValidateGC (pDraw, pGC); } } - else - { - points = malloc(pGC->lineWidth * sizeof (DDXPointRec)); - if (!points) - return; - widths = malloc(pGC->lineWidth * sizeof (int)); - if (!widths) - { - free(points); - return; - } - spanRec.points = points; - spanRec.widths = widths; - } if (isInt) - n = miLineArcI(pDraw, pGC, xorgi, yorgi, points, widths); + n = miLineArcI(pDraw, pGC, xorgi, yorgi, spanRec.points, spanRec.widths); else - n = miLineArcD(pDraw, pGC, xorg, yorg, points, widths, + n = miLineArcD(pDraw, pGC, xorg, yorg, spanRec.points, spanRec.widths, &edge1, edgey1, edgeleft1, &edge2, edgey2, edgeleft2); + spanRec.count = n; if (!spanData) { - (*pGC->ops->FillSpans)(pDraw, pGC, n, points, widths, TRUE); - free(widths); - free(points); + (*pGC->ops->FillSpans)(pDraw, pGC, spanRec.count, spanRec.points, spanRec.widths, TRUE); + free(spanRec.widths); + free(spanRec.points); if (pixel != oldPixel) { dixChangeGC(NullClient, pGC, GCForeground, &oldPixel, NULL); @@ -1157,10 +1118,7 @@ miLineArc ( } } else - { - spanRec.count = n; AppendSpanGroup (pGC, pixel, &spanRec, spanData); - } } static void |