|
@@ -331,6 +331,7 @@ static float nsvg__normalize(float *x, float* y)
|
|
}
|
|
}
|
|
|
|
|
|
static float nsvg__absf(float x) { return x < 0 ? -x : x; }
|
|
static float nsvg__absf(float x) { return x < 0 ? -x : x; }
|
|
|
|
+static float nsvg__roundf(float x) { return (x >= 0) ? floorf(x + 0.5) : ceilf(x - 0.5); }
|
|
|
|
|
|
static void nsvg__flattenCubicBez(NSVGrasterizer* r,
|
|
static void nsvg__flattenCubicBez(NSVGrasterizer* r,
|
|
float x1, float y1, float x2, float y2,
|
|
float x1, float y1, float x2, float y2,
|
|
@@ -872,10 +873,10 @@ static NSVGactiveEdge* nsvg__addActive(NSVGrasterizer* r, NSVGedge* e, float sta
|
|
// STBTT_assert(e->y0 <= start_point);
|
|
// STBTT_assert(e->y0 <= start_point);
|
|
// round dx down to avoid going too far
|
|
// round dx down to avoid going too far
|
|
if (dxdy < 0)
|
|
if (dxdy < 0)
|
|
- z->dx = (int)(-floorf(NSVG__FIX * -dxdy));
|
|
|
|
|
|
+ z->dx = (int)(-nsvg__roundf(NSVG__FIX * -dxdy));
|
|
else
|
|
else
|
|
- z->dx = (int)floorf(NSVG__FIX * dxdy);
|
|
|
|
- z->x = (int)floorf(NSVG__FIX * (e->x0 + dxdy * (startPoint - e->y0)));
|
|
|
|
|
|
+ z->dx = (int)nsvg__roundf(NSVG__FIX * dxdy);
|
|
|
|
+ z->x = (int)nsvg__roundf(NSVG__FIX * (e->x0 + dxdy * (startPoint - e->y0)));
|
|
// z->x -= off_x * FIX;
|
|
// z->x -= off_x * FIX;
|
|
z->ey = e->y1;
|
|
z->ey = e->y1;
|
|
z->next = 0;
|
|
z->next = 0;
|
|
@@ -1282,7 +1283,7 @@ static void nsvg__initPaint(NSVGcachedPaint* cache, NSVGpaint* paint, float opac
|
|
if (grad->nstops == 0) {
|
|
if (grad->nstops == 0) {
|
|
for (i = 0; i < 256; i++)
|
|
for (i = 0; i < 256; i++)
|
|
cache->colors[i] = 0;
|
|
cache->colors[i] = 0;
|
|
- } if (grad->nstops == 1) {
|
|
|
|
|
|
+ } else if (grad->nstops == 1) {
|
|
for (i = 0; i < 256; i++)
|
|
for (i = 0; i < 256; i++)
|
|
cache->colors[i] = nsvg__applyOpacity(grad->stops[i].color, opacity);
|
|
cache->colors[i] = nsvg__applyOpacity(grad->stops[i].color, opacity);
|
|
} else {
|
|
} else {
|