scaling: Various trivial changes

This commit is contained in:
Kim Woelders 2023-08-05 20:27:50 +02:00
parent a88b95c289
commit 29397453e4
1 changed files with 36 additions and 54 deletions

View File

@ -24,16 +24,12 @@ struct _imlib_scale_info {
#define YAP (yapoints[dyy + y])
static int *
__imlib_CalcPoints(int sw, int dw, int b1, int b2)
__imlib_CalcPoints(int sw, int dw_, int b1, int b2)
{
int *p, i;
int val, inc, rv = 0;
int val, inc, dw, ss, dd;
if (dw < 0)
{
dw = -dw;
rv = 1;
}
dw = (dw_ >= 0) ? dw_ : -dw_;
p = malloc(dw * sizeof(int));
if (!p)
@ -48,19 +44,16 @@ __imlib_CalcPoints(int sw, int dw, int b1, int b2)
}
/* Border 1 */
val = 0;
inc = 1 << 16;
for (i = 0; i < b1; i++)
{
p[i] = val >> 16;
val += inc;
}
p[i] = i;
/* Center */
if (i < dw - b2)
ss = sw - (b1 + b2);
dd = dw - (b1 + b2);
if (dd > 0)
{
val = b1 << 16;
inc = ((sw - (b1 + b2)) << 16) / (dw - (b1 + b2));
inc = (ss << 16) / dd;
for (; i < dw - b2; i++)
{
p[i] = val >> 16;
@ -69,15 +62,11 @@ __imlib_CalcPoints(int sw, int dw, int b1, int b2)
}
/* Border 2 */
val = (sw - b2) << 16;
inc = 1 << 16;
val = sw - b2;
for (; i < dw; i++)
{
p[i] = val >> 16;
val += inc;
}
p[i] = val++;
if (rv)
if (dw_ < 0)
for (i = dw / 2; --i >= 0;)
{
int tmp = p[i];
@ -90,22 +79,18 @@ __imlib_CalcPoints(int sw, int dw, int b1, int b2)
}
static int *
__imlib_CalcApoints(int s, int d, int b1, int b2, int up)
__imlib_CalcApoints(int sw, int dw_, int b1, int b2, int up)
{
int *p, i, rv = 0;
int val, inc;
int *p, i;
int val, inc, dw, ss, dd;
if (d < 0)
{
rv = 1;
d = -d;
}
dw = (dw_ >= 0) ? dw_ : -dw_;
p = malloc(d * sizeof(int));
p = malloc(dw * sizeof(int));
if (!p)
return NULL;
val = MIN(s, d);
val = MIN(sw, dw);
inc = b1 + b2;
if (val < inc)
{
@ -113,6 +98,8 @@ __imlib_CalcApoints(int s, int d, int b1, int b2, int up)
b2 = val - b1;
}
ss = sw - (b1 + b2);
dd = dw - (b1 + b2);
if (up)
{
/* Scaling up */
@ -122,25 +109,21 @@ __imlib_CalcApoints(int s, int d, int b1, int b2, int up)
p[i] = 0;
/* Center */
if (d > b1 + b2)
if (dd > 0)
{
int ss, dd;
ss = s - (b1 + b2);
dd = d - (b1 + b2);
val = 0;
inc = (ss << 16) / dd;
for (; i < d - b2; i++)
for (; i < dw - b2; i++)
{
p[i] = (val >> 8) - ((val >> 8) & 0xffffff00);
if (((val >> 16) + b1) >= (s - 1))
if (((val >> 16) + b1) >= (sw - 1))
p[i] = 0;
val += inc;
}
}
/* Border 2 */
for (; i < d; i++)
for (; i < dw; i++)
p[i] = 0;
}
else
@ -152,16 +135,14 @@ __imlib_CalcApoints(int s, int d, int b1, int b2, int up)
p[i] = (1 << (16 + 14)) + (1 << 14);
/* Center */
if (d > b1 + b2)
if (dd > 0)
{
int ss, dd, ap, Cp;
int ap, Cp;
ss = s - (b1 + b2);
dd = d - (b1 + b2);
val = 0;
inc = (ss << 16) / dd;
Cp = ((dd << 14) / ss) + 1;
for (; i < d - b2; i++)
for (; i < dw - b2; i++)
{
ap = ((0x100 - ((val >> 8) & 0xff)) * Cp) >> 8;
p[i] = ap | (Cp << 16);
@ -170,18 +151,18 @@ __imlib_CalcApoints(int s, int d, int b1, int b2, int up)
}
/* Border 2 */
for (; i < d; i++)
for (; i < dw; i++)
p[i] = (1 << (16 + 14)) + (1 << 14);
}
if (rv)
if (dw_ < 0)
{
for (i = d / 2; --i >= 0;)
for (i = dw / 2; --i >= 0;)
{
int tmp = p[i];
p[i] = p[d - i - 1];
p[d - i - 1] = tmp;
p[i] = p[dw - i - 1];
p[dw - i - 1] = tmp;
}
}
@ -232,13 +213,14 @@ __imlib_CalcScaleInfo(ImlibImage * im, int sw, int sh, int dw, int dh, bool aa)
if (aa)
{
isi->xapoints = __imlib_CalcApoints(im->w, scw, im->border.left,
im->border.right, isi->xup_yup & 1);
isi->xapoints = __imlib_CalcApoints(im->w, scw,
im->border.left, im->border.right,
isi->xup_yup & 1);
if (!isi->xapoints)
goto bail;
isi->yapoints = __imlib_CalcApoints(im->h, sch, im->border.top,
im->border.bottom,
isi->yapoints = __imlib_CalcApoints(im->h, sch,
im->border.top, im->border.bottom,
isi->xup_yup & 2);
if (!isi->yapoints)
goto bail;