This is an automated email from the git hooks/post-receive script.
git pushed a commit to branch master
in repository legacy-imlib2.
View the commit online.
commit ee61df687706d4907fb9dcc8f402ee8bdc321db2
Author: Kim Woelders <k...@woelders.dk>
AuthorDate: Tue May 9 15:36:25 2023 +0200
scaling: Change ypoints[] from pointers to indices
Now the calculation of ypoints[] and xpoints[] can be done by the same
function and we can avoid some essentially duplicated code.
May be slightly less optimal although I doubt it makes any significant
difference.
---
src/lib/blend.c | 3 +-
src/lib/scale.c | 239 ++++++++++++++++++++---------------------------------
src/lib/scale.h | 2 +-
src/lib/x11_rend.c | 2 +-
4 files changed, 95 insertions(+), 151 deletions(-)
diff --git a/src/lib/blend.c b/src/lib/blend.c
index 08e0153..7b0c07d 100644
--- a/src/lib/blend.c
+++ b/src/lib/blend.c
@@ -1944,7 +1944,8 @@ __imlib_BlendImageToImage(ImlibImage * im_src, ImlibImage * im_dst,
hh = h;
/* scale the imagedata for this LINESIZE lines chunk of image */
- __imlib_Scale(scaleinfo, aa, im_src->has_alpha, buf, dxx, dyy + y,
+ __imlib_Scale(scaleinfo, aa, im_src->has_alpha,
+ im_src->data, buf, dxx, dyy + y,
0, 0, dw, hh, dw, im_src->w);
__imlib_BlendRGBAToData(buf, dw, hh,
diff --git a/src/lib/scale.c b/src/lib/scale.c
index 9307553..a79c3fc 100644
--- a/src/lib/scale.c
+++ b/src/lib/scale.c
@@ -11,8 +11,9 @@
/*\ NB: If you change this, don't forget asm_scale.S \*/
struct _imlib_scale_info {
int *xpoints;
- uint32_t **ypoints;
- int *xapoints, *yapoints;
+ int *ypoints;
+ int *xapoints;
+ int *yapoints;
int xup_yup;
uint32_t *pix_assert;
};
@@ -22,75 +23,8 @@ struct _imlib_scale_info {
#define INV_YAP (256 - yapoints[dyy + y])
#define YAP (yapoints[dyy + y])
-static uint32_t **
-__imlib_CalcYPoints(uint32_t * src, int sw, int sh, int dh, int b1, int b2)
-{
- uint32_t **p;
- int i;
- int val, inc, rv = 0;
-
- if (dh < 0)
- {
- dh = -dh;
- rv = 1;
- }
-
- p = malloc(dh * sizeof(uint32_t *));
- if (!p)
- return NULL;
-
- val = MIN(sh, dh);
- inc = b1 + b2;
- if (val < inc)
- {
- b1 = (val * b1 + inc / 2) / inc;
- b2 = val - b1;
- }
-
- /* Border 1 */
- val = 0;
- inc = 1 << 16;
- for (i = 0; i < b1; i++)
- {
- p[i] = src + (val >> 16) * sw;
- val += inc;
- }
-
- /* Center */
- if (dh > (b1 + b2))
- {
- val = (b1 << 16);
- inc = ((sh - b1 - b2) << 16) / (dh - (b1 + b2));
- for (; i < dh - b2; i++)
- {
- p[i] = src + (val >> 16) * sw;
- val += inc;
- }
- }
-
- /* Border 2 */
- val = (sh - b2) << 16;
- inc = 1 << 16;
- for (; i < b2; i++)
- {
- p[i] = src + (val >> 16) * sw;
- val += inc;
- }
-
- if (rv)
- for (i = dh / 2; --i >= 0;)
- {
- uint32_t *tmp = p[i];
-
- p[i] = p[dh - i - 1];
- p[dh - i - 1] = tmp;
- }
-
- return p;
-}
-
static int *
-__imlib_CalcXPoints(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;
@@ -286,12 +220,12 @@ __imlib_CalcScaleInfo(ImlibImage * im, int sw, int sh, int dw, int dh, bool aa)
isi->xup_yup = (abs(dw) >= sw) + ((abs(dh) >= sh) << 1);
- isi->xpoints = __imlib_CalcXPoints(im->w, scw,
- im->border.left, im->border.right);
+ isi->xpoints = __imlib_CalcPoints(im->w, scw,
+ im->border.left, im->border.right);
if (!isi->xpoints)
return __imlib_FreeScaleInfo(isi);
- isi->ypoints = __imlib_CalcYPoints(im->data, im->w, im->h, sch,
- im->border.top, im->border.bottom);
+ isi->ypoints = __imlib_CalcPoints(im->h, sch,
+ im->border.top, im->border.bottom);
if (!isi->ypoints)
return __imlib_FreeScaleInfo(isi);
if (aa)
@@ -306,17 +240,19 @@ __imlib_CalcScaleInfo(ImlibImage * im, int sw, int sh, int dw, int dh, bool aa)
if (!isi->yapoints)
return __imlib_FreeScaleInfo(isi);
}
+
return isi;
}
/* scale by pixel sampling only */
static void
-__imlib_ScaleSampleRGBA(ImlibScaleInfo * isi, uint32_t * dest, int dxx, int dyy,
- int dx, int dy, int dw, int dh, int dow)
+__imlib_ScaleSampleRGBA(ImlibScaleInfo * isi, uint32_t * srce, uint32_t * dest,
+ int dxx, int dyy, int dx, int dy, int dw, int dh,
+ int dow, int sow)
{
uint32_t *sptr, *dptr;
int x, y, end;
- uint32_t **ypoints = isi->ypoints;
+ int *ypoints = isi->ypoints;
int *xpoints = isi->xpoints;
/* whats the last pixel on the line so we stop there */
@@ -325,9 +261,9 @@ __imlib_ScaleSampleRGBA(ImlibScaleInfo * isi, uint32_t * dest, int dxx, int dyy,
for (y = 0; y < dh; y++)
{
/* get the pointer to the start of the destination scanline */
- dptr = dest + dx + ((y + dy) * dow);
+ dptr = dest + dx + (y + dy) * dow;
/* calculate the source line we'll scan from */
- sptr = ypoints[dyy + y];
+ sptr = srce + ypoints[dyy + y] * sow;
/* go thru the scanline and copy across */
for (x = dxx; x < end; x++)
*dptr++ = sptr[xpoints[x]];
@@ -338,12 +274,13 @@ __imlib_ScaleSampleRGBA(ImlibScaleInfo * isi, uint32_t * dest, int dxx, int dyy,
/* scale by area sampling */
static void
-__imlib_ScaleAARGBA(ImlibScaleInfo * isi, uint32_t * dest, int dxx, int dyy,
- int dx, int dy, int dw, int dh, int dow, int sow)
+__imlib_ScaleAARGBA(ImlibScaleInfo * isi, uint32_t * srce, uint32_t * dest,
+ int dxx, int dyy, int dx, int dy, int dw, int dh, int dow,
+ int sow)
{
uint32_t *sptr, *dptr;
int x, y, end;
- uint32_t **ypoints;
+ int *ypoints;
int *xpoints;
int *xapoints;
int *yapoints;
@@ -369,8 +306,8 @@ __imlib_ScaleAARGBA(ImlibScaleInfo * isi, uint32_t * dest, int dxx, int dyy,
for (y = 0; y < dh; y++)
{
/* calculate the source line we'll scan from */
- dptr = dest + dx + ((y + dy) * dow);
- sptr = ypoints[dyy + y];
+ sptr = srce + ypoints[dyy + y] * sow;
+ dptr = dest + dx + (y + dy) * dow;
if (YAP > 0)
{
for (x = dxx; x < end; x++)
@@ -379,9 +316,9 @@ __imlib_ScaleAARGBA(ImlibScaleInfo * isi, uint32_t * dest, int dxx, int dyy,
int rr, gg, bb, aa;
uint32_t *pix;
+ pix = sptr + xpoints[x];
if (XAP > 0)
{
- pix = ypoints[dyy + y] + xpoints[x];
r = R_VAL(pix) * INV_XAP;
g = G_VAL(pix) * INV_XAP;
b = B_VAL(pix) * INV_XAP;
@@ -409,7 +346,6 @@ __imlib_ScaleAARGBA(ImlibScaleInfo * isi, uint32_t * dest, int dxx, int dyy,
}
else
{
- pix = ypoints[dyy + y] + xpoints[x];
r = R_VAL(pix) * INV_YAP;
g = G_VAL(pix) * INV_YAP;
b = B_VAL(pix) * INV_YAP;
@@ -434,9 +370,9 @@ __imlib_ScaleAARGBA(ImlibScaleInfo * isi, uint32_t * dest, int dxx, int dyy,
int r, g, b, a;
uint32_t *pix;
+ pix = sptr + xpoints[x];
if (XAP > 0)
{
- pix = ypoints[dyy + y] + xpoints[x];
r = R_VAL(pix) * INV_XAP;
g = G_VAL(pix) * INV_XAP;
b = B_VAL(pix) * INV_XAP;
@@ -453,7 +389,9 @@ __imlib_ScaleAARGBA(ImlibScaleInfo * isi, uint32_t * dest, int dxx, int dyy,
*dptr++ = PIXEL_ARGB(a, r, g, b);
}
else
- *dptr++ = sptr[xpoints[x]];
+ {
+ *dptr++ = *pix;
+ }
}
}
}
@@ -472,10 +410,11 @@ __imlib_ScaleAARGBA(ImlibScaleInfo * isi, uint32_t * dest, int dxx, int dyy,
Cy = YAP >> 16;
yap = YAP & 0xffff;
- dptr = dest + dx + ((y + dy) * dow);
+ sptr = srce + ypoints[dyy + y] * sow;
+ dptr = dest + dx + (y + dy) * dow;
for (x = dxx; x < end; x++)
{
- pix = ypoints[dyy + y] + xpoints[x];
+ pix = sptr + xpoints[x];
r = (R_VAL(pix) * yap) >> 10;
g = (G_VAL(pix) * yap) >> 10;
b = (B_VAL(pix) * yap) >> 10;
@@ -499,7 +438,7 @@ __imlib_ScaleAARGBA(ImlibScaleInfo * isi, uint32_t * dest, int dxx, int dyy,
assert(pix < isi->pix_assert);
if (XAP > 0)
{
- pix = ypoints[dyy + y] + xpoints[x] + 1;
+ pix = sptr + xpoints[x] + 1;
rr = (R_VAL(pix) * yap) >> 10;
gg = (G_VAL(pix) * yap) >> 10;
bb = (B_VAL(pix) * yap) >> 10;
@@ -537,8 +476,7 @@ __imlib_ScaleAARGBA(ImlibScaleInfo * isi, uint32_t * dest, int dxx, int dyy,
b >>= 4;
a >>= 4;
}
- *dptr = PIXEL_ARGB(a, r, g, b);
- dptr++;
+ *dptr++ = PIXEL_ARGB(a, r, g, b);
}
}
}
@@ -553,13 +491,14 @@ __imlib_ScaleAARGBA(ImlibScaleInfo * isi, uint32_t * dest, int dxx, int dyy,
for (y = 0; y < dh; y++)
{
- dptr = dest + dx + ((y + dy) * dow);
+ sptr = srce + ypoints[dyy + y] * sow;
+ dptr = dest + dx + (y + dy) * dow;
for (x = dxx; x < end; x++)
{
Cx = XAP >> 16;
xap = XAP & 0xffff;
- pix = ypoints[dyy + y] + xpoints[x];
+ pix = sptr + xpoints[x];
r = (R_VAL(pix) * xap) >> 10;
g = (G_VAL(pix) * xap) >> 10;
b = (B_VAL(pix) * xap) >> 10;
@@ -583,7 +522,7 @@ __imlib_ScaleAARGBA(ImlibScaleInfo * isi, uint32_t * dest, int dxx, int dyy,
assert(pix < isi->pix_assert);
if (YAP > 0)
{
- pix = ypoints[dyy + y] + xpoints[x] + sow;
+ pix = sptr + xpoints[x] + sow;
rr = (R_VAL(pix) * xap) >> 10;
gg = (G_VAL(pix) * xap) >> 10;
bb = (B_VAL(pix) * xap) >> 10;
@@ -621,8 +560,7 @@ __imlib_ScaleAARGBA(ImlibScaleInfo * isi, uint32_t * dest, int dxx, int dyy,
b >>= 4;
a >>= 4;
}
- *dptr = PIXEL_ARGB(a, r, g, b);
- dptr++;
+ *dptr++ = PIXEL_ARGB(a, r, g, b);
}
}
}
@@ -640,30 +578,30 @@ __imlib_ScaleAARGBA(ImlibScaleInfo * isi, uint32_t * dest, int dxx, int dyy,
Cy = YAP >> 16;
yap = YAP & 0xffff;
- dptr = dest + dx + ((y + dy) * dow);
+ dptr = dest + dx + (y + dy) * dow;
for (x = dxx; x < end; x++)
{
Cx = XAP >> 16;
xap = XAP & 0xffff;
- sptr = ypoints[dyy + y] + xpoints[x];
+ sptr = srce + ypoints[dyy + y] * sow + xpoints[x];
pix = sptr;
sptr += sow;
rx = (R_VAL(pix) * xap) >> 9;
gx = (G_VAL(pix) * xap) >> 9;
bx = (B_VAL(pix) * xap) >> 9;
ax = (A_VAL(pix) * xap) >> 9;
- pix++;
for (i = (1 << 14) - xap; i > Cx; i -= Cx)
{
+ pix++;
rx += (R_VAL(pix) * Cx) >> 9;
gx += (G_VAL(pix) * Cx) >> 9;
bx += (B_VAL(pix) * Cx) >> 9;
ax += (A_VAL(pix) * Cx) >> 9;
- pix++;
}
if (i > 0)
{
+ pix++;
rx += (R_VAL(pix) * i) >> 9;
gx += (G_VAL(pix) * i) >> 9;
bx += (B_VAL(pix) * i) >> 9;
@@ -683,17 +621,17 @@ __imlib_ScaleAARGBA(ImlibScaleInfo * isi, uint32_t * dest, int dxx, int dyy,
gx = (G_VAL(pix) * xap) >> 9;
bx = (B_VAL(pix) * xap) >> 9;
ax = (A_VAL(pix) * xap) >> 9;
- pix++;
for (i = (1 << 14) - xap; i > Cx; i -= Cx)
{
+ pix++;
rx += (R_VAL(pix) * Cx) >> 9;
gx += (G_VAL(pix) * Cx) >> 9;
bx += (B_VAL(pix) * Cx) >> 9;
ax += (A_VAL(pix) * Cx) >> 9;
- pix++;
}
if (i > 0)
{
+ pix++;
rx += (R_VAL(pix) * i) >> 9;
gx += (G_VAL(pix) * i) >> 9;
bx += (B_VAL(pix) * i) >> 9;
@@ -712,17 +650,17 @@ __imlib_ScaleAARGBA(ImlibScaleInfo * isi, uint32_t * dest, int dxx, int dyy,
gx = (G_VAL(pix) * xap) >> 9;
bx = (B_VAL(pix) * xap) >> 9;
ax = (A_VAL(pix) * xap) >> 9;
- pix++;
for (i = (1 << 14) - xap; i > Cx; i -= Cx)
{
+ pix++;
rx += (R_VAL(pix) * Cx) >> 9;
gx += (G_VAL(pix) * Cx) >> 9;
bx += (B_VAL(pix) * Cx) >> 9;
ax += (A_VAL(pix) * Cx) >> 9;
- pix++;
}
if (i > 0)
{
+ pix++;
rx += (R_VAL(pix) * i) >> 9;
gx += (G_VAL(pix) * i) >> 9;
bx += (B_VAL(pix) * i) >> 9;
@@ -747,12 +685,13 @@ __imlib_ScaleAARGBA(ImlibScaleInfo * isi, uint32_t * dest, int dxx, int dyy,
/* scale by area sampling - IGNORE the ALPHA byte*/
static void
-__imlib_ScaleAARGB(ImlibScaleInfo * isi, uint32_t * dest, int dxx, int dyy,
- int dx, int dy, int dw, int dh, int dow, int sow)
+__imlib_ScaleAARGB(ImlibScaleInfo * isi, uint32_t * srce, uint32_t * dest,
+ int dxx, int dyy, int dx, int dy, int dw, int dh, int dow,
+ int sow)
{
uint32_t *sptr, *dptr;
int x, y, end;
- uint32_t **ypoints;
+ int *ypoints;
int *xpoints;
int *xapoints;
int *yapoints;
@@ -778,19 +717,19 @@ __imlib_ScaleAARGB(ImlibScaleInfo * isi, uint32_t * dest, int dxx, int dyy,
for (y = 0; y < dh; y++)
{
/* calculate the source line we'll scan from */
- dptr = dest + dx + ((y + dy) * dow);
- sptr = ypoints[dyy + y];
+ sptr = srce + ypoints[dyy + y] * sow;
+ dptr = dest + dx + (y + dy) * dow;
if (YAP > 0)
{
for (x = dxx; x < end; x++)
{
- int r = 0, g = 0, b = 0;
- int rr = 0, gg = 0, bb = 0;
+ int r, g, b;
+ int rr, gg, bb;
uint32_t *pix;
+ pix = sptr + xpoints[x];
if (XAP > 0)
{
- pix = ypoints[dyy + y] + xpoints[x];
r = R_VAL(pix) * INV_XAP;
g = G_VAL(pix) * INV_XAP;
b = B_VAL(pix) * INV_XAP;
@@ -813,7 +752,6 @@ __imlib_ScaleAARGB(ImlibScaleInfo * isi, uint32_t * dest, int dxx, int dyy,
}
else
{
- pix = ypoints[dyy + y] + xpoints[x];
r = R_VAL(pix) * INV_YAP;
g = G_VAL(pix) * INV_YAP;
b = B_VAL(pix) * INV_YAP;
@@ -835,9 +773,9 @@ __imlib_ScaleAARGB(ImlibScaleInfo * isi, uint32_t * dest, int dxx, int dyy,
int r = 0, g = 0, b = 0;
uint32_t *pix;
+ pix = sptr + xpoints[x];
if (XAP > 0)
{
- pix = ypoints[dyy + y] + xpoints[x];
r = R_VAL(pix) * INV_XAP;
g = G_VAL(pix) * INV_XAP;
b = B_VAL(pix) * INV_XAP;
@@ -851,7 +789,9 @@ __imlib_ScaleAARGB(ImlibScaleInfo * isi, uint32_t * dest, int dxx, int dyy,
*dptr++ = PIXEL_ARGB(0xff, r, g, b);
}
else
- *dptr++ = sptr[xpoints[x]];
+ {
+ *dptr++ = *pix;
+ }
}
}
}
@@ -870,43 +810,44 @@ __imlib_ScaleAARGB(ImlibScaleInfo * isi, uint32_t * dest, int dxx, int dyy,
Cy = YAP >> 16;
yap = YAP & 0xffff;
- dptr = dest + dx + ((y + dy) * dow);
+ sptr = srce + ypoints[dyy + y] * sow;
+ dptr = dest + dx + (y + dy) * dow;
for (x = dxx; x < end; x++)
{
- pix = ypoints[dyy + y] + xpoints[x];
+ pix = sptr + xpoints[x];
r = (R_VAL(pix) * yap) >> 10;
g = (G_VAL(pix) * yap) >> 10;
b = (B_VAL(pix) * yap) >> 10;
- pix += sow;
for (j = (1 << 14) - yap; j > Cy; j -= Cy)
{
+ pix += sow;
r += (R_VAL(pix) * Cy) >> 10;
g += (G_VAL(pix) * Cy) >> 10;
b += (B_VAL(pix) * Cy) >> 10;
- pix += sow;
}
if (j > 0)
{
+ pix += sow;
r += (R_VAL(pix) * j) >> 10;
g += (G_VAL(pix) * j) >> 10;
b += (B_VAL(pix) * j) >> 10;
}
if (XAP > 0)
{
- pix = ypoints[dyy + y] + xpoints[x] + 1;
+ pix = sptr + xpoints[x] + 1;
rr = (R_VAL(pix) * yap) >> 10;
gg = (G_VAL(pix) * yap) >> 10;
bb = (B_VAL(pix) * yap) >> 10;
- pix += sow;
for (j = (1 << 14) - yap; j > Cy; j -= Cy)
{
+ pix += sow;
rr += (R_VAL(pix) * Cy) >> 10;
gg += (G_VAL(pix) * Cy) >> 10;
bb += (B_VAL(pix) * Cy) >> 10;
- pix += sow;
}
if (j > 0)
{
+ pix += sow;
rr += (R_VAL(pix) * j) >> 10;
gg += (G_VAL(pix) * j) >> 10;
bb += (B_VAL(pix) * j) >> 10;
@@ -924,8 +865,7 @@ __imlib_ScaleAARGB(ImlibScaleInfo * isi, uint32_t * dest, int dxx, int dyy,
g >>= 4;
b >>= 4;
}
- *dptr = PIXEL_ARGB(0xff, r, g, b);
- dptr++;
+ *dptr++ = PIXEL_ARGB(0xff, r, g, b);
}
}
}
@@ -940,46 +880,47 @@ __imlib_ScaleAARGB(ImlibScaleInfo * isi, uint32_t * dest, int dxx, int dyy,
for (y = 0; y < dh; y++)
{
- dptr = dest + dx + ((y + dy) * dow);
+ sptr = srce + ypoints[dyy + y] * sow;
+ dptr = dest + dx + (y + dy) * dow;
for (x = dxx; x < end; x++)
{
Cx = XAP >> 16;
xap = XAP & 0xffff;
- pix = ypoints[dyy + y] + xpoints[x];
+ pix = sptr + xpoints[x];
r = (R_VAL(pix) * xap) >> 10;
g = (G_VAL(pix) * xap) >> 10;
b = (B_VAL(pix) * xap) >> 10;
- pix++;
for (j = (1 << 14) - xap; j > Cx; j -= Cx)
{
+ pix++;
r += (R_VAL(pix) * Cx) >> 10;
g += (G_VAL(pix) * Cx) >> 10;
b += (B_VAL(pix) * Cx) >> 10;
- pix++;
}
if (j > 0)
{
+ pix++;
r += (R_VAL(pix) * j) >> 10;
g += (G_VAL(pix) * j) >> 10;
b += (B_VAL(pix) * j) >> 10;
}
if (YAP > 0)
{
- pix = ypoints[dyy + y] + xpoints[x] + sow;
+ pix = sptr + xpoints[x] + sow;
rr = (R_VAL(pix) * xap) >> 10;
gg = (G_VAL(pix) * xap) >> 10;
bb = (B_VAL(pix) * xap) >> 10;
- pix++;
for (j = (1 << 14) - xap; j > Cx; j -= Cx)
{
+ pix++;
rr += (R_VAL(pix) * Cx) >> 10;
gg += (G_VAL(pix) * Cx) >> 10;
bb += (B_VAL(pix) * Cx) >> 10;
- pix++;
}
if (j > 0)
{
+ pix++;
rr += (R_VAL(pix) * j) >> 10;
gg += (G_VAL(pix) * j) >> 10;
bb += (B_VAL(pix) * j) >> 10;
@@ -997,8 +938,7 @@ __imlib_ScaleAARGB(ImlibScaleInfo * isi, uint32_t * dest, int dxx, int dyy,
g >>= 4;
b >>= 4;
}
- *dptr = PIXEL_ARGB(0xff, r, g, b);
- dptr++;
+ *dptr++ = PIXEL_ARGB(0xff, r, g, b);
}
}
}
@@ -1016,28 +956,28 @@ __imlib_ScaleAARGB(ImlibScaleInfo * isi, uint32_t * dest, int dxx, int dyy,
Cy = YAP >> 16;
yap = YAP & 0xffff;
- dptr = dest + dx + ((y + dy) * dow);
+ dptr = dest + dx + (y + dy) * dow;
for (x = dxx; x < end; x++)
{
Cx = XAP >> 16;
xap = XAP & 0xffff;
- sptr = ypoints[dyy + y] + xpoints[x];
+ sptr = srce + ypoints[dyy + y] * sow + xpoints[x];
pix = sptr;
sptr += sow;
rx = (R_VAL(pix) * xap) >> 9;
gx = (G_VAL(pix) * xap) >> 9;
bx = (B_VAL(pix) * xap) >> 9;
- pix++;
for (i = (1 << 14) - xap; i > Cx; i -= Cx)
{
+ pix++;
rx += (R_VAL(pix) * Cx) >> 9;
gx += (G_VAL(pix) * Cx) >> 9;
bx += (B_VAL(pix) * Cx) >> 9;
- pix++;
}
if (i > 0)
{
+ pix++;
rx += (R_VAL(pix) * i) >> 9;
gx += (G_VAL(pix) * i) >> 9;
bx += (B_VAL(pix) * i) >> 9;
@@ -1054,16 +994,16 @@ __imlib_ScaleAARGB(ImlibScaleInfo * isi, uint32_t * dest, int dxx, int dyy,
rx = (R_VAL(pix) * xap) >> 9;
gx = (G_VAL(pix) * xap) >> 9;
bx = (B_VAL(pix) * xap) >> 9;
- pix++;
for (i = (1 << 14) - xap; i > Cx; i -= Cx)
{
+ pix++;
rx += (R_VAL(pix) * Cx) >> 9;
gx += (G_VAL(pix) * Cx) >> 9;
bx += (B_VAL(pix) * Cx) >> 9;
- pix++;
}
if (i > 0)
{
+ pix++;
rx += (R_VAL(pix) * i) >> 9;
gx += (G_VAL(pix) * i) >> 9;
bx += (B_VAL(pix) * i) >> 9;
@@ -1079,16 +1019,16 @@ __imlib_ScaleAARGB(ImlibScaleInfo * isi, uint32_t * dest, int dxx, int dyy,
rx = (R_VAL(pix) * xap) >> 9;
gx = (G_VAL(pix) * xap) >> 9;
bx = (B_VAL(pix) * xap) >> 9;
- pix++;
for (i = (1 << 14) - xap; i > Cx; i -= Cx)
{
+ pix++;
rx += (R_VAL(pix) * Cx) >> 9;
gx += (G_VAL(pix) * Cx) >> 9;
bx += (B_VAL(pix) * Cx) >> 9;
- pix++;
}
if (i > 0)
{
+ pix++;
rx += (R_VAL(pix) * i) >> 9;
gx += (G_VAL(pix) * i) >> 9;
bx += (B_VAL(pix) * i) >> 9;
@@ -1110,16 +1050,19 @@ __imlib_ScaleAARGB(ImlibScaleInfo * isi, uint32_t * dest, int dxx, int dyy,
void
__imlib_Scale(ImlibScaleInfo * isi, bool aa, bool alpha,
- uint32_t * dest, int dxx, int dyy, int dx, int dy,
- int dw, int dh, int dow, int sow)
+ uint32_t * srce, uint32_t * dest, int dxx, int dyy, int dx,
+ int dy, int dw, int dh, int dow, int sow)
{
if (aa)
{
if (alpha)
- __imlib_ScaleAARGBA(isi, dest, dxx, dyy, dx, dy, dw, dh, dow, sow);
+ __imlib_ScaleAARGBA(isi, srce, dest, dxx, dyy, dx, dy, dw, dh,
+ dow, sow);
else
- __imlib_ScaleAARGB(isi, dest, dxx, dyy, dx, dy, dw, dh, dow, sow);
+ __imlib_ScaleAARGB(isi, srce, dest, dxx, dyy, dx, dy, dw, dh,
+ dow, sow);
}
else
- __imlib_ScaleSampleRGBA(isi, dest, dxx, dyy, dx, dy, dw, dh, dow);
+ __imlib_ScaleSampleRGBA(isi, srce, dest, dxx, dyy, dx, dy, dw, dh,
+ dow, sow);
}
diff --git a/src/lib/scale.h b/src/lib/scale.h
index 118967a..a21d21c 100644
--- a/src/lib/scale.h
+++ b/src/lib/scale.h
@@ -11,7 +11,7 @@ ImlibScaleInfo *__imlib_CalcScaleInfo(ImlibImage * im,
ImlibScaleInfo *__imlib_FreeScaleInfo(ImlibScaleInfo * isi);
void __imlib_Scale(ImlibScaleInfo * isi, bool aa, bool alpha,
- uint32_t * dest,
+ uint32_t * srce, uint32_t * dest,
int dxx, int dyy, int dx, int dy,
int dw, int dh, int dow, int sow);
diff --git a/src/lib/x11_rend.c b/src/lib/x11_rend.c
index 8fd83ef..a451800 100644
--- a/src/lib/x11_rend.c
+++ b/src/lib/x11_rend.c
@@ -380,7 +380,7 @@ __imlib_RenderImage(const ImlibContextX11 * x11, ImlibImage * im,
{
/* scale the imagedata for this LINESIZE lines chunk of image data */
__imlib_Scale(scaleinfo, antialias, im->has_alpha,
- buf, (sx * dw) / sw,
+ im->data, buf, (sx * dw) / sw,
((sy * dh) / sh) + y, 0, 0, dw, hh, dw, im->w);
jump = 0;
pointer = buf;
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.