|
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: DrawingA.c /main/16 1999/10/13 16:16:41 mgreess $"
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
/* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#ifdef HAVE_CONFIG_H
|
|
Packit |
b099d7 |
#include <config.h>
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#include <Xm/TransltnsP.h>
|
|
Packit |
b099d7 |
#include <Xm/VaSimpleP.h>
|
|
Packit |
b099d7 |
#include "DrawingAI.h"
|
|
Packit |
b099d7 |
#include "GadgetUtiI.h"
|
|
Packit |
b099d7 |
#include "GMUtilsI.h"
|
|
Packit |
b099d7 |
#include "RepTypeI.h"
|
|
Packit |
b099d7 |
#include "TraversalI.h"
|
|
Packit |
b099d7 |
#include "XmI.h"
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#define MARGIN_DEFAULT 10
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#define defaultTranslations _XmDrawingA_defaultTranslations
|
|
Packit |
b099d7 |
#define traversalTranslations _XmDrawingA_traversalTranslations
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/******** Static Function Declarations ********/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void ClassInitialize( void ) ;
|
|
Packit |
b099d7 |
static void ClassPartInitialize(
|
|
Packit |
b099d7 |
WidgetClass w_class) ;
|
|
Packit |
b099d7 |
static void Initialize(
|
|
Packit |
b099d7 |
Widget rw,
|
|
Packit |
b099d7 |
Widget nw,
|
|
Packit |
b099d7 |
ArgList args,
|
|
Packit |
b099d7 |
Cardinal *num_args) ;
|
|
Packit |
b099d7 |
static void Redisplay(
|
|
Packit |
b099d7 |
Widget wid,
|
|
Packit |
b099d7 |
XEvent *event,
|
|
Packit |
b099d7 |
Region region) ;
|
|
Packit |
b099d7 |
static void Resize(
|
|
Packit |
b099d7 |
Widget wid) ;
|
|
Packit |
b099d7 |
static XtGeometryResult GeometryManager(
|
|
Packit |
b099d7 |
Widget w,
|
|
Packit |
b099d7 |
XtWidgetGeometry *request,
|
|
Packit |
b099d7 |
XtWidgetGeometry *reply) ;
|
|
Packit |
b099d7 |
static void ChangeManaged(
|
|
Packit |
b099d7 |
Widget wid) ;
|
|
Packit |
b099d7 |
static Boolean SetValues(
|
|
Packit |
b099d7 |
Widget cw,
|
|
Packit |
b099d7 |
Widget rw,
|
|
Packit |
b099d7 |
Widget nw,
|
|
Packit |
b099d7 |
ArgList args,
|
|
Packit |
b099d7 |
Cardinal *num_args) ;
|
|
Packit |
b099d7 |
static XtGeometryResult QueryGeometry(
|
|
Packit |
b099d7 |
Widget wid,
|
|
Packit |
b099d7 |
XtWidgetGeometry *intended,
|
|
Packit |
b099d7 |
XtWidgetGeometry *desired) ;
|
|
Packit |
b099d7 |
static XmNavigability WidgetNavigable(
|
|
Packit |
b099d7 |
Widget wid) ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/******** End Static Function Declarations ********/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static XtActionsRec actionsList[] =
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
{ "DrawingAreaInput", _XmDrawingAreaInput },
|
|
Packit |
b099d7 |
};
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Resource definitions for DrawingArea
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static XtResource resources[] =
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
{ XmNmarginWidth,
|
|
Packit |
b099d7 |
XmCMarginWidth, XmRHorizontalDimension, sizeof (Dimension),
|
|
Packit |
b099d7 |
XtOffsetOf(XmDrawingAreaRec, drawing_area.margin_width),
|
|
Packit |
b099d7 |
XmRImmediate, (XtPointer) MARGIN_DEFAULT
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{ XmNmarginHeight,
|
|
Packit |
b099d7 |
XmCMarginHeight, XmRVerticalDimension, sizeof (Dimension),
|
|
Packit |
b099d7 |
XtOffsetOf(XmDrawingAreaRec, drawing_area.margin_height),
|
|
Packit |
b099d7 |
XmRImmediate, (XtPointer) MARGIN_DEFAULT
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{ XmNresizeCallback,
|
|
Packit |
b099d7 |
XmCCallback, XmRCallback, sizeof (XtCallbackList),
|
|
Packit |
b099d7 |
XtOffsetOf(XmDrawingAreaRec, drawing_area.resize_callback),
|
|
Packit |
b099d7 |
XmRImmediate, (XtPointer) NULL
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{ XmNexposeCallback,
|
|
Packit |
b099d7 |
XmCCallback, XmRCallback, sizeof (XtCallbackList),
|
|
Packit |
b099d7 |
XtOffsetOf(XmDrawingAreaRec, drawing_area.expose_callback),
|
|
Packit |
b099d7 |
XmRImmediate, (XtPointer) NULL
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{ XmNinputCallback,
|
|
Packit |
b099d7 |
XmCCallback, XmRCallback, sizeof (XtCallbackList),
|
|
Packit |
b099d7 |
XtOffsetOf(XmDrawingAreaRec, drawing_area.input_callback),
|
|
Packit |
b099d7 |
XmRImmediate, (XtPointer) NULL
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
#ifndef XM_PART_BC
|
|
Packit |
b099d7 |
{ XmNconvertCallback,
|
|
Packit |
b099d7 |
XmCCallback, XmRCallback, sizeof (XtCallbackList),
|
|
Packit |
b099d7 |
XtOffsetOf(XmDrawingAreaRec, drawing_area.convert_callback),
|
|
Packit |
b099d7 |
XmRImmediate, (XtPointer) NULL
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{ XmNdestinationCallback,
|
|
Packit |
b099d7 |
XmCCallback, XmRCallback, sizeof (XtCallbackList),
|
|
Packit |
b099d7 |
XtOffsetOf(XmDrawingAreaRec, drawing_area.destination_callback),
|
|
Packit |
b099d7 |
XmRImmediate, (XtPointer) NULL
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{ XmNresizePolicy,
|
|
Packit |
b099d7 |
XmCResizePolicy, XmRResizePolicy, sizeof (unsigned char),
|
|
Packit |
b099d7 |
XtOffsetOf(XmDrawingAreaRec, drawing_area.resize_policy),
|
|
Packit |
b099d7 |
XmRImmediate, (XtPointer) XmRESIZE_ANY
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
};
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static XmSyntheticResource syn_resources[] =
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
{ XmNmarginWidth,
|
|
Packit |
b099d7 |
sizeof (Dimension),
|
|
Packit |
b099d7 |
XtOffsetOf(XmDrawingAreaRec, drawing_area.margin_width),
|
|
Packit |
b099d7 |
XmeFromHorizontalPixels, XmeToHorizontalPixels
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{ XmNmarginHeight,
|
|
Packit |
b099d7 |
sizeof (Dimension),
|
|
Packit |
b099d7 |
XtOffsetOf(XmDrawingAreaRec, drawing_area.margin_height),
|
|
Packit |
b099d7 |
XmeFromVerticalPixels, XmeToVerticalPixels
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
};
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/****************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* Full class record constant
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
****************************************************************/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static XmBaseClassExtRec baseClassExtRec = {
|
|
Packit |
b099d7 |
NULL,
|
|
Packit |
b099d7 |
NULLQUARK,
|
|
Packit |
b099d7 |
XmBaseClassExtVersion,
|
|
Packit |
b099d7 |
sizeof(XmBaseClassExtRec),
|
|
Packit |
b099d7 |
NULL, /* InitializePrehook */
|
|
Packit |
b099d7 |
NULL, /* SetValuesPrehook */
|
|
Packit |
b099d7 |
NULL, /* InitializePosthook */
|
|
Packit |
b099d7 |
NULL, /* SetValuesPosthook */
|
|
Packit |
b099d7 |
NULL, /* secondaryObjectClass */
|
|
Packit |
b099d7 |
NULL, /* secondaryCreate */
|
|
Packit |
b099d7 |
NULL, /* getSecRes data */
|
|
Packit |
b099d7 |
{ 0 }, /* fastSubclass flags */
|
|
Packit |
b099d7 |
NULL, /* getValuesPrehook */
|
|
Packit |
b099d7 |
NULL, /* getValuesPosthook */
|
|
Packit |
b099d7 |
NULL, /* classPartInitPrehook */
|
|
Packit |
b099d7 |
NULL, /* classPartInitPosthook*/
|
|
Packit |
b099d7 |
NULL, /* ext_resources */
|
|
Packit |
b099d7 |
NULL, /* compiled_ext_resources*/
|
|
Packit |
b099d7 |
0, /* num_ext_resources */
|
|
Packit |
b099d7 |
FALSE, /* use_sub_resources */
|
|
Packit |
b099d7 |
WidgetNavigable, /* widgetNavigable */
|
|
Packit |
b099d7 |
NULL /* focusChange */
|
|
Packit |
b099d7 |
};
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
externaldef( xmdrawingareaclassrec) XmDrawingAreaClassRec
|
|
Packit |
b099d7 |
xmDrawingAreaClassRec =
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
{ /* core_class fields */
|
|
Packit |
b099d7 |
(WidgetClass) &xmManagerClassRec, /* superclass */
|
|
Packit |
b099d7 |
"XmDrawingArea", /* class_name */
|
|
Packit |
b099d7 |
sizeof(XmDrawingAreaRec), /* widget_size */
|
|
Packit |
b099d7 |
ClassInitialize, /* class_initialize */
|
|
Packit |
b099d7 |
ClassPartInitialize, /* class_part_init */
|
|
Packit |
b099d7 |
FALSE, /* class_inited */
|
|
Packit |
b099d7 |
Initialize, /* initialize */
|
|
Packit |
b099d7 |
NULL, /* initialize_hook */
|
|
Packit |
b099d7 |
XtInheritRealize, /* realize */
|
|
Packit |
b099d7 |
actionsList, /* actions */
|
|
Packit |
b099d7 |
XtNumber(actionsList), /* num_actions */
|
|
Packit |
b099d7 |
resources, /* resources */
|
|
Packit |
b099d7 |
XtNumber(resources), /* num_resources */
|
|
Packit |
b099d7 |
NULLQUARK, /* xrm_class */
|
|
Packit |
b099d7 |
TRUE, /* compress_motion */
|
|
Packit |
b099d7 |
FALSE, /* compress_exposure */
|
|
Packit |
b099d7 |
TRUE, /* compress_enterlv */
|
|
Packit |
b099d7 |
FALSE, /* visible_interest */
|
|
Packit |
b099d7 |
NULL, /* destroy */
|
|
Packit |
b099d7 |
Resize, /* resize */
|
|
Packit |
b099d7 |
Redisplay, /* expose */
|
|
Packit |
b099d7 |
SetValues, /* set_values */
|
|
Packit |
b099d7 |
NULL, /* set_values_hook */
|
|
Packit |
b099d7 |
XtInheritSetValuesAlmost, /* set_values_almost */
|
|
Packit |
b099d7 |
NULL, /* get_values_hook */
|
|
Packit |
b099d7 |
NULL, /* accept_focus */
|
|
Packit |
b099d7 |
XtVersion, /* version */
|
|
Packit |
b099d7 |
NULL, /* callback_private */
|
|
Packit |
b099d7 |
defaultTranslations, /* tm_table */
|
|
Packit |
b099d7 |
QueryGeometry, /* query_geometry */
|
|
Packit |
b099d7 |
NULL, /* display_accelerator*/
|
|
Packit |
b099d7 |
(XtPointer)&baseClassExtRec, /* extension */
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
{ /* composite_class fields */
|
|
Packit |
b099d7 |
GeometryManager, /* geometry_manager */
|
|
Packit |
b099d7 |
ChangeManaged, /* change_managed */
|
|
Packit |
b099d7 |
XtInheritInsertChild, /* insert_child */
|
|
Packit |
b099d7 |
XtInheritDeleteChild, /* delete_child */
|
|
Packit |
b099d7 |
NULL, /* extension */
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{ /* constraint_class fields */
|
|
Packit |
b099d7 |
NULL, /* resource list */
|
|
Packit |
b099d7 |
0, /* num resources */
|
|
Packit |
b099d7 |
sizeof(XmManagerConstraintRec), /* constraint size */
|
|
Packit |
b099d7 |
NULL, /* init proc */
|
|
Packit |
b099d7 |
NULL, /* destroy proc */
|
|
Packit |
b099d7 |
NULL, /* set values proc */
|
|
Packit |
b099d7 |
NULL, /* extension */
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{ /* manager_class fields */
|
|
Packit |
b099d7 |
traversalTranslations, /* translations */
|
|
Packit |
b099d7 |
syn_resources, /* syn_resources */
|
|
Packit |
b099d7 |
XtNumber (syn_resources), /* num_get_resources */
|
|
Packit |
b099d7 |
NULL, /* syn_cont_resources */
|
|
Packit |
b099d7 |
0, /* num_get_cont_resources */
|
|
Packit |
b099d7 |
XmInheritParentProcess, /* parent_process */
|
|
Packit |
b099d7 |
NULL, /* extension */
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{ /* drawingArea class */
|
|
Packit |
b099d7 |
(XtPointer) NULL, /* extension pointer */
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
};
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
externaldef( xmdrawingareawidgetclass) WidgetClass xmDrawingAreaWidgetClass
|
|
Packit |
b099d7 |
= (WidgetClass) &xmDrawingAreaClassRec ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/****************************************************************/
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
ClassInitialize( void )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
baseClassExtRec.record_type = XmQmotif ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/****************************************************************/
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
ClassPartInitialize(
|
|
Packit |
b099d7 |
WidgetClass w_class )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_XmFastSubclassInit( w_class, XmDRAWING_AREA_BIT) ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/****************************************************************
|
|
Packit |
b099d7 |
* Initialize. Check resizePolicy resource value
|
|
Packit |
b099d7 |
****************/
|
|
Packit |
b099d7 |
/*ARGSUSED*/
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
Initialize(
|
|
Packit |
b099d7 |
Widget rw, /* unused */
|
|
Packit |
b099d7 |
Widget nw,
|
|
Packit |
b099d7 |
ArgList args, /* unused */
|
|
Packit |
b099d7 |
Cardinal *num_args ) /* unused */
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmDrawingAreaWidget new_w = (XmDrawingAreaWidget) nw ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if(new_w->drawing_area.resize_policy != XmRESIZE_SWINDOW
|
|
Packit |
b099d7 |
&& !XmRepTypeValidValue(XmRID_RESIZE_POLICY,
|
|
Packit |
b099d7 |
new_w->drawing_area.resize_policy,
|
|
Packit |
b099d7 |
(Widget) new_w) ) {
|
|
Packit |
b099d7 |
new_w->drawing_area.resize_policy = XmRESIZE_ANY ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/****************************************************************
|
|
Packit |
b099d7 |
* General redisplay function called on exposure events.
|
|
Packit |
b099d7 |
****************/
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
Redisplay(
|
|
Packit |
b099d7 |
Widget wid,
|
|
Packit |
b099d7 |
XEvent *event,
|
|
Packit |
b099d7 |
Region region )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmDrawingAreaWidget da = (XmDrawingAreaWidget) wid ;
|
|
Packit |
b099d7 |
XmDrawingAreaCallbackStruct cb;
|
|
Packit |
b099d7 |
/****************/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
cb.reason = XmCR_EXPOSE;
|
|
Packit |
b099d7 |
cb.event = event;
|
|
Packit |
b099d7 |
cb.window = XtWindow (da);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtCallCallbackList ((Widget) da, da->drawing_area.expose_callback, &cb;;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XmeRedisplayGadgets( (Widget) da, event, region);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/****************************************************************
|
|
Packit |
b099d7 |
* Invoke the application resize callbacks.
|
|
Packit |
b099d7 |
****************/
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
Resize(
|
|
Packit |
b099d7 |
Widget wid )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmDrawingAreaWidget da = (XmDrawingAreaWidget) wid ;
|
|
Packit |
b099d7 |
XmDrawingAreaCallbackStruct cb;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
cb.reason = XmCR_RESIZE;
|
|
Packit |
b099d7 |
cb.event = NULL;
|
|
Packit |
b099d7 |
cb.window = XtWindow (da);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtCallCallbackList ((Widget) da, da->drawing_area.resize_callback, &cb;;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static Widget
|
|
Packit |
b099d7 |
ObjectAtPoint(
|
|
Packit |
b099d7 |
Widget wid,
|
|
Packit |
b099d7 |
Position x,
|
|
Packit |
b099d7 |
Position y )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
CompositeWidget cw = (CompositeWidget) wid ;
|
|
Packit |
b099d7 |
register int i;
|
|
Packit |
b099d7 |
register Widget widget;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
i = cw->composite.num_children ;
|
|
Packit |
b099d7 |
while( i-- ) {
|
|
Packit |
b099d7 |
widget = cw->composite.children[i];
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* do not care for gadget only for the DA input */
|
|
Packit |
b099d7 |
if (XmIsGadget(widget) && XtIsManaged (widget)) {
|
|
Packit |
b099d7 |
if (x >= widget->core.x && y >= widget->core.y &&
|
|
Packit |
b099d7 |
x < widget->core.x + widget->core.width &&
|
|
Packit |
b099d7 |
y < widget->core.y + widget->core.height)
|
|
Packit |
b099d7 |
return (widget);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
return (NULL);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/****************************************************************
|
|
Packit |
b099d7 |
* This function processes key and button presses and releases
|
|
Packit |
b099d7 |
* belonging to the DrawingArea.
|
|
Packit |
b099d7 |
****************/
|
|
Packit |
b099d7 |
/*ARGSUSED*/
|
|
Packit |
b099d7 |
void
|
|
Packit |
b099d7 |
_XmDrawingAreaInput(
|
|
Packit |
b099d7 |
Widget wid,
|
|
Packit |
b099d7 |
XEvent *event,
|
|
Packit |
b099d7 |
String *params, /* unused */
|
|
Packit |
b099d7 |
Cardinal *num_params ) /* unused */
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmDrawingAreaWidget da = (XmDrawingAreaWidget) wid ;
|
|
Packit |
b099d7 |
XmDrawingAreaCallbackStruct cb ;
|
|
Packit |
b099d7 |
int x, y ;
|
|
Packit |
b099d7 |
Boolean button_event = True, input_on_gadget ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if ((event->type == ButtonPress) ||
|
|
Packit |
b099d7 |
(event->type == ButtonRelease)) {
|
|
Packit |
b099d7 |
x = event->xbutton.x ;
|
|
Packit |
b099d7 |
y = event->xbutton.y ;
|
|
Packit |
b099d7 |
} else
|
|
Packit |
b099d7 |
if (event->type == MotionNotify) {
|
|
Packit |
b099d7 |
x = event->xmotion.x ;
|
|
Packit |
b099d7 |
y = event->xmotion.y ;
|
|
Packit |
b099d7 |
} else
|
|
Packit |
b099d7 |
if ((event->type == KeyPress) ||
|
|
Packit |
b099d7 |
(event->type == KeyRelease)) {
|
|
Packit |
b099d7 |
x = event->xkey.x ;
|
|
Packit |
b099d7 |
y = event->xkey.y ;
|
|
Packit |
b099d7 |
button_event = False ;
|
|
Packit |
b099d7 |
} else return ;
|
|
Packit |
b099d7 |
/* Unrecognized event (cannot determine x, y of pointer).*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
input_on_gadget = (ObjectAtPoint((Widget)da, x, y) != NULL);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (!input_on_gadget && (!da->manager.active_child || button_event)) {
|
|
Packit |
b099d7 |
cb.reason = XmCR_INPUT ;
|
|
Packit |
b099d7 |
cb.event = event ;
|
|
Packit |
b099d7 |
cb.window = XtWindow( da) ;
|
|
Packit |
b099d7 |
XtCallCallbackList ((Widget) da,
|
|
Packit |
b099d7 |
da->drawing_area.input_callback, &cb) ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/****************************************************************/
|
|
Packit |
b099d7 |
static XtGeometryResult
|
|
Packit |
b099d7 |
GeometryManager(
|
|
Packit |
b099d7 |
Widget w,
|
|
Packit |
b099d7 |
XtWidgetGeometry *request,
|
|
Packit |
b099d7 |
XtWidgetGeometry *reply )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmDrawingAreaWidget da;
|
|
Packit |
b099d7 |
/* XtGeometryHandler manager ; */
|
|
Packit |
b099d7 |
/****************/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
da = (XmDrawingAreaWidget) w->core.parent;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* function shared with Bulletin Board */
|
|
Packit |
b099d7 |
return(_XmGMHandleGeometryManager((Widget)da, w, request, reply,
|
|
Packit |
b099d7 |
da->drawing_area.margin_width,
|
|
Packit |
b099d7 |
da->drawing_area.margin_height,
|
|
Packit |
b099d7 |
da->drawing_area.resize_policy,
|
|
Packit |
b099d7 |
True)); /* no overlap checking */
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/****************************************************************
|
|
Packit |
b099d7 |
* Re-layout children.
|
|
Packit |
b099d7 |
****************/
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
ChangeManaged(
|
|
Packit |
b099d7 |
Widget wid )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmDrawingAreaWidget da = (XmDrawingAreaWidget) wid ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* function shared with Bulletin Board */
|
|
Packit |
b099d7 |
_XmGMEnforceMargin((XmManagerWidget)da,
|
|
Packit |
b099d7 |
da->drawing_area.margin_width,
|
|
Packit |
b099d7 |
da->drawing_area.margin_height,
|
|
Packit |
b099d7 |
False); /* use movewidget, not setvalue */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* The first time, reconfigure only if explicit size were not given */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (XtIsRealized((Widget)da) || (!XtWidth(da)) || (!XtHeight(da))) {
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* function shared with Bulletin Board */
|
|
Packit |
b099d7 |
(void)_XmGMDoLayout((XmManagerWidget)da,
|
|
Packit |
b099d7 |
da->drawing_area.margin_width,
|
|
Packit |
b099d7 |
da->drawing_area.margin_height,
|
|
Packit |
b099d7 |
da->drawing_area.resize_policy,
|
|
Packit |
b099d7 |
False); /* queryonly not specified */
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XmeNavigChangeManaged((Widget) da) ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/****************************************************************/
|
|
Packit |
b099d7 |
/*ARGSUSED*/
|
|
Packit |
b099d7 |
static Boolean
|
|
Packit |
b099d7 |
SetValues(
|
|
Packit |
b099d7 |
Widget cw,
|
|
Packit |
b099d7 |
Widget rw, /* unused */
|
|
Packit |
b099d7 |
Widget nw,
|
|
Packit |
b099d7 |
ArgList args, /* unused */
|
|
Packit |
b099d7 |
Cardinal *num_args ) /* unused */
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmDrawingAreaWidget current = (XmDrawingAreaWidget) cw ;
|
|
Packit |
b099d7 |
XmDrawingAreaWidget new_w = (XmDrawingAreaWidget) nw ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if(new_w->drawing_area.resize_policy != XmRESIZE_SWINDOW
|
|
Packit |
b099d7 |
&& !XmRepTypeValidValue(XmRID_RESIZE_POLICY,
|
|
Packit |
b099d7 |
new_w->drawing_area.resize_policy,
|
|
Packit |
b099d7 |
(Widget) new_w) ) {
|
|
Packit |
b099d7 |
new_w->drawing_area.resize_policy =
|
|
Packit |
b099d7 |
current->drawing_area.resize_policy ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* If new margins, re-enforce them using movewidget,
|
|
Packit |
b099d7 |
then update the width and height so that XtSetValues does
|
|
Packit |
b099d7 |
the geometry request */
|
|
Packit |
b099d7 |
if (XtIsRealized((Widget) new_w) &&
|
|
Packit |
b099d7 |
(((new_w->drawing_area.margin_width !=
|
|
Packit |
b099d7 |
current->drawing_area.margin_width) ||
|
|
Packit |
b099d7 |
(new_w->drawing_area.margin_height !=
|
|
Packit |
b099d7 |
current->drawing_area.margin_height)))) {
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* move the child around if necessary */
|
|
Packit |
b099d7 |
_XmGMEnforceMargin((XmManagerWidget)new_w,
|
|
Packit |
b099d7 |
new_w->drawing_area.margin_width,
|
|
Packit |
b099d7 |
new_w->drawing_area.margin_height,
|
|
Packit |
b099d7 |
False); /* use movewidget, no request */
|
|
Packit |
b099d7 |
_XmGMCalcSize ((XmManagerWidget)new_w,
|
|
Packit |
b099d7 |
new_w->drawing_area.margin_width,
|
|
Packit |
b099d7 |
new_w->drawing_area.margin_height,
|
|
Packit |
b099d7 |
&new_w->core.width, &new_w->core.height);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
return( False) ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/****************************************************************
|
|
Packit |
b099d7 |
* Handle query geometry requests
|
|
Packit |
b099d7 |
****************/
|
|
Packit |
b099d7 |
static XtGeometryResult
|
|
Packit |
b099d7 |
QueryGeometry(
|
|
Packit |
b099d7 |
Widget wid,
|
|
Packit |
b099d7 |
XtWidgetGeometry *intended,
|
|
Packit |
b099d7 |
XtWidgetGeometry *desired )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmDrawingAreaWidget da = (XmDrawingAreaWidget) wid ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* function shared with Bulletin Board */
|
|
Packit |
b099d7 |
return(_XmGMHandleQueryGeometry(wid, intended, desired,
|
|
Packit |
b099d7 |
da->drawing_area.margin_width,
|
|
Packit |
b099d7 |
da->drawing_area.margin_height,
|
|
Packit |
b099d7 |
da->drawing_area.resize_policy));
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/****************************************************************
|
|
Packit |
b099d7 |
* Xm private class method
|
|
Packit |
b099d7 |
****************/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static XmNavigability
|
|
Packit |
b099d7 |
WidgetNavigable(
|
|
Packit |
b099d7 |
Widget wid)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if( XtIsSensitive(wid)
|
|
Packit |
b099d7 |
&& ((XmManagerWidget) wid)->manager.traversal_on )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNavigationType nav_type = ((XmManagerWidget) wid)
|
|
Packit |
b099d7 |
->manager.navigation_type ;
|
|
Packit |
b099d7 |
Widget *children = ((XmManagerWidget) wid)->composite.children ;
|
|
Packit |
b099d7 |
unsigned idx = 0 ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* If a Drawing Area has a navigable child, and initial focus
|
|
Packit |
b099d7 |
is either NULL or point to this child, allow navigation to it.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
while(idx < ((XmManagerWidget) wid)->composite.num_children) {
|
|
Packit |
b099d7 |
if (_XmGetNavigability(children[idx]) &&
|
|
Packit |
b099d7 |
((((XmManagerWidget) wid)->manager.initial_focus == NULL) ||
|
|
Packit |
b099d7 |
(((XmManagerWidget) wid)->manager.initial_focus ==
|
|
Packit |
b099d7 |
children[idx]))){
|
|
Packit |
b099d7 |
if( (nav_type == XmSTICKY_TAB_GROUP)
|
|
Packit |
b099d7 |
|| (nav_type == XmEXCLUSIVE_TAB_GROUP)
|
|
Packit |
b099d7 |
|| ( (nav_type == XmTAB_GROUP)
|
|
Packit |
b099d7 |
&& !_XmShellIsExclusive( wid))) {
|
|
Packit |
b099d7 |
return XmDESCENDANTS_TAB_NAVIGABLE ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
return XmDESCENDANTS_NAVIGABLE ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
++idx ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* else just return the DA itself */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if( (nav_type == XmSTICKY_TAB_GROUP)
|
|
Packit |
b099d7 |
|| (nav_type == XmEXCLUSIVE_TAB_GROUP)
|
|
Packit |
b099d7 |
|| ( (nav_type == XmTAB_GROUP)
|
|
Packit |
b099d7 |
&& !_XmShellIsExclusive( wid)) )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
return XmTAB_NAVIGABLE ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
return XmCONTROL_NAVIGABLE ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
return XmNOT_NAVIGABLE ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/****************************************************************
|
|
Packit |
b099d7 |
* This function creates and returns a DrawingArea widget.
|
|
Packit |
b099d7 |
****************/
|
|
Packit |
b099d7 |
Widget
|
|
Packit |
b099d7 |
XmCreateDrawingArea(
|
|
Packit |
b099d7 |
Widget p,
|
|
Packit |
b099d7 |
String name,
|
|
Packit |
b099d7 |
ArgList args,
|
|
Packit |
b099d7 |
Cardinal n )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
/****************/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
return( XtCreateWidget( name, xmDrawingAreaWidgetClass, p, args, n)) ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Widget
|
|
Packit |
b099d7 |
XmVaCreateDrawingArea(
|
|
Packit |
b099d7 |
Widget parent,
|
|
Packit |
b099d7 |
char *name,
|
|
Packit |
b099d7 |
...)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
register Widget w;
|
|
Packit |
b099d7 |
va_list var;
|
|
Packit |
b099d7 |
int count;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Va_start(var,name);
|
|
Packit |
b099d7 |
count = XmeCountVaListSimple(var);
|
|
Packit |
b099d7 |
va_end(var);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Va_start(var, name);
|
|
Packit |
b099d7 |
w = XmeVLCreateWidget(name,
|
|
Packit |
b099d7 |
xmDrawingAreaWidgetClass,
|
|
Packit |
b099d7 |
parent, False,
|
|
Packit |
b099d7 |
var, count);
|
|
Packit |
b099d7 |
va_end(var);
|
|
Packit |
b099d7 |
return w;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Widget
|
|
Packit |
b099d7 |
XmVaCreateManagedDrawingArea(
|
|
Packit |
b099d7 |
Widget parent,
|
|
Packit |
b099d7 |
char *name,
|
|
Packit |
b099d7 |
...)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Widget w = NULL;
|
|
Packit |
b099d7 |
va_list var;
|
|
Packit |
b099d7 |
int count;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Va_start(var, name);
|
|
Packit |
b099d7 |
count = XmeCountVaListSimple(var);
|
|
Packit |
b099d7 |
va_end(var);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Va_start(var, name);
|
|
Packit |
b099d7 |
w = XmeVLCreateWidget(name,
|
|
Packit |
b099d7 |
xmDrawingAreaWidgetClass,
|
|
Packit |
b099d7 |
parent, True,
|
|
Packit |
b099d7 |
var, count);
|
|
Packit |
b099d7 |
va_end(var);
|
|
Packit |
b099d7 |
return w;
|
|
Packit |
b099d7 |
}
|