Blame tests/Auto/lib/Visual/visual/CompPixmap.c

Packit b099d7
/* 
Packit b099d7
 * Motif
Packit b099d7
 *
Packit b099d7
 * Copyright (c) 1987-2012, The Open Group. All rights reserved.
Packit b099d7
 *
Packit b099d7
 * These libraries and programs are free software; you can
Packit b099d7
 * redistribute them and/or modify them under the terms of the GNU
Packit b099d7
 * Lesser General Public License as published by the Free Software
Packit b099d7
 * Foundation; either version 2 of the License, or (at your option)
Packit b099d7
 * any later version.
Packit b099d7
 *
Packit b099d7
 * These libraries and programs are distributed in the hope that
Packit b099d7
 * they will be useful, but WITHOUT ANY WARRANTY; without even the
Packit b099d7
 * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
Packit b099d7
 * PURPOSE. See the GNU Lesser General Public License for more
Packit b099d7
 * details.
Packit b099d7
 *
Packit b099d7
 * You should have received a copy of the GNU Lesser General Public
Packit b099d7
 * License along with these librararies and programs; if not, write
Packit b099d7
 * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
Packit b099d7
 * Floor, Boston, MA 02110-1301 USA
Packit b099d7
*/ 
Packit b099d7
/* 
Packit b099d7
 * HISTORY
Packit b099d7
*/ 
Packit b099d7
#ifdef REV_INFO
Packit b099d7
#ifndef lint
Packit b099d7
static char rcsid[] = "$XConsortium: CompPixmap.c /main/10 1996/10/07 14:57:02 drk $"
Packit b099d7
#endif
Packit b099d7
#endif
Packit b099d7
/***********************************************************************
Packit b099d7
  	@(#)CompPixmap.c	1.8.1.1	Date:1/22/91
Packit b099d7
  	Author: TAT
Packit b099d7
	History:
Packit b099d7
            05/24/90 SJS add to sccs
Packit b099d7
	Calls:
Packit b099d7
Packit b099d7
	Summary:
Packit b099d7
            Compares the pixmap and dumps all errors to stdout.
Packit b099d7
Packit b099d7
        INPUTS:
Packit b099d7
            widget - the widget whose image needs comparing
Packit b099d7
Packit b099d7
        OUTPUTS:
Packit b099d7
            none
Packit b099d7
Packit b099d7
        RETURNS:
Packit b099d7
            nothing
Packit b099d7
************************************************************************/
Packit b099d7
Packit b099d7
#include <AutoMessages.h>
Packit b099d7
#include "vislib.h"
Packit b099d7
#include "xislib.h"
Packit b099d7
#include "mvslib.h"
Packit b099d7
Packit b099d7
static  void DumpWindow();
Packit b099d7
Packit b099d7
extern  Boolean AutoFullOutput;
Packit b099d7
extern  Boolean AutoTrace;
Packit b099d7
extern  Boolean AutoWindowDumps;
Packit b099d7
Packit b099d7
extern	void    AutoError();
Packit b099d7
extern  void 	AutoSystem();
Packit b099d7
extern  void	AutoTraceMsg();
Packit b099d7
Packit b099d7
extern  void    mvsGetWidgetColors();
Packit b099d7
Packit b099d7
void mvsComparePixmapBatch(widget_info)
Packit b099d7
MvsWidgetInfoRecord  *widget_info;
Packit b099d7
{
Packit b099d7
    int x,y,begin_x, begin_y, n;
Packit b099d7
    Arg args[1];
Packit b099d7
    XImage *image = NULL;			
Packit b099d7
    Pixmap bpack_pix = 0L;
Packit b099d7
    Widget widget;
Packit b099d7
    /* The length of the widget_name used to be 15 but in some
Packit b099d7
       tests I ran, the widget name had an entire directory path
Packit b099d7
       prepended to it and was much more than 15. 256 seems like
Packit b099d7
       a safe number. -- rgcote 7/29/93 */
Packit b099d7
    char widget_name[256];
Packit b099d7
    char *name = NULL;
Packit b099d7
    int widget_class_code;
Packit b099d7
    unsigned int checksum,checksum2;
Packit b099d7
    unsigned char *bp;  /* byte pointer */
Packit b099d7
    unsigned short border_width, width,height;
Packit b099d7
    short curpixel;
Packit b099d7
    Pixel matchpixel;
Packit b099d7
    short found_error = False;
Packit b099d7
    short no_widget_info = False;
Packit b099d7
    MvsWidgetClassInfo *wcinfo2;
Packit b099d7
    MvsWidgetInfoRecord *winfo, *winfo2;
Packit b099d7
    MvsArgVal *mvs_resources2;
Packit b099d7
    short color_ref;
Packit b099d7
    short done;
Packit b099d7
    MvsWidgetInfoRecord *winfo_stack[100];
Packit b099d7
    XisObjectRecord *tmp_object;
Packit b099d7
    MvsWidgetInfoRecord *tmp_info = NULL;
Packit b099d7
    MvsWidgetInfoRecord *gad_info = NULL;
Packit b099d7
    Widget tmp_widget = NULL;
Packit b099d7
    short stack_top = 0;
Packit b099d7
    int temp_x, temp_y, temp_width, temp_height, temp_bw, revert;
Packit b099d7
    static unsigned int newhashid = 0;
Packit b099d7
    Window focus_window;
Packit b099d7
    Boolean possible_gad_color = False;
Packit b099d7
    Boolean first_fail_time = True;
Packit b099d7
    struct _MvsUniqueColorAllocInfoRecord2 
Packit b099d7
			*widget_unique_color_info;
Packit b099d7
    struct _MvsUniqueColorAllocInfoRecord2 
Packit b099d7
			*gad_unique_color_info;
Packit b099d7
    char msg_string[100];
Packit b099d7
    Pixmap back_pix=0L;
Packit b099d7
    Boolean foreign_obj = False;
Packit b099d7
Packit b099d7
    xisProcessObjects();
Packit b099d7
    xisUpdateObjectAttributes();
Packit b099d7
Packit b099d7
    XGetInputFocus(mvsDisplay, &focus_window, &revert);
Packit b099d7
Packit b099d7
    /* Do depth first traversal to register any newly seen pixmaps */
Packit b099d7
    /* and to load latest x,y,width,height information             */
Packit b099d7
    /* Be sure also the widget has the latest color values         */
Packit b099d7
Packit b099d7
    widget = widget_info->widget;
Packit b099d7
    strcpy(widget_name, XtName(widget));
Packit b099d7
Packit b099d7
    winfo = widget_info;
Packit b099d7
 
Packit b099d7
    done = 0;
Packit b099d7
    while (!done) {
Packit b099d7
Packit b099d7
        temp_x = winfo->x;
Packit b099d7
        temp_y = winfo->y;
Packit b099d7
        temp_height = winfo->height;
Packit b099d7
        temp_width = winfo->width;
Packit b099d7
        temp_bw = winfo->border_width;
Packit b099d7
        mvsGetWidgetGeometry(winfo->widget, &temp_x,&temp_y,&temp_width,
Packit b099d7
                             &temp_height, &temp_bw   );
Packit b099d7
        winfo->x = temp_x;
Packit b099d7
        winfo->y = temp_y;
Packit b099d7
        winfo->height = temp_height;
Packit b099d7
        winfo->width = temp_width;
Packit b099d7
        winfo->border_width = temp_bw;
Packit b099d7
Packit b099d7
        mvsGetWidgetColors(winfo);
Packit b099d7
Packit b099d7
        if (winfo->first_child != NULL) {
Packit b099d7
            winfo_stack[stack_top++] = winfo;
Packit b099d7
            winfo = (MvsWidgetInfoRecord *)winfo->first_child;
Packit b099d7
        }
Packit b099d7
        else 
Packit b099d7
            if (winfo->next_sibling != NULL)
Packit b099d7
                winfo = (MvsWidgetInfoRecord *)winfo->next_sibling;
Packit b099d7
            else {
Packit b099d7
                winfo = NULL;
Packit b099d7
                while (stack_top > 0 && winfo == NULL)
Packit b099d7
                    winfo = (MvsWidgetInfoRecord *)
Packit b099d7
                                  winfo_stack[--stack_top]->next_sibling;
Packit b099d7
Packit b099d7
                if (stack_top == 0)
Packit b099d7
                    done = 1;
Packit b099d7
            } 
Packit b099d7
    } /* End while(!done) */
Packit b099d7
Packit b099d7
    if (newhashid == mvsNumRecIds || 
Packit b099d7
    			fseek(mvsImageFd,mvsFilePos[newhashid++],0) != 0)
Packit b099d7
        AutoMessage(_AutoMessages[WARNMSG11]);
Packit b099d7
Packit b099d7
    else {
Packit b099d7
        VIS_trace("#### Found image in recid #%d\n",newhashid);
Packit b099d7
Packit b099d7
        if (fread_long(mvsImageFd) != mvsImageRecordStartCode) {
Packit b099d7
	    sprintf (msg_string, _AutoMessages[WARNMSG12],"");
Packit b099d7
	    AutoMessage (msg_string);
Packit b099d7
            AutoMessage(_AutoMessages[WARNMSG13]);
Packit b099d7
        }
Packit b099d7
        else {
Packit b099d7
            checksum = fread_long(mvsImageFd);
Packit b099d7
Packit b099d7
            width = fread_short(mvsImageFd);
Packit b099d7
            height = fread_short(mvsImageFd);
Packit b099d7
Packit b099d7
            if ((width != widget_info->width + 2*widget_info->border_width)||
Packit b099d7
                (height != widget_info->height + 2*widget_info->border_width)) {
Packit b099d7
	           sprintf (msg_string, _AutoMessages[VISMSG6], 
Packit b099d7
			    width,height,
Packit b099d7
			    widget_info->width + 2*widget_info->border_width,
Packit b099d7
			    widget_info->height + 2*widget_info->border_width,
Packit b099d7
			    widget_name);
Packit b099d7
		   AutoMessage (msg_string);
Packit b099d7
                    
Packit b099d7
            }
Packit b099d7
            else {
Packit b099d7
                mvsDecompressRead(mvsImageFd,mvsImageBuffer,width*height);
Packit b099d7
Packit b099d7
                /* check checksum */
Packit b099d7
Packit b099d7
                checksum2 = 0;
Packit b099d7
                bp = &mvsImageBuffer[0];
Packit b099d7
                for (y=0; y
Packit b099d7
                    for (x=0; x
Packit b099d7
                        checksum2 += (x+1)*(y+1)*(*bp);
Packit b099d7
                        bp++;
Packit b099d7
                    }
Packit b099d7
                }
Packit b099d7
Packit b099d7
                if (checksum != checksum2) {
Packit b099d7
		    sprintf (msg_string, _AutoMessages[WARNMSG121], 
Packit b099d7
			     widget_name);
Packit b099d7
                    AutoMessage (msg_string);
Packit b099d7
		    AutoMessage (_AutoMessages[WARNMSG123]);
Packit b099d7
		    
Packit b099d7
Packit b099d7
                }
Packit b099d7
                else {
Packit b099d7
Packit b099d7
/*
Packit b099d7
   		    get border width and subtract from the the current
Packit b099d7
		    x and y. In GenPixmap() this done through Translate
Packit b099d7
    		    Coordinates. A better fix maybe to put this in 
Packit b099d7
		    mvsGetSubObjects() so that x and y returned include
Packit b099d7
		    the border_width. 
Packit b099d7
*/
Packit b099d7
Packit b099d7
		    border_width = widget_info->border_width;
Packit b099d7
		  
Packit b099d7
                    x = widget_info->x - border_width;
Packit b099d7
                    y = widget_info->y - border_width;
Packit b099d7
Packit b099d7
                    image = XGetImage(visDisplay,DefaultRootWindow(visDisplay),
Packit b099d7
                                      x,y,width,height,AllPlanes, ZPixmap);
Packit b099d7
Packit b099d7
		    begin_x = x;
Packit b099d7
		    begin_y = y;
Packit b099d7
Packit b099d7
                    if (image == 0) {
Packit b099d7
		        sprintf (msg_string, _AutoMessages[VISMSG7], 
Packit b099d7
				 widget_name);
Packit b099d7
                        AutoError (msg_string);
Packit b099d7
				 
Packit b099d7
Packit b099d7
                    }
Packit b099d7
Packit b099d7
                    /* Compare images pixel by pixel */
Packit b099d7
Packit b099d7
                    bp = (&mvsImageBuffer[0]);
Packit b099d7
Packit b099d7
                    for (y=0; y
Packit b099d7
                        for (x=0; x
Packit b099d7
Packit b099d7
                            /* Get normalized (canonical) color */
Packit b099d7
Packit b099d7
			    foreign_obj = False;
Packit b099d7
Packit b099d7
		    	    tmp_object = xisFindObjectAtLocation(begin_x + x,
Packit b099d7
								 begin_y + y);
Packit b099d7
Packit b099d7
			    if (tmp_object == NULL) {
Packit b099d7
				if (AutoFullOutput) {
Packit b099d7
				   foreign_obj = True;
Packit b099d7
				   sprintf (msg_string, _AutoMessages[VISMSG8],
Packit b099d7
					     widget_name, x,y);
Packit b099d7
                                   AutoMessage(msg_string);
Packit b099d7
                                    	    
Packit b099d7
				   break;
Packit b099d7
				}
Packit b099d7
				else {
Packit b099d7
				   
Packit b099d7
				    sprintf(msg_string, 
Packit b099d7
					   _AutoMessages[VISMSG34],
Packit b099d7
					  widget_name); 
Packit b099d7
			    	   AutoMessage(msg_string);
Packit b099d7
				   break;
Packit b099d7
				}
Packit b099d7
			    }
Packit b099d7
Packit b099d7
			    if (foreign_obj)
Packit b099d7
				break;
Packit b099d7
Packit b099d7
		    	    tmp_widget = tmp_object->id.widget;
Packit b099d7
Packit b099d7
			    if (tmp_widget != NULL) 
Packit b099d7
			       widget_class_code  = mvsGetClassCode(tmp_widget);
Packit b099d7
			    else {
Packit b099d7
			       /* If the widget is NULL, we may be looking at
Packit b099d7
				  a pixel on the root window. If so, then
Packit b099d7
				  we really don't care whether the pixel matches
Packit b099d7
				  so dump the pixel as PASS and just continue
Packit b099d7
				  the loop. */
Packit b099d7
			       if (tmp_object->id.window ==
Packit b099d7
				   DefaultRootWindow(visDisplay))
Packit b099d7
			       {
Packit b099d7
				   bp++;
Packit b099d7
				   continue;
Packit b099d7
			       }
Packit b099d7
			       else
Packit b099d7
			       {
Packit b099d7
				   /* Otherwise we found a real error. Log an
Packit b099d7
				      error message and quit the loop */
Packit b099d7
				   sprintf(msg_string, _AutoMessages[VISMSG46],
Packit b099d7
					   x, y);
Packit b099d7
				   AutoMessage(msg_string);
Packit b099d7
				   break;
Packit b099d7
			       }
Packit b099d7
			    }
Packit b099d7
Packit b099d7
			    if (XmIsGadget(tmp_widget) && 
Packit b099d7
				(widget_class_code 
Packit b099d7
					== mvsXmPushButtonGadgetClass ||
Packit b099d7
				 widget_class_code
Packit b099d7
					== mvsXmToggleButtonGadgetClass)) {
Packit b099d7
				gad_info = mvsWidgetToWidgetInfo(tmp_widget);
Packit b099d7
				gad_unique_color_info =
Packit b099d7
					gad_info->widgetUniqueColorInfo;
Packit b099d7
				possible_gad_color = True;
Packit b099d7
			    }
Packit b099d7
Packit b099d7
			    /* If the object is a gadget then find parent
Packit b099d7
			       of the gadget and use it */
Packit b099d7
				
Packit b099d7
			    while (XmIsGadget(tmp_widget) &&
Packit b099d7
				   widget_class_code != mvsXmIconGadgetClass)
Packit b099d7
				tmp_widget = XtParent(tmp_widget);
Packit b099d7
Packit b099d7
		    	    tmp_info = mvsWidgetToWidgetInfo(tmp_widget);
Packit b099d7
Packit b099d7
                            curpixel = *bp;
Packit b099d7
Packit b099d7
			    /* check if alloced too many colors per widget */
Packit b099d7
                            if (curpixel >= MAX_UNIQUE_COLORS) {
Packit b099d7
			        sprintf (msg_string, _AutoMessages[VISMSG23]);
Packit b099d7
				found_error = True;
Packit b099d7
			    }
Packit b099d7
Packit b099d7
			    if (tmp_info == NULL)
Packit b099d7
			    {
Packit b099d7
				if (no_widget_info == False)
Packit b099d7
				{
Packit b099d7
				    /* We only want to log this message once
Packit b099d7
				       into the output file. Doing it on every
Packit b099d7
				       pixel of the offending widget will degrade
Packit b099d7
				       performance too much. */
Packit b099d7
				    no_widget_info = True;
Packit b099d7
				    sprintf(msg_string, _AutoMessages[VISMSG47], 
Packit b099d7
					    XtName(tmp_widget));
Packit b099d7
				    AutoMessage(msg_string);
Packit b099d7
				    found_error = True; /* because we couldn't find
Packit b099d7
							   enough info to fix the
Packit b099d7
							   pixel */
Packit b099d7
				}
Packit b099d7
				/* We can't normalize matchpixel, but at least
Packit b099d7
				   give it a value. */
Packit b099d7
				matchpixel = curpixel;
Packit b099d7
			    }
Packit b099d7
			    else
Packit b099d7
			    {
Packit b099d7
			      if (curpixel < MAX_UNIQUE_COLORS) {
Packit b099d7
				widget_unique_color_info = 
Packit b099d7
				  tmp_info->widgetUniqueColorInfo;
Packit b099d7
				
Packit b099d7
				/* Convert to expected color "match_pixel" */
Packit b099d7
				winfo2 = 
Packit b099d7
				  widget_unique_color_info[curpixel].widget_info;
Packit b099d7
Packit b099d7
				if (winfo2 == NULL)
Packit b099d7
				{
Packit b099d7
				    found_error = True; /* because we couldn't find
Packit b099d7
							   enough info to fix the
Packit b099d7
							   pixel */
Packit b099d7
				    /* We can't normalize matchpixel, but at least
Packit b099d7
				       give it a value. */
Packit b099d7
				    matchpixel = curpixel;
Packit b099d7
				}
Packit b099d7
				else {
Packit b099d7
				    wcinfo2 = winfo2->widget_class_info;
Packit b099d7
				    color_ref =
Packit b099d7
				      widget_unique_color_info[curpixel].color_ref;
Packit b099d7
				    mvs_resources2 = winfo2->mvs_resources;
Packit b099d7
				    matchpixel = (Pixel)
Packit b099d7
				      mvs_resources2[wcinfo2->res_color_ref[color_ref]];
Packit b099d7
Packit b099d7
				}
Packit b099d7
			      } 
Packit b099d7
			    }
Packit b099d7
Packit b099d7
	       /* If you dont receive a match it may be that the widget
Packit b099d7
		  does not have the highlight from the parent. If this
Packit b099d7
		  is the case then use the background color of the parent 
Packit b099d7
		  to satisfy the highlight color */
Packit b099d7
Packit b099d7
Packit b099d7
                if (XGetPixel(image,x,y) != matchpixel && 
Packit b099d7
		    (curpixel < MAX_UNIQUE_COLORS) &&
Packit b099d7
		    focus_window != XtWindowOfObject(tmp_widget)) {
Packit b099d7
			tmp_widget = XtParent(tmp_widget);
Packit b099d7
			tmp_info = mvsWidgetToWidgetInfo(tmp_widget);
Packit b099d7
			if (tmp_info != NULL) {
Packit b099d7
                            widget_unique_color_info =
Packit b099d7
                                tmp_info->widgetUniqueColorInfo;
Packit b099d7
			    color_ref = 
Packit b099d7
				widget_unique_color_info[curpixel].color_ref;
Packit b099d7
                            winfo2 = 
Packit b099d7
				widget_unique_color_info[curpixel].widget_info;
Packit b099d7
			}
Packit b099d7
			else
Packit b099d7
				found_error = True; /* because we couldn't find
Packit b099d7
						       enough info to fix the
Packit b099d7
						       pixel */
Packit b099d7
Packit b099d7
			/* 
Packit b099d7
			   If the current pixel cannot be found on the parent
Packit b099d7
			   then we know that there is a failure within the
Packit b099d7
			   widget itself. 
Packit b099d7
			*/
Packit b099d7
Packit b099d7
			if (tmp_info != NULL && winfo2 != NULL) {
Packit b099d7
                       	    	wcinfo2 = winfo2->widget_class_info;
Packit b099d7
                        	mvs_resources2 = winfo2->mvs_resources;
Packit b099d7
				name = wcinfo2->resource_info[wcinfo2->res_color_ref[color_ref]].name;
Packit b099d7
Packit b099d7
				n = 0;
Packit b099d7
				XtSetArg(args[n], XmNbackgroundPixmap,
Packit b099d7
					 &back_pix); n++;
Packit b099d7
				XtGetValues(tmp_widget, args, n);
Packit b099d7
Packit b099d7
			/* Only get matchpixel if the pixel you are looking at
Packit b099d7
			   is the background color of the parent to see if it
Packit b099d7
                           matches the highlightColor of the "Picture" widget.
Packit b099d7
			   No way to find highlightColor of the widget */
Packit b099d7
Packit b099d7
				if (strcmp("background", name) == 0)
Packit b099d7
			  		matchpixel = (Pixel)
Packit b099d7
					  mvs_resources2[wcinfo2->res_color_ref[color_ref]];
Packit b099d7
				else {
Packit b099d7
				   if (back_pix != 0L) {
Packit b099d7
				       if (strcmp("foreground", name) == 0 ||
Packit b099d7
					   strcmp("bottomShadowColor", name) == 0 ||
Packit b099d7
					   strcmp("topShadowColor", name) == 0)
Packit b099d7
					       matchpixel = (Pixel)
Packit b099d7
						   mvs_resources2[wcinfo2->res_color_ref[color_ref]];
Packit b099d7
				   }
Packit b099d7
				}
Packit b099d7
			}
Packit b099d7
		}
Packit b099d7
Packit b099d7
                if (XGetPixel(image,x,y) != matchpixel && 
Packit b099d7
		    (curpixel < MAX_UNIQUE_COLORS) &&
Packit b099d7
		    possible_gad_color) {
Packit b099d7
			color_ref = 
Packit b099d7
				gad_unique_color_info[curpixel].color_ref;
Packit b099d7
                        winfo2 = 
Packit b099d7
				gad_unique_color_info[curpixel].widget_info;
Packit b099d7
Packit b099d7
			/* 
Packit b099d7
			   If the current pixel cannot be found on the parent
Packit b099d7
			   then we know that there is a failure within the
Packit b099d7
			   widget itself. 
Packit b099d7
			*/
Packit b099d7
Packit b099d7
			if (winfo2 == NULL)
Packit b099d7
				found_error = True; /* because we couldn't find
Packit b099d7
						       enough info to fix the
Packit b099d7
						       pixel */
Packit b099d7
			else {
Packit b099d7
			    int k, num_colors;
Packit b099d7
			    Pixel image_pixel;
Packit b099d7
Packit b099d7
			    wcinfo2 = winfo2->widget_class_info;
Packit b099d7
			    mvs_resources2 = winfo2->mvs_resources;
Packit b099d7
			    num_colors = wcinfo2->num_res_colors;
Packit b099d7
		       
Packit b099d7
			    image_pixel = XGetPixel(image, x, y);
Packit b099d7
Packit b099d7
			    for (k = 0; k < num_colors; k++) {
Packit b099d7
			     if (wcinfo2->res_color_ref[k] >= 0) {
Packit b099d7
Packit b099d7
			       name = wcinfo2->resource_info[wcinfo2->res_color_ref[k]].name;
Packit b099d7
Packit b099d7
			/* Only get matchpixel if the pixel you are looking at
Packit b099d7
			   is the armcolor (in case of PushButtonGadget)
Packit b099d7
			   and selectColor (in case of ToggleButtonGadget) */
Packit b099d7
Packit b099d7
			       if ((strcmp("selectColor", name) == 0 ||
Packit b099d7
				    strcmp("unselectColor", name) == 0) &&
Packit b099d7
				   widget_class_code == 
Packit b099d7
				        mvsXmToggleButtonGadgetClass)
Packit b099d7
				    if (image_pixel == (Pixel)
Packit b099d7
				                       mvs_resources2[wcinfo2->res_color_ref[k]])
Packit b099d7
					matchpixel = (Pixel)
Packit b099d7
					    mvs_resources2[wcinfo2->res_color_ref[k]];
Packit b099d7
				if (strcmp("armColor", name ) == 0 &&
Packit b099d7
				    widget_class_code ==
Packit b099d7
				    mvsXmPushButtonGadgetClass)
Packit b099d7
				    matchpixel = (Pixel)
Packit b099d7
					mvs_resources2[wcinfo2->res_color_ref[k]];
Packit b099d7
			     }
Packit b099d7
			    }
Packit b099d7
			}
Packit b099d7
		}
Packit b099d7
Packit b099d7
                            /* Compare expected "match_pixel" with 
Packit b099d7
			       actual pixel */
Packit b099d7
Packit b099d7
                            if (XGetPixel(image,x,y) != matchpixel) {
Packit b099d7
                                found_error = True; /* because of pixel
Packit b099d7
						       mismatch */
Packit b099d7
				if (AutoFullOutput) {
Packit b099d7
					if (first_fail_time && AutoWindowDumps){
Packit b099d7
						DumpWindow(widget);
Packit b099d7
						first_fail_time = False;
Packit b099d7
					}
Packit b099d7
					sprintf (msg_string, 
Packit b099d7
						 _AutoMessages[VISMSG10],
Packit b099d7
						 widget_name, x,y,matchpixel,
Packit b099d7
						 XGetPixel(image,x,y)); 
Packit b099d7
Packit b099d7
                                	AutoMessage(msg_string);
Packit b099d7
Packit b099d7
				}
Packit b099d7
                            }
Packit b099d7
                            bp++;
Packit b099d7
                        }
Packit b099d7
                    }
Packit b099d7
                }
Packit b099d7
            }
Packit b099d7
            if (found_error) {
Packit b099d7
		sprintf(msg_string, 
Packit b099d7
			_AutoMessages[VISMSG35],
Packit b099d7
			widget_name); 
Packit b099d7
                AutoMessage(msg_string);
Packit b099d7
	    }
Packit b099d7
            if (image != NULL)
Packit b099d7
                XDestroyImage(image);
Packit b099d7
        }
Packit b099d7
    }
Packit b099d7
Packit b099d7
} /* End mvsComparePixmapBatch() */
Packit b099d7
Packit b099d7
Packit b099d7
static void DumpWindow(widget)
Packit b099d7
Widget widget;
Packit b099d7
Packit b099d7
{
Packit b099d7
    char trace_msg[100];
Packit b099d7
    char file_string[25];
Packit b099d7
    char window_string[25];
Packit b099d7
    char *send_string[6];
Packit b099d7
    static int num_failure = 0;
Packit b099d7
Packit b099d7
    sprintf(file_string, "%s_fail%d", mvsTestName, num_failure++);
Packit b099d7
    sprintf(window_string, "%ld", XtWindow(widget));
Packit b099d7
Packit b099d7
    send_string[0] = "xwd";
Packit b099d7
    send_string[1] = "-id";
Packit b099d7
    send_string[2] = window_string;
Packit b099d7
    send_string[3] = "-out";
Packit b099d7
    send_string[4] = file_string;
Packit b099d7
    send_string[5] = (char *) 0;
Packit b099d7
Packit b099d7
    if (AutoTrace) {
Packit b099d7
	sprintf(trace_msg, "DumpWindow: xwd -id %s -out %s for widget %s",
Packit b099d7
		  window_string, file_string, XtName(widget));
Packit b099d7
	AutoTraceMsg(trace_msg);
Packit b099d7
    }
Packit b099d7
	
Packit b099d7
    AutoSystem("xwd", send_string);
Packit b099d7
Packit b099d7
}
Packit b099d7
Packit b099d7
void mvsGetWidgetColors(widget_info)
Packit b099d7
MvsWidgetInfoRecord  *widget_info;
Packit b099d7
{
Packit b099d7
Packit b099d7
    int i;
Packit b099d7
    Arg color_args[10];
Packit b099d7
    Cardinal num_args;
Packit b099d7
    MvsResourceInfoRecord *resource_info;
Packit b099d7
    int num_res_colors;
Packit b099d7
    short *res_color_ref;
Packit b099d7
Packit b099d7
    num_args = 0;
Packit b099d7
    resource_info = widget_info->widget_class_info->resource_info;
Packit b099d7
    num_res_colors = widget_info->widget_class_info->num_res_colors;
Packit b099d7
    res_color_ref = widget_info->widget_class_info->res_color_ref;
Packit b099d7
Packit b099d7
    for (i = 0; i < num_res_colors; i++) {
Packit b099d7
	if (res_color_ref[i] >= 0) {
Packit b099d7
	    XtSetArg(color_args[num_args], 
Packit b099d7
		     resource_info[res_color_ref[i]].name,
Packit b099d7
		     &widget_info->mvs_resources[res_color_ref[i]]);
Packit b099d7
	    num_args++;
Packit b099d7
	}
Packit b099d7
    }
Packit b099d7
Packit b099d7
    XtGetValues(widget_info->widget, color_args, num_args);
Packit b099d7
}