Blame tests/Toolkit/Manager/DrawArea2.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[] = "$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
}