aboutsummaryrefslogtreecommitdiff
path: root/x11/xzoom/files/patch-ab
diff options
context:
space:
mode:
Diffstat (limited to 'x11/xzoom/files/patch-ab')
-rw-r--r--x11/xzoom/files/patch-ab105
1 files changed, 105 insertions, 0 deletions
diff --git a/x11/xzoom/files/patch-ab b/x11/xzoom/files/patch-ab
new file mode 100644
index 000000000000..46728bbc46f1
--- /dev/null
+++ b/x11/xzoom/files/patch-ab
@@ -0,0 +1,105 @@
+--- scale.h.orig Sat Jan 15 14:23:58 2000
++++ scale.h Sat Jan 15 00:00:00 2000
+@@ -0,0 +1,102 @@
++/* scale image from SRC to DST - parameterized by type T */
++
++/* get pixel address of point (x,y) in image t */
++#define getP(t,x,y) \
++ (T *) (&ximage[t]->data[(ximage[t]->xoffset+(x))*sizeof(T) + \
++ (y)*ximage[t]->bytes_per_line])
++
++{
++ int i, j, k;
++
++ /* copy scaled lines from SRC to DST */
++ j = flipxy ? width[SRC] - 1 : height[SRC] - 1;
++ do {
++ T *p1;
++ T *p2;
++ int p2step;
++ T *p1_save;
++
++ /* p1 point to begining of scanline j*magy in DST */
++ p1 = getP(DST,0,j*magy);
++ p1_save = p1;
++ /* p2 point to begining of scanline j in SRC */
++ /* if flipy then line height[SRC]-1-j */
++ p2 = getP(SRC,0,flipy ? (height[SRC]-1-j) : j);
++
++ if (flipxy)
++ {
++ p2 = getP(SRC,flipy ? j : (width[SRC]-1-j),0);
++ p2step = ximage[SRC]->bytes_per_line / sizeof(T);
++
++ if (flipx)
++ {
++ p2 += p2step * (height[SRC]-1);
++ p2step = -p2step;
++ }
++
++ i = height[SRC];
++ do {
++ T c = *p2; p2 += p2step;
++ k = magx; do *p1++ = c; while (--k > 0);
++ } while (--i > 0);
++ }
++ else if (flipx)
++ {
++ p2 += width[SRC];
++ i = width[SRC];
++ do {
++ T c = *--p2;
++ k = magx; do *p1++ = c; while (--k > 0);
++ } while (--i > 0);
++ }
++ else
++ {
++ i = width[SRC];
++ do {
++ T c = *p2++;
++ k = magx; do *p1++ = c; while (--k > 0);
++ } while (--i > 0);
++ }
++
++ /* draw vertical grid */
++ if (gridy && magx >= 2)
++ {
++ p1 = p1_save - 1;
++ i = magx;
++ k = flipxy ? height[SRC] : width[SRC];
++ do {
++ p1 += i;
++ *p1 ^= ~((T)0);
++ } while (--k > 0);
++ }
++
++ /* duplicate that line as needed */
++ if (magy > 1)
++ {
++ /* p1 point to begining of scanline j*magy in DST */
++ p1 = p1_save;
++ /* p2 points to begining of next line */
++ p2 = p1;
++ p2step = ximage[DST]->bytes_per_line / sizeof(T);
++
++ i = width[DST] * sizeof(T);
++ k = magy - 1;
++ do {
++ p2 += p2step;
++ memcpy(p2, p1, i);
++ } while (--k > 0);
++
++ /* draw horizontal grid */
++ if (gridx && magy >= 2)
++ {
++ k = width[DST];
++ do {
++ *p2++ ^= ~((T)0);
++ } while (--k > 0);
++ }
++ }
++ } while (--j >= 0);
++}
++
++#undef getP
++