Path: utzoo!utgpu!water!watmath!clyde!att!ihnp4!upba!eecae!super.upenn.edu!xmos.cis.upenn.edu!bradley
From: bradley@xmos.cis.upenn.edu (John Bradley)
Newsgroups: comp.windows.x
Subject: Patch to 'xmag'
Message-ID: <4634@super.upenn.edu>
Date: 12 May 88 23:08:01 GMT
Sender: news@super.upenn.edu
Reply-To: bradley@xmos.cis.upenn.edu (John Bradley)
Distribution: na
Organization: University of Pennsylvania
Lines: 188
Here's a patch to xmag that let's you click on pixels in the magnified
window and get their pixel/r/g/b values. Handy when debugging image processing
thingies, or at least it *should* be.
John Bradley - bradley@cis.upenn.edu
-----------------------(cut here)-------------------------
*** xmag.c.std Thu May 12 16:06:24 1988
--- xmag.c Thu May 12 18:46:30 1988
***************
*** 29,34 ****
--- 29,36 ----
#define DEFAULT_CURSOR_SIZE 64
#define DEFAULT_MAGNIFICATION 5
+ #define PIXFONT "8x13"
+
int Argc; /* copy of argc */
char **Argv; /* copy of argv */
***************
*** 433,439 ****
attr.background_pixel = back_pixel;
attr.border_pixel = border_pixel;
attr.event_mask = (ExposureMask|ButtonPressMask|KeyPressMask);
! attr.cursor = XCreateFontCursor (dpy, XC_top_left_arrow);
valuemask = (CWBackPixel | CWBorderPixel | CWEventMask | CWCursor);
w = XCreateWindow (dpy, root,
--- 435,441 ----
attr.background_pixel = back_pixel;
attr.border_pixel = border_pixel;
attr.event_mask = (ExposureMask|ButtonPressMask|KeyPressMask);
! attr.cursor = XCreateFontCursor (dpy, XC_draft_small);
valuemask = (CWBackPixel | CWBorderPixel | CWEventMask | CWCursor);
w = XCreateWindow (dpy, root,
***************
*** 608,614 ****
if (!image) return (False);
/*
! * Map the window and do the work. Button press or space means do another;
* q, Q, or ^C mean quit.
*/
--- 610,617 ----
if (!image) return (False);
/*
! * Map the window and do the work. Space means do another;
! * Button1 press displays pixel value.
* q, Q, or ^C mean quit.
*/
***************
*** 617,623 ****
XMapWindow (dpy, w);
for (done = False; !done; ) {
XEvent event;
! int len;
char keybuffer[10];
XNextEvent (dpy, &event);
--- 620,629 ----
XMapWindow (dpy, w);
for (done = False; !done; ) {
XEvent event;
! XButtonEvent *buttevent;
! XColor def;
! unsigned long pixel,lastpix;
! int len,first;
char keybuffer[10];
XNextEvent (dpy, &event);
***************
*** 626,634 ****
repaint_image (image, &event, magnification, back_pixel);
break;
case ButtonPress:
! domore = True;
! done = True;
break;
case KeyPress:
len = XLookupString (&event, keybuffer, sizeof keybuffer,
NULL, NULL);
--- 632,673 ----
repaint_image (image, &event, magnification, back_pixel);
break;
case ButtonPress:
! buttevent = (XButtonEvent *) &event;
! if (buttevent->button != Button1) break; /* not Button1. fnord */
! first=1;
! if (buttevent->y/magnification > height/2) CreatePixWind(w,0);
! else CreatePixWind(w,1);
! while (1) { /* loop until button released */
! Window rootW,childW;
! int rx,ry,x,y,lx,ly;
! unsigned int mask;
! char str[64];
!
! if (XQueryPointer(dpy,w,&rootW,&childW,&rx,&ry,&x,&y,&mask)) {
! if (!(mask & Button1Mask)) break; /* button released */
!
! x=x/magnification; y=y/magnification;
!
! if ( (first || x!=lx || y!=ly) &&
! (x>=0 && x=0 && yfid);
+
+ thigh = pixfinfo->ascent + pixfinfo->descent + 4;
+ if (bot) y=h-thigh; else y=0;
+
+ pixwind = XCreateSimpleWindow(dpy, wind, 0, y, w, thigh, 0,0,0);
+
+ XMapWindow(dpy,pixwind);
+ }
+
+
+ DrawPixWind(str)
+ char *str;
+ {
+ XClearWindow(dpy,pixwind);
+ XSetForeground(dpy,fillGC,1);
+ XDrawString(dpy,pixwind,fillGC,4,2+pixfinfo->ascent,str,strlen(str));
+ }
+
+
+ ClosePixWind()
+ {
+ XDestroyWindow(dpy,pixwind);
+ XFreeFont(dpy,pixfinfo);
+ }
+