scaling: Various trivial changes
This commit is contained in:
parent
a88b95c289
commit
29397453e4
|
@ -24,16 +24,12 @@ struct _imlib_scale_info {
|
||||||
#define YAP (yapoints[dyy + y])
|
#define YAP (yapoints[dyy + y])
|
||||||
|
|
||||||
static int *
|
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 *p, i;
|
||||||
int val, inc, rv = 0;
|
int val, inc, dw, ss, dd;
|
||||||
|
|
||||||
if (dw < 0)
|
dw = (dw_ >= 0) ? dw_ : -dw_;
|
||||||
{
|
|
||||||
dw = -dw;
|
|
||||||
rv = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
p = malloc(dw * sizeof(int));
|
p = malloc(dw * sizeof(int));
|
||||||
if (!p)
|
if (!p)
|
||||||
|
@ -48,19 +44,16 @@ __imlib_CalcPoints(int sw, int dw, int b1, int b2)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Border 1 */
|
/* Border 1 */
|
||||||
val = 0;
|
|
||||||
inc = 1 << 16;
|
|
||||||
for (i = 0; i < b1; i++)
|
for (i = 0; i < b1; i++)
|
||||||
{
|
p[i] = i;
|
||||||
p[i] = val >> 16;
|
|
||||||
val += inc;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Center */
|
/* Center */
|
||||||
if (i < dw - b2)
|
ss = sw - (b1 + b2);
|
||||||
|
dd = dw - (b1 + b2);
|
||||||
|
if (dd > 0)
|
||||||
{
|
{
|
||||||
val = b1 << 16;
|
val = b1 << 16;
|
||||||
inc = ((sw - (b1 + b2)) << 16) / (dw - (b1 + b2));
|
inc = (ss << 16) / dd;
|
||||||
for (; i < dw - b2; i++)
|
for (; i < dw - b2; i++)
|
||||||
{
|
{
|
||||||
p[i] = val >> 16;
|
p[i] = val >> 16;
|
||||||
|
@ -69,15 +62,11 @@ __imlib_CalcPoints(int sw, int dw, int b1, int b2)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Border 2 */
|
/* Border 2 */
|
||||||
val = (sw - b2) << 16;
|
val = sw - b2;
|
||||||
inc = 1 << 16;
|
|
||||||
for (; i < dw; i++)
|
for (; i < dw; i++)
|
||||||
{
|
p[i] = val++;
|
||||||
p[i] = val >> 16;
|
|
||||||
val += inc;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (rv)
|
if (dw_ < 0)
|
||||||
for (i = dw / 2; --i >= 0;)
|
for (i = dw / 2; --i >= 0;)
|
||||||
{
|
{
|
||||||
int tmp = p[i];
|
int tmp = p[i];
|
||||||
|
@ -90,22 +79,18 @@ __imlib_CalcPoints(int sw, int dw, int b1, int b2)
|
||||||
}
|
}
|
||||||
|
|
||||||
static int *
|
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 *p, i;
|
||||||
int val, inc;
|
int val, inc, dw, ss, dd;
|
||||||
|
|
||||||
if (d < 0)
|
dw = (dw_ >= 0) ? dw_ : -dw_;
|
||||||
{
|
|
||||||
rv = 1;
|
|
||||||
d = -d;
|
|
||||||
}
|
|
||||||
|
|
||||||
p = malloc(d * sizeof(int));
|
p = malloc(dw * sizeof(int));
|
||||||
if (!p)
|
if (!p)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
val = MIN(s, d);
|
val = MIN(sw, dw);
|
||||||
inc = b1 + b2;
|
inc = b1 + b2;
|
||||||
if (val < inc)
|
if (val < inc)
|
||||||
{
|
{
|
||||||
|
@ -113,6 +98,8 @@ __imlib_CalcApoints(int s, int d, int b1, int b2, int up)
|
||||||
b2 = val - b1;
|
b2 = val - b1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ss = sw - (b1 + b2);
|
||||||
|
dd = dw - (b1 + b2);
|
||||||
if (up)
|
if (up)
|
||||||
{
|
{
|
||||||
/* Scaling up */
|
/* Scaling up */
|
||||||
|
@ -122,25 +109,21 @@ __imlib_CalcApoints(int s, int d, int b1, int b2, int up)
|
||||||
p[i] = 0;
|
p[i] = 0;
|
||||||
|
|
||||||
/* Center */
|
/* Center */
|
||||||
if (d > b1 + b2)
|
if (dd > 0)
|
||||||
{
|
{
|
||||||
int ss, dd;
|
|
||||||
|
|
||||||
ss = s - (b1 + b2);
|
|
||||||
dd = d - (b1 + b2);
|
|
||||||
val = 0;
|
val = 0;
|
||||||
inc = (ss << 16) / dd;
|
inc = (ss << 16) / dd;
|
||||||
for (; i < d - b2; i++)
|
for (; i < dw - b2; i++)
|
||||||
{
|
{
|
||||||
p[i] = (val >> 8) - ((val >> 8) & 0xffffff00);
|
p[i] = (val >> 8) - ((val >> 8) & 0xffffff00);
|
||||||
if (((val >> 16) + b1) >= (s - 1))
|
if (((val >> 16) + b1) >= (sw - 1))
|
||||||
p[i] = 0;
|
p[i] = 0;
|
||||||
val += inc;
|
val += inc;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Border 2 */
|
/* Border 2 */
|
||||||
for (; i < d; i++)
|
for (; i < dw; i++)
|
||||||
p[i] = 0;
|
p[i] = 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -152,16 +135,14 @@ __imlib_CalcApoints(int s, int d, int b1, int b2, int up)
|
||||||
p[i] = (1 << (16 + 14)) + (1 << 14);
|
p[i] = (1 << (16 + 14)) + (1 << 14);
|
||||||
|
|
||||||
/* Center */
|
/* 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;
|
val = 0;
|
||||||
inc = (ss << 16) / dd;
|
inc = (ss << 16) / dd;
|
||||||
Cp = ((dd << 14) / ss) + 1;
|
Cp = ((dd << 14) / ss) + 1;
|
||||||
for (; i < d - b2; i++)
|
for (; i < dw - b2; i++)
|
||||||
{
|
{
|
||||||
ap = ((0x100 - ((val >> 8) & 0xff)) * Cp) >> 8;
|
ap = ((0x100 - ((val >> 8) & 0xff)) * Cp) >> 8;
|
||||||
p[i] = ap | (Cp << 16);
|
p[i] = ap | (Cp << 16);
|
||||||
|
@ -170,18 +151,18 @@ __imlib_CalcApoints(int s, int d, int b1, int b2, int up)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Border 2 */
|
/* Border 2 */
|
||||||
for (; i < d; i++)
|
for (; i < dw; i++)
|
||||||
p[i] = (1 << (16 + 14)) + (1 << 14);
|
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];
|
int tmp = p[i];
|
||||||
|
|
||||||
p[i] = p[d - i - 1];
|
p[i] = p[dw - i - 1];
|
||||||
p[d - i - 1] = tmp;
|
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)
|
if (aa)
|
||||||
{
|
{
|
||||||
isi->xapoints = __imlib_CalcApoints(im->w, scw, im->border.left,
|
isi->xapoints = __imlib_CalcApoints(im->w, scw,
|
||||||
im->border.right, isi->xup_yup & 1);
|
im->border.left, im->border.right,
|
||||||
|
isi->xup_yup & 1);
|
||||||
if (!isi->xapoints)
|
if (!isi->xapoints)
|
||||||
goto bail;
|
goto bail;
|
||||||
|
|
||||||
isi->yapoints = __imlib_CalcApoints(im->h, sch, im->border.top,
|
isi->yapoints = __imlib_CalcApoints(im->h, sch,
|
||||||
im->border.bottom,
|
im->border.top, im->border.bottom,
|
||||||
isi->xup_yup & 2);
|
isi->xup_yup & 2);
|
||||||
if (!isi->yapoints)
|
if (!isi->yapoints)
|
||||||
goto bail;
|
goto bail;
|
||||||
|
|
Loading…
Reference in New Issue