--- xzoom-0.3.orig/Imakefile +++ xzoom-0.3/Imakefile @@ -15,11 +15,11 @@ DEFINES = -DFRAME -DXSHM -LOCAL_LIBRARIES = -lXext -lX11 +LOCAL_LIBRARIES = -lXext -lX11 -lXt NAME = xzoom -BINDIR = /usr/local/bin -MANPATH = /usr/local/man +BINDIR = /usr/bin +MANPATH = /usr/share/man SimpleProgramTarget($(NAME)) --- xzoom-0.3.orig/debian/changelog +++ xzoom-0.3/debian/changelog @@ -0,0 +1,194 @@ +xzoom (0.3-24~trusty1) trusty; urgency=medium + + * Back ported from + http://ftp.de.debian.org/debian/pool/main/x/xzoom/xzoom_0.3-24.dsc + + -- Ubuntu MATE Developers Sat, 01 Nov 2014 15:29:56 +0000 + +xzoom (0.3-24) unstable; urgency=medium + + * QA upload. + * Set Maintainer to Debian QA group as this package is orphaned. + * Add .desktop file, thanks to Martin Wimpress at Launchpad (Closes: + #1368188) + + -- Iain Lane Mon, 29 Sep 2014 13:16:32 +0100 + +xzoom (0.3-23) unstable; urgency=low + + [ Anibal Avelar ] + * New mantainer + * Fixed the FTBFS bug added the xutils-dev dependency. + (Closes: #485733) + * Bumped to Standards-version 3.8.0. + * Added the Homepage field in the debian/control file. + * Cleaned the debian/copyright file with cosmetic changes. + + [ Piotr Ożarowski ] + * debian/watch file added + + -- Anibal Avelar Sun, 15 Jun 2008 22:27:53 -0400 + +xzoom (0.3-22) unstable; urgency=low + + * Cap menu item. Closes: #438103 + + -- Joey Hess Wed, 15 Aug 2007 13:29:53 -0400 + +xzoom (0.3-21) unstable; urgency=low + + * Maintaining this package again. + * Improve description, fix typos. + * Remove debian/pbuild-test directory, seems to be added by accident. + * De-dpatchify (personal preference). + * Clean up rules file. + * Remove various autogenerated files from source package, seems they were + added by accident. + * debhelper v5. + * The Apps/Tools menu is obsolete. Use Applications/Accessibility, + hope that's not too big a stretch. + * Remove CVS dirs from debian patch. + + -- Joey Hess Tue, 07 Aug 2007 22:01:43 -0700 + +xzoom (0.3-20) unstable; urgency=low + + * orphan + + -- Junichi Uekawa Sat, 04 Aug 2007 09:37:51 +0900 + +xzoom (0.3-19) unstable; urgency=low + + * Standards-version: 3.7.2 + * debian/compat: 4 + + -- Junichi Uekawa Sat, 2 Sep 2006 19:42:17 +0900 + +xzoom (0.3-18) unstable; urgency=low + + * support for X11R7, and install to standard FHS locations. + (Closes: #364168). + * use dpatch. + * quote menu item string. + * Standards-version: 3.6.2 + + -- Junichi Uekawa Sat, 22 Apr 2006 12:50:12 +0900 + +xzoom (0.3-17) unstable; urgency=low + + * Bug fix: "xzoom: FTBFS: build-depends on removed xlibs-dev" + Changed to x-dev, libxext-dev, libxt-dev (Closes: #346867). + * Bug fix: "'man xzoom' typo: "magniications"", thanks to A + Costa (Closes: #306710). + * add simple test for resulting binary. + + -- Junichi Uekawa Mon, 9 Jan 2006 13:10:09 +0900 + +xzoom (0.3-16) unstable; urgency=low + + * New maintainer (closes: #202330) + * Standards-version: 3.6.0 + * Modified the package description. + + -- Junichi Uekawa Sat, 9 Aug 2003 07:38:11 +0900 + +xzoom (0.3-15) unstable; urgency=low + + * orphaned; set maintainer to packages@qa.debian.org + + -- tony mancill Mon, 21 Jul 2003 15:46:51 -0700 + +xzoom (0.3-14) unstable; urgency=low + + * updated build-depends for sid (closes: #170185) + + -- tony mancill Sat, 23 Nov 2002 16:04:04 -0800 + +xzoom (0.3-13) unstable; urgency=low + + * updated manpage (closes: #93253) + * hacked in WM_DELETE_WINDOW support (closes: #93250) + (you can now use standard window manager methods to close the client) + + -- tony mancill Tue, 12 Feb 2002 22:59:09 -0800 + +xzoom (0.3-12) unstable; urgency=low + + * binaries built against xfree 4.x for woody release + + -- tony mancill Mon, 26 Nov 2001 20:08:29 -0800 + +xzoom (0.3-11) unstable; urgency=low + + * new maintainer (Closes: bug#69658) + + -- tony mancill Mon, 28 Aug 2000 17:43:02 -0700 + +xzoom (0.3-10) unstable; urgency=low + + * Build deps. + + -- Joey Hess Sat, 4 Dec 1999 18:42:28 -0800 + +xzoom (0.3-9) unstable; urgency=low + + * FHS + + -- Joey Hess Sun, 12 Sep 1999 14:27:43 -0700 + +xzoom (0.3-8) unstable; urgency=low + + * Fixed package description: no longer limited to 8bpp. + * Documented the 'g' key in the man page. + + -- Joey Hess Wed, 25 Feb 1998 11:09:59 -0800 + +xzoom (0.3-7) unstable; urgency=low + + * Added changes from Markus F.X.J. Oberhumer + , for greater than 8 bpp support + plus some other features. + + -- Joey Hess Thu, 19 Feb 1998 10:59:43 -0800 + +xzoom (0.3-6) unstable; urgency=low + + * Moved binary to /usr/X11R6/bin. + + -- Joey Hess Mon, 9 Feb 1998 12:44:08 -0800 + +xzoom (0.3-5) unstable; urgency=low + + * Use debhelper. + + -- Joey Hess Sat, 7 Feb 1998 20:48:22 -0800 + +xzoom (0.3-4) unstable; urgency=low + + * libc6. + * Routine update of debian/rules: + Fixed binary-indep target. + + -- Joey Hess Mon, 8 Sep 1997 14:08:03 -0400 + +xzoom (0.3-3) unstable; urgency=low + + * Added note to description that it only works at 8bpp. + + -- Joey Hess Thu, 5 Jun 1997 19:36:27 -0400 + +xzoom (0.3-2) unstable; urgency=low + + * Fixed man page permissions. (#10275) + * Moved man page to X11R6. + * Updated menu file to menu-1 format. + * Routine update of debian/rules: + Run dpkg-gencontrol after debstd, and delete substvars during clean. + + -- Joey Hess Sun, 1 Jun 1997 14:12:42 -0400 + +xzoom (0.3-1) unstable; urgency=low + + * First release. + + -- Joey Hess Sat, 8 Mar 1997 15:30:09 -0500 --- xzoom-0.3.orig/debian/compat +++ xzoom-0.3/debian/compat @@ -0,0 +1 @@ +5 --- xzoom-0.3.orig/debian/control +++ xzoom-0.3/debian/control @@ -0,0 +1,17 @@ +Source: xzoom +Section: x11 +Priority: optional +Build-Depends: debhelper (>= 5), libxext-dev, libxt-dev, xutils-dev +Maintainer: Debian QA Group +Homepage: ftp://sunsite.unc.edu/pub/linux/libs/X/ +Standards-Version: 3.8.0 + +Package: xzoom +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends} +Description: magnify part of X display, with real-time updates + Like xmag, xzoom magnifies a section of the X display. Xzoom is different + because it will continuously update the magnified area as the display + changes. It is fast enough to enlarge small animations, for example. + . + It can also mirror or rotate a part of the screen. --- xzoom-0.3.orig/debian/copyright +++ xzoom-0.3/debian/copyright @@ -0,0 +1,22 @@ +This package was maintained by tony mancill , for a +while, and then picked up by Junichi Uekawa . Since Sun, 15 Jun 2008 maintained by Anibal Avelar . + +This package was put together by Joey Hess , using +sources from: + ftp://sunsite.unc.edu/pub/linux/libs/X/xzoom-0.3.tgz + +Copyright: 1995-2008 Itai Nahshon + +License: + + This program is distributed with no warranty. + + Source files for this program may be distributed freely. + Modifications to this file are okay as long as: + a. This copyright notice and comment are preserved and + left at the top of the file. + b. The man page is fixed to reflect the change. + c. The author of this change adds his name and change + description to the list of changes below. + Executable files may be distributed with sources, or with + exact location where the source code can be obtained. --- xzoom-0.3.orig/debian/install +++ xzoom-0.3/debian/install @@ -0,0 +1 @@ +debian/xzoom.desktop usr/share/applications --- xzoom-0.3.orig/debian/menu +++ xzoom-0.3/debian/menu @@ -0,0 +1,2 @@ +?package(xzoom):needs="x11" section="Applications/Accessibility" \ + title="Xzoom" command="xzoom" --- xzoom-0.3.orig/debian/rules +++ xzoom-0.3/debian/rules @@ -0,0 +1,39 @@ +#!/usr/bin/make -f + +build: build-stamp +build-stamp: + dh_testdir + xmkmf -a + $(MAKE) + touch build-stamp + +clean: + dh_testdir + dh_testroot + rm -f build-stamp + if [ -e Makefile ]; then $(MAKE) -i clean; fi + dh_clean Makefile + +binary-indep: build + +binary-arch: build + dh_testdir + dh_testroot + dh_clean -k + $(MAKE) DESTDIR=debian/xzoom install + dh_installman xzoom.man + dh_installdocs README + dh_installmenu + dh_installchangelogs + dh_install + dh_strip + dh_compress + dh_fixperms + dh_installdeb + dh_shlibdeps + dh_gencontrol + dh_md5sums + dh_builddeb + +binary: binary-indep binary-arch +.PHONY: build clean binary-indep binary-arch binary --- xzoom-0.3.orig/debian/watch +++ xzoom-0.3/debian/watch @@ -0,0 +1,2 @@ +version=3 +ftp://sunsite.unc.edu/pub/linux/libs/X/xzoom-(.*)\.tgz --- xzoom-0.3.orig/debian/xzoom.desktop +++ xzoom-0.3/debian/xzoom.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Name=Screen Magnifier +GenericName=Screen Magnifier +Comment=Magnify part of display, with real-time updates. +Keywords=screen magnifier; +Exec=xzoom -mag 3 -geometry 320x240 +Icon=system-search +Terminal=false +Type=Application +StartupNotify=true +Categories=GTK;GNOME;Utility;Accessibility; --- xzoom-0.3.orig/scale.h +++ xzoom-0.3/scale.h @@ -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 + --- xzoom-0.3.orig/xzoom.c +++ xzoom-0.3/xzoom.c @@ -12,13 +12,22 @@ exact location where the source code can be obtained. Changelist: -Author Description ------- ----------- -Itai Nahshon Version 0.1, Nov. 21 1995 -Itai Nahshon Version 0.2, Apr. 17 1996 - include - Use memmove() instead of memcopy() - Optional macro to replace call to usleep(). +Author Description +------ ----------- +Itai Nahshon Version 0.1, Nov. 21 1995 +Itai Nahshon Version 0.2, Apr. 17 1996 + include + Use memmove() instead of memcopy() + Optional macro to replace call to usleep(). +Markus F.X.J. Oberhumer Version 0.4, Feb. 18 1998 + split into 2 files (scale.h) + added support for 15, 16, 24 and 32 bpp displays + added a grid (press key 'g') + optimized scaling routines + use memcpy() instead of memmove() ;-) + some other minor changes/fixes +tony mancill 2002/02/13 + hacked in support for WM_DELETE_WINDOW */ #include @@ -48,6 +57,9 @@ Display *dpy; Screen *scr; Window win; +Atom wm_delete_window; +Atom wm_protocols; +Status status; GC gc; #ifdef FRAME @@ -87,8 +99,12 @@ int xzoom_flag = False; /* next mag change only to magx */ int yzoom_flag = False; /* next mag change only to magy */ +int gridx = False; +int gridy = False; + int width[2] = { 0, WIDTH }; int height[2] = { 0, HEIGHT }; +unsigned depth = 0; #ifdef XSHM XShmSegmentInfo shminfo[2]; /* Segment info. */ @@ -106,6 +122,7 @@ void timeout_func(int signum) { set_title = True; + signum = signum; /* UNUSED */ } #ifdef FRAME @@ -116,9 +133,6 @@ void allocate_images(void) { int i; -#ifndef XSHM - char *data; -#endif for(i = 0; i < 2; i++) { @@ -137,7 +151,7 @@ shminfo[i].shmid = shmget(IPC_PRIVATE, (unsigned int)(ximage[i]->bytes_per_line * ximage[i]->height), IPC_CREAT | 0777); - + if(shminfo[i].shmid < 0) { perror("shmget"); exit(-1); @@ -163,20 +177,21 @@ shmctl(shminfo[i].shmid, IPC_RMID, 0); #else - data = malloc(width[i] * height[i]); + char *data; + data = malloc(BitmapUnit(dpy) / 8 * width[i] * height[i]); ximage[i] = XCreateImage(dpy, DefaultVisualOfScreen(scr), DefaultDepthOfScreen(scr), ZPixmap, 0, data, - width[i], height[i], 8, width[i]); + width[i], height[i], 32, 0); if(ximage[i] == NULL) { perror("XCreateImage"); exit(-1); } -#endif XSHM +#endif /* XSHM */ } created_images = True; } @@ -185,6 +200,9 @@ destroy_images(void) { int i; + if (!created_images) + return; + for(i = 0; i < 2; i++) { #ifdef XSHM XShmDetach(dpy, &shminfo[i]); /* ask X11 to detach shared segment */ @@ -195,6 +213,8 @@ ximage[i]->data = NULL; /* remove refrence to that address */ XDestroyImage(ximage[i]); /* and destroy image */ } + + created_images = False; } void @@ -230,8 +250,7 @@ void resize(int new_width, int new_height) { - if(created_images) - destroy_images(); /* we can get rid of these */ + destroy_images(); /* we can get rid of these */ /* find new dimensions for source */ @@ -244,9 +263,13 @@ height[SRC] = (new_height+magy-1) / magy; } + if(width[SRC] < 1) + width[SRC] = 1; if(width[SRC] > WidthOfScreen(scr)) width[SRC] = WidthOfScreen(scr); + if(height[SRC] < 1) + height[SRC] = 1; if(height[SRC] > HeightOfScreen(scr)) height[SRC] = HeightOfScreen(scr); @@ -270,12 +293,34 @@ height[DST] = new_height; } + +void scale8(void) +{ +#define T unsigned char +#include "scale.h" +#undef T +} + + +void scale16(void) +{ +#define T unsigned short +#include "scale.h" +#undef T +} + + +void scale32(void) +{ +#define T unsigned int +#include "scale.h" +#undef T +} + + int main(int argc, char **argv) { XSetWindowAttributes xswa; - int i, j, k; - char c; - char *p1, *p2; XEvent event; int buttonpressed = False; int unmapped = True; @@ -286,8 +331,9 @@ int source_geom_mask = NoValue, dest_geom_mask = NoValue, copy_from_src_mask; - int xpos = 0, ypos = 0; + int xpos = 0, ypos = 0; + atexit(destroy_images); progname = strrchr(argv[0], '/'); if(progname) ++progname; @@ -312,7 +358,7 @@ if(magx <= 0) Usage(); - + magy = argc > 1 ? atoi(argv[1]) : -1; @@ -340,7 +386,7 @@ flipxy = True; continue; } - + if(!strcmp(argv[0], "-source")) { ++argv; --argc; @@ -438,23 +484,24 @@ scr = DefaultScreenOfDisplay(dpy); - if(DefaultDepthOfScreen(scr) != 8) { - fprintf(stderr, "%s: can work only with 8 bits/pixel\n", progname); + depth = DefaultDepthOfScreen(scr); + if (depth < 8) { + fprintf(stderr, "%s: need at least 8 bits/pixel\n", progname); exit(1); } if(source_geom_mask & XNegative) xgrab += WidthOfScreen(scr); - + if(source_geom_mask & YNegative) ygrab += HeightOfScreen(scr); if(dest_geom_mask & XNegative) xpos += WidthOfScreen(scr); - + if(source_geom_mask & YNegative) ypos += HeightOfScreen(scr); - + /* printf("=%dx%d+%d+%d\n", width[DST], height[DST], xpos, ypos); */ xswa.event_mask = ButtonPressMask|ButtonReleaseMask|ButtonMotionMask; @@ -463,24 +510,33 @@ xswa.background_pixel = BlackPixelOfScreen(scr); win = XCreateWindow(dpy, RootWindowOfScreen(scr), - xpos, ypos, width[DST], height[DST], 0, + xpos, ypos, width[DST], height[DST], 0, DefaultDepthOfScreen(scr), InputOutput, DefaultVisualOfScreen(scr), CWEventMask | CWBackPixel, &xswa); - XChangeProperty(dpy, win, XA_WM_ICON_NAME, XA_STRING, 8, + XChangeProperty(dpy, win, XA_WM_ICON_NAME, XA_STRING, 8, PropModeReplace, (unsigned char *)progname, strlen(progname)); /* - XChangeProperty(dpy, win, XA_WM_NAME, XA_STRING, 8, + XChangeProperty(dpy, win, XA_WM_NAME, XA_STRING, 8, PropModeReplace, (unsigned char *)progname, strlen(progname)); */ + + /*** 20020213 + code added by to handle + window manager "close" event + ***/ + wm_delete_window = XInternAtom (dpy, "WM_DELETE_WINDOW", False); + wm_protocols = XInternAtom(dpy, "WM_PROTOCOLS", False); + status = XSetWMProtocols(dpy, win, &wm_delete_window, 1); + set_title = True; - XMapWindow(dpy, win); + status = XMapWindow(dpy, win); gcv.plane_mask = AllPlanes; gcv.subwindow_mode = IncludeInferiors; @@ -512,7 +568,7 @@ { static char bitmap_data[] = { 0 }; static XColor col = { 0 }; - Pixmap curs = XCreatePixmapFromBitmapData(dpy, + Pixmap curs = XCreatePixmapFromBitmapData(dpy, RootWindowOfScreen(scr), bitmap_data, 1, 1, 0, 0, 1); when_button = XCreatePixmapCursor(dpy, curs, curs, &col, &col, 0, 0); @@ -526,11 +582,22 @@ for(;;) { + /***** + old event loop updated to support WM messages while(unmapped? (XWindowEvent(dpy, win, (long)-1, &event), 1): XCheckWindowEvent(dpy, win, (long)-1, &event)) { - + ******/ + + while(XPending(dpy)) { + XNextEvent(dpy, &event); switch(event.type) { + case ClientMessage: + if ((event.xclient.message_type == wm_protocols) && + (event.xclient.data.l[0] == wm_delete_window)) { + exit(0); + } + break; case ConfigureNotify: if(event.xconfigure.width != width[DST] || event.xconfigure.height != height[DST]) { @@ -567,6 +634,7 @@ case '+': case '=': + case XK_KP_Add: if(!yzoom_flag) ++magx; if(!xzoom_flag) ++magy; xzoom_flag = yzoom_flag = False; @@ -575,6 +643,7 @@ break; case '-': + case XK_KP_Subtract: if(!yzoom_flag) --magx; if(!xzoom_flag) --magy; xzoom_flag = yzoom_flag = False; @@ -585,6 +654,7 @@ break; case XK_Left: + case XK_KP_Left: if(flipxy) if(flipx) ygrab += scroll; @@ -598,6 +668,7 @@ break; case XK_Right: + case XK_KP_Right: if(flipxy) if(flipx) ygrab -= scroll; @@ -611,6 +682,7 @@ break; case XK_Up: + case XK_KP_Up: if(flipxy) if(flipy) xgrab -= scroll; @@ -624,6 +696,7 @@ break; case XK_Down: + case XK_KP_Down: if(flipxy) if(flipy) xgrab += scroll; @@ -666,12 +739,17 @@ xzoom_flag = False; break; + case 'g': + gridx = !gridx; + gridy = !gridy; + break; + case 'd': if(++delay_index >= NDELAYS) delay_index = 0; delay = delays[delay_index]; sprintf(title, "delay = %d ms", delay/1000); - XChangeProperty(dpy, win, XA_WM_NAME, XA_STRING, 8, + XChangeProperty(dpy, win, XA_WM_NAME, XA_STRING, 8, PropModeReplace, (unsigned char *)title, strlen(title)); signal(SIGALRM, timeout_func); @@ -717,6 +795,7 @@ #endif } break; + } /* trying XShmGetImage when part of the rect is @@ -736,6 +815,7 @@ if(ygrab > HeightOfScreen(scr)-height[SRC]) ygrab = HeightOfScreen(scr)-height[SRC]; + } #ifdef XSHM @@ -753,63 +833,12 @@ } #endif - /* copy scaled lines from src to dst */ - for(j = flipxy?width[SRC]:height[SRC]; --j >= 0; ) { - /* p1 point to begining of scanline j*magy in DST */ - p1 = &ximage[DST]->data[ximage[DST]->xoffset + - j*magy*ximage[DST]->bytes_per_line ]; - /* p2 point to begining of scanline j in SRC */ - /* if flipy then line height[SRC]-1-j */ - p2 = &ximage[SRC]->data[ximage[SRC]->xoffset + - (flipy?(height[SRC]-1-j):j)*ximage[SRC]->bytes_per_line ]; - - if(flipxy) { - int p2step = ximage[SRC]->bytes_per_line; - p2 = &ximage[SRC]->data[ximage[SRC]->xoffset + (flipy?j:(width[SRC]-1-j))]; - - if(flipx) { - p2 += p2step * (height[SRC]-1); - p2step = -p2step; - } - - for(i = height[SRC]; --i >= 0;) { - c = *p1++ = *p2; - p2 += p2step; - for(k = magx; --k > 0; ) - *p1++ = c; - } - } - else if(flipx) { - p2 += width[SRC]; - for(i = width[SRC]; --i >= 0;) { - c = *p1++ = *--p2; - for(k = magx; --k > 0; ) - *p1++ = c; - } - } - else { - for(i = width[SRC]; --i >= 0;) { - c = *p1++ = *p2++; - for(k = magx; --k > 0; ) - *p1++ = c; - } - } - - /* p1 point to begining of scanline j*magy in DST */ - p1 = &ximage[DST]->data[ximage[DST]->xoffset + - j*magy*ximage[DST]->bytes_per_line ]; - /* p2 points to begining of next line */ - p2 = p1 + ximage[DST]->bytes_per_line; - /* duplicate that line as needed */ - for(k = magy; --k > 0; ) { -#ifdef BCOPY - bcopy(p1, p2, width[DST]); -#else - memmove(p2, p1, width[DST]); -#endif - p2 += ximage[DST]->bytes_per_line; - } - } + if (depth == 8) + scale8(); + else if (depth <= 8*sizeof(short)) + scale16(); + else if (depth <= 8*sizeof(int)) + scale32(); #ifdef XSHM XShmPutImage(dpy, win, gc, ximage[DST], 0, 0, 0, 0, width[DST], height[DST], False); @@ -825,7 +854,7 @@ flipx?"-":"", magx, flipxy?" <=>":";", flipy?"-":"", magy); - XChangeProperty(dpy, win, XA_WM_NAME, XA_STRING, 8, + XChangeProperty(dpy, win, XA_WM_NAME, XA_STRING, 8, PropModeReplace, (unsigned char *)title, strlen(title)); set_title = False; --- xzoom-0.3.orig/xzoom.man +++ xzoom-0.3/xzoom.man @@ -1,9 +1,9 @@ .\" xzoom.man .\" Copyright Itai Nahshon .\" -.TH XZOOM 1X +.TH XZOOM 1x .SH NAME -xzoom \- +xzoom \- magnify part of the screen, with fast updates .SH SYNOPSIS .B xzoom [ \-display \fIdisplayname\fP ] [ \-mag \fImag\fP [ \fImag\fP ] ] @@ -18,7 +18,7 @@ .TP 5 .B \-mag \fImag\fP [ \fImag\fP ] What magnification to use. If two number arguments are supplied the -first is used for X magniications and the second is used for Y magnification. +first is used for X magnifications and the second is used for Y magnification. Magnification should be greater than 0. .TP 5 .B \-x @@ -85,6 +85,9 @@ sets the delay between frame updates. Built-in delays are 200, 100, 50, 10 and 0 ms. .TP 5 +.B g +toggle grid on and off. +.TP 5 .B Mouse buttons To set the location of the magnified are click the left mouse button inside xzoom's window and then move it (keep the button @@ -147,11 +150,6 @@ display is not on the local host. .LP 5 \(dg -The Ximage data is accessed directly, in a way which may -not be portable. Xzoom will not run with display depth other -than 8 bits per pixel. -.LP 5 -\(dg Xzoom is given with no warranty. It was tested only under Linux with Xfree86 release 3.1.2 (X11R6). .LP 5