|
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[] = "$TOG: DrawArea2.c /main/11 1999/12/01 17:53:00 jff $"
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* (c) Copyright 1987, 1988, 1989 HEWLETT-PACKARD COMPANY */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/****************************************
|
|
Packit |
b099d7 |
* Automatic test program generation *
|
|
Packit |
b099d7 |
* Version 1.2 *
|
|
Packit |
b099d7 |
* Wed Apr 5 09:33:51 1989 *
|
|
Packit |
b099d7 |
****************************************/
|
|
Packit |
b099d7 |
#include <X11/Xlib.h>
|
|
Packit |
b099d7 |
#include <testlib.h>
|
|
Packit |
b099d7 |
#include "DrawArea2.h"
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
void ForceResize (w, client_data, call_data)
|
|
Packit |
b099d7 |
Widget w;
|
|
Packit |
b099d7 |
XtPointer client_data, call_data;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Arg args[2];
|
|
Packit |
b099d7 |
int n;
|
|
Packit |
b099d7 |
Dimension height, width;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
XtSetArg (args[n], XmNheight, &height); n++;
|
|
Packit |
b099d7 |
XtSetArg (args[n], XmNwidth, &width); n++;
|
|
Packit |
b099d7 |
XtGetValues ((Widget) client_data, args, n);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
XtSetArg (args[n], XmNheight, height + 50); n++;
|
|
Packit |
b099d7 |
XtSetArg (args[n], XmNwidth, width + 50); n++;
|
|
Packit |
b099d7 |
XtSetValues ((Widget) client_data, args, n);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
void DrawStuff(widget, client_data, call_data)
|
|
Packit |
b099d7 |
Widget widget;
|
|
Packit |
b099d7 |
XtPointer client_data, call_data;
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XEvent *callingEvent;
|
|
Packit |
b099d7 |
XmDrawingAreaCallbackStruct *inputCallback;
|
|
Packit |
b099d7 |
static drawKeepStruct fromStruct = {0, 0, 1};
|
|
Packit |
b099d7 |
drawKeepStruct toStruct;
|
|
Packit |
b099d7 |
GC myGC;
|
|
Packit |
b099d7 |
Drawable myWindow;
|
|
Packit |
b099d7 |
XtGCMask valueMask;
|
|
Packit |
b099d7 |
XGCValues values;
|
|
Packit |
b099d7 |
Widget drawingWidget;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
int throwaway, i;
|
|
Packit |
b099d7 |
char buffer[256];
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#ifdef DEBUG
|
|
Packit |
b099d7 |
printf (" INPUT CALLBACK\n");
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
for (i = 0; i <= 255; i++)
|
|
Packit |
b099d7 |
buffer[i] = '\0';
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
drawingWidget = (Widget) DrawingArea1;
|
|
Packit |
b099d7 |
myWindow = XtWindow(drawingWidget);
|
|
Packit |
b099d7 |
if (myWindow == NULL)
|
|
Packit |
b099d7 |
{ printf ("Null window, dummy.\n");
|
|
Packit |
b099d7 |
exit (1);
|
|
Packit |
b099d7 |
};
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
values.foreground = XBlackPixel(display, 0);
|
|
Packit |
b099d7 |
values.background = XWhitePixel(display, 0);
|
|
Packit |
b099d7 |
values.line_width = 1;
|
|
Packit |
b099d7 |
valueMask = GCForeground | GCBackground | GCLineWidth;
|
|
Packit |
b099d7 |
myGC = XCreateGC(display, myWindow, valueMask, &values);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
inputCallback = (XmDrawingAreaCallbackStruct *) call_data;
|
|
Packit |
b099d7 |
callingEvent = (XEvent *) inputCallback->event;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (callingEvent != NULL)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
/* do the work on a release only */
|
|
Packit |
b099d7 |
if (callingEvent->xbutton.type == ButtonRelease)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
/* ok, we're gonna fill out the toStruct with info from event*/
|
|
Packit |
b099d7 |
toStruct.xpos = callingEvent->xkey.x;
|
|
Packit |
b099d7 |
toStruct.ypos = callingEvent->xkey.y;
|
|
Packit |
b099d7 |
toStruct.whichButton = callingEvent->xbutton.button;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* if it's a button1 event, draw the line */
|
|
Packit |
b099d7 |
if (toStruct.whichButton == 1)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XDrawLine (display, myWindow, myGC, fromStruct.xpos,
|
|
Packit |
b099d7 |
fromStruct.ypos,
|
|
Packit |
b099d7 |
toStruct.xpos,
|
|
Packit |
b099d7 |
toStruct.ypos);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
fromStruct.xpos = toStruct.xpos;
|
|
Packit |
b099d7 |
fromStruct.ypos = toStruct.ypos;
|
|
Packit |
b099d7 |
fromStruct.whichButton = toStruct.whichButton;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
if (callingEvent->xkey.type == KeyPress) {
|
|
Packit |
b099d7 |
XLookupString ((XKeyEvent *) callingEvent,
|
|
Packit |
b099d7 |
buffer,
|
|
Packit |
b099d7 |
sizeof (buffer),
|
|
Packit |
b099d7 |
NULL,
|
|
Packit |
b099d7 |
NULL);
|
|
Packit |
b099d7 |
printf ("Received keypress event for %s (0x%x)\n",
|
|
Packit |
b099d7 |
buffer, buffer[0]);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{ printf ("Hmm, the event seems to be NULL.");
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Deallocate the Graphics Context. */
|
|
Packit |
b099d7 |
XFreeGC( display, myGC );
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
void DrawAction (w, event, params, num_params)
|
|
Packit |
b099d7 |
Widget w;
|
|
Packit |
b099d7 |
XEvent *event;
|
|
Packit |
b099d7 |
String *params;
|
|
Packit |
b099d7 |
Cardinal *num_params;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
static XmDrawingAreaCallbackStruct cb;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
cb.reason = XmCR_INPUT;
|
|
Packit |
b099d7 |
cb.event = event;
|
|
Packit |
b099d7 |
cb.window = XtWindow(w);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
DrawStuff (w, NULL, &cb;;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
void ExposeRoutine(w,d1,d2)
|
|
Packit |
b099d7 |
Widget w;
|
|
Packit |
b099d7 |
XtPointer d1;
|
|
Packit |
b099d7 |
XtPointer d2;
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
printf ("An expose event has been generated\n");
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
void HelpRoutine(w,d1,d2)
|
|
Packit |
b099d7 |
Widget w;
|
|
Packit |
b099d7 |
XtPointer d1;
|
|
Packit |
b099d7 |
XtPointer d2;
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
printf ("An help event has been generated\n");
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
void
|
|
Packit |
b099d7 |
ResizeRoutine(widget, client_data, call_data)
|
|
Packit |
b099d7 |
Widget widget;
|
|
Packit |
b099d7 |
XtPointer call_data, client_data;
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
printf ("The resizeCallback was called.\n");
|
|
Packit |
b099d7 |
if ((((XmDrawingAreaCallbackStruct *) call_data)->event) == NULL)
|
|
Packit |
b099d7 |
printf ("The event is NULL. This is expected.\n");
|
|
Packit |
b099d7 |
else printf ("The event is not NULL! This is an ERROR.\n");
|
|
Packit |
b099d7 |
/* begin test for PIR 4107 */
|
|
Packit |
b099d7 |
if (widget == NULL)
|
|
Packit |
b099d7 |
printf ("The widget is NULL! This is an ERROR.\n");
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
printf ("The widget value is not NULL. This is expected.\n");
|
|
Packit |
b099d7 |
/* end test for PIR 4107 */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
fflush (stdout);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
void FocusRoutine(w,d1,d2)
|
|
Packit |
b099d7 |
Widget w;
|
|
Packit |
b099d7 |
XtPointer d1;
|
|
Packit |
b099d7 |
XtPointer d2;
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
printf ("An focus event has been generated\n");
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
void main (argc, argv)
|
|
Packit |
b099d7 |
int argc;
|
|
Packit |
b099d7 |
char **argv;
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Boolean trace = False;
|
|
Packit |
b099d7 |
register int n;
|
|
Packit |
b099d7 |
Arg args[MAX_ARGS];
|
|
Packit |
b099d7 |
XmString tcs;
|
|
Packit |
b099d7 |
Widget BulletinBoard, PushButton, Frame;
|
|
Packit |
b099d7 |
Widget popupshell, msg_widget, DrawingArea2;
|
|
Packit |
b099d7 |
static XtActionsRec actions[] = {{ "DrawAction", DrawAction}};
|
|
Packit |
b099d7 |
static char translation_table[] = "<ButtonPress>: DrawAction()\n\
|
|
Packit |
b099d7 |
<KeyPress>: DrawAction()";
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* test for PIR 3062 (will be fixed in 1.2) */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XFontStruct *newfont;
|
|
Packit |
b099d7 |
XmFontList newfontlist;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
CommonTestInit(argc, argv);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
BulletinBoard = XmCreateBulletinBoard(Shell1, "BulletinBoard", args, n);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
PushButton = XmCreatePushButton (BulletinBoard, "PushButton", args, n);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNshadowType, XmSHADOW_ETCHED_IN); n++;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNshadowThickness, 1); n++;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNy, 40); n++;
|
|
Packit |
b099d7 |
Frame = XmCreateFrame (BulletinBoard, "Frame", args, n);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
/* the following resource currently has no effect */
|
|
Packit |
b099d7 |
/* the drawing area does not have a drawing routine to support it */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtSetArg (args[n], XmNshadowThickness, 10); n++;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtSetArg (args[n], XmNx, 0); n++;
|
|
Packit |
b099d7 |
XtSetArg (args[n], XmNy, 200); n++;
|
|
Packit |
b099d7 |
XtSetArg (args[n], XmNheight, 300); n++;
|
|
Packit |
b099d7 |
XtSetArg (args[n], XmNwidth, 300); n++;
|
|
Packit |
b099d7 |
DrawingArea1 = XmCreateDrawingArea(Frame, "DrawingArea1", args, n);
|
|
Packit |
b099d7 |
XtAddCallback (DrawingArea1, XmNexposeCallback, ExposeRoutine, NULL);
|
|
Packit |
b099d7 |
XtAddCallback (DrawingArea1, XmNinputCallback, DrawStuff, NULL);
|
|
Packit |
b099d7 |
XtAddCallback (DrawingArea1, XmNhelpCallback, HelpRoutine, NULL);
|
|
Packit |
b099d7 |
/* focus callback is not supported for Drawing Area */
|
|
Packit |
b099d7 |
/* XtAddCallback (DrawingArea1, XmNfocusCallback, FocusRoutine, NULL); */
|
|
Packit |
b099d7 |
XtAddCallback (DrawingArea1, XmNresizeCallback, ResizeRoutine, NULL);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtAddCallback (PushButton, XmNactivateCallback, ForceResize, (XtPointer)
|
|
Packit |
b099d7 |
DrawingArea1);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtManageChild(DrawingArea1);
|
|
Packit |
b099d7 |
XtManageChild(Frame);
|
|
Packit |
b099d7 |
XtManageChild(PushButton);
|
|
Packit |
b099d7 |
XtManageChild(BulletinBoard);
|
|
Packit |
b099d7 |
XtRealizeWidget(Shell1);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
CommonPause(); /* list instructions */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtRemoveCallback(DrawingArea1, XmNinputCallback, DrawStuff, NULL);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtAppAddActions(app_context, actions, 1);
|
|
Packit |
b099d7 |
XtOverrideTranslations(DrawingArea1,
|
|
Packit |
b099d7 |
XtParseTranslationTable(translation_table));
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
CommonPause();
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* start test for PIR 2772 */
|
|
Packit |
b099d7 |
/* test for P3062 */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
newfont = XLoadQueryFont(XtDisplay(Shell1), "variable");
|
|
Packit |
b099d7 |
newfontlist = XmFontListCreate(newfont, XmSTRING_DEFAULT_CHARSET);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNwidth, 200); n++;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNheight, 100); n++;
|
|
Packit |
b099d7 |
popupshell = XtCreatePopupShell("Shell2", topLevelShellWidgetClass,
|
|
Packit |
b099d7 |
Shell1, args, n);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
DrawingArea2 = XmCreateDrawingArea (popupshell, "DrawingArea2",
|
|
Packit |
b099d7 |
args, n);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNlabelString,
|
|
Packit |
b099d7 |
XmStringCreate("Put the focus in this window.",
|
|
Packit |
b099d7 |
XmSTRING_DEFAULT_CHARSET)); n++;
|
|
Packit |
b099d7 |
/* test for P3062 */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNfontList, newfontlist); n++;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
msg_widget = XmCreateLabelGadget (DrawingArea2, "msg_widget", args, n);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtManageChild(msg_widget);
|
|
Packit |
b099d7 |
XtManageChild(DrawingArea2);
|
|
Packit |
b099d7 |
XtRealizeWidget(popupshell);
|
|
Packit |
b099d7 |
XtPopup(popupshell, XtGrabNone);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
CommonPause();
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* end test for PIR 2772 */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtAppMainLoop(app_context);
|
|
Packit |
b099d7 |
}
|