|
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 |
}
|