|
Packit |
b099d7 |
/* $XConsortium: Obso1_2.c /main/7 1996/06/14 23:10:17 pascale $ */
|
|
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 |
/*
|
|
Packit |
b099d7 |
* HISTORY
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#ifdef HAVE_CONFIG_H
|
|
Packit |
b099d7 |
#include <config.h>
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#include <ctype.h>
|
|
Packit |
b099d7 |
#ifndef X_NOT_STDC_ENV
|
|
Packit |
b099d7 |
#include <stdlib.h>
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
#include <Xm/XmP.h>
|
|
Packit |
b099d7 |
#include <Xm/BaseClassP.h>
|
|
Packit |
b099d7 |
#include <Xm/DesktopP.h>
|
|
Packit |
b099d7 |
#include <Xm/DisplayP.h>
|
|
Packit |
b099d7 |
#include <Xm/DrawingAP.h>
|
|
Packit |
b099d7 |
#include <Xm/FileSBP.h>
|
|
Packit |
b099d7 |
#include <Xm/GadgetP.h>
|
|
Packit |
b099d7 |
#include <Xm/List.h>
|
|
Packit |
b099d7 |
#include <Xm/ManagerP.h>
|
|
Packit |
b099d7 |
#include <Xm/MenuShellP.h>
|
|
Packit |
b099d7 |
#include <Xm/PrimitiveP.h>
|
|
Packit |
b099d7 |
#include <Xm/PushBGP.h>
|
|
Packit |
b099d7 |
#include <Xm/PushBP.h>
|
|
Packit |
b099d7 |
#include <Xm/RowColumnP.h>
|
|
Packit |
b099d7 |
#include <Xm/ScaleP.h>
|
|
Packit |
b099d7 |
#include <Xm/ScreenP.h>
|
|
Packit |
b099d7 |
#include <Xm/ScrolledWP.h>
|
|
Packit |
b099d7 |
#include <Xm/Text.h>
|
|
Packit |
b099d7 |
#include <Xm/TextF.h>
|
|
Packit |
b099d7 |
#include <Xm/TransltnsP.h>
|
|
Packit |
b099d7 |
#include <Xm/VendorSEP.h>
|
|
Packit |
b099d7 |
#include "BulletinBI.h"
|
|
Packit |
b099d7 |
#include "MessagesI.h"
|
|
Packit |
b099d7 |
#include "SelectioBI.h"
|
|
Packit |
b099d7 |
#include "SyntheticI.h"
|
|
Packit |
b099d7 |
#include "TraversalI.h"
|
|
Packit |
b099d7 |
#include "XmStringI.h" /* for _XmStringGetTextConcat() */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
typedef struct {
|
|
Packit |
b099d7 |
int segment_size;
|
|
Packit |
b099d7 |
char* start;
|
|
Packit |
b099d7 |
char* current;
|
|
Packit |
b099d7 |
int bytes_remaining;
|
|
Packit |
b099d7 |
} XmHeapRec, *XmHeap;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/******** Static Function Declarations ********/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/******** End Static Function Declarations ********/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
externaldef(desktopobjectclass) WidgetClass
|
|
Packit |
b099d7 |
xmDesktopObjectClass = (WidgetClass) &xmDesktopClassRec;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
externaldef(displayobjectclass) WidgetClass
|
|
Packit |
b099d7 |
xmDisplayObjectClass = (WidgetClass) (&xmDisplayClassRec);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
externaldef(screenobjectclass) WidgetClass
|
|
Packit |
b099d7 |
xmScreenObjectClass = (WidgetClass) (&xmScreenClassRec);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
externaldef(worldobjectclass) WidgetClass
|
|
Packit |
b099d7 |
xmWorldObjectClass = (WidgetClass) NULL;
|
|
Packit |
b099d7 |
/* WorldP.h was defuncted for 2.0 , no more ref to (&xmWorldClassRec) */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
int
|
|
Packit |
b099d7 |
XmTextFieldGetBaseLine(
|
|
Packit |
b099d7 |
Widget w )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
return XmTextFieldGetBaseline( w) ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
int
|
|
Packit |
b099d7 |
XmTextGetBaseLine(
|
|
Packit |
b099d7 |
Widget w )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
return XmTextGetBaseline( w) ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*ARGSUSED*/
|
|
Packit |
b099d7 |
Boolean
|
|
Packit |
b099d7 |
_XmTestTraversability(
|
|
Packit |
b099d7 |
Widget widget,
|
|
Packit |
b099d7 |
XRectangle *visRect ) /* unused */
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
return XmIsTraversable( widget) ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*ARGSUSED*/
|
|
Packit |
b099d7 |
void
|
|
Packit |
b099d7 |
_XmClearTabGroup(
|
|
Packit |
b099d7 |
Widget w ) /* unused */
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
return ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Widget
|
|
Packit |
b099d7 |
_XmFindTabGroup(
|
|
Packit |
b099d7 |
Widget widget )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
return XmGetTabGroup( widget) ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*ARGSUSED*/
|
|
Packit |
b099d7 |
void
|
|
Packit |
b099d7 |
_XmClearKbdFocus(
|
|
Packit |
b099d7 |
Widget tabGroup ) /* unused */
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
return ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Widget
|
|
Packit |
b099d7 |
_XmGetTabGroup(
|
|
Packit |
b099d7 |
Widget w )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
return XmGetTabGroup( w) ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*ARGSUSED*/
|
|
Packit |
b099d7 |
Boolean
|
|
Packit |
b099d7 |
_XmWidgetIsTraversable(
|
|
Packit |
b099d7 |
Widget widget,
|
|
Packit |
b099d7 |
#if NeedWidePrototypes
|
|
Packit |
b099d7 |
int navType, /* unused */
|
|
Packit |
b099d7 |
#else
|
|
Packit |
b099d7 |
XmNavigationType navType, /* unused */
|
|
Packit |
b099d7 |
#endif /* NeedWidePrototypes */
|
|
Packit |
b099d7 |
XRectangle *visRect ) /* unused */
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
return XmIsTraversable( widget) ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Boolean
|
|
Packit |
b099d7 |
_XmGetManagedInfo(
|
|
Packit |
b099d7 |
Widget w )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
/* Depending upon the widget coming in, extract its mapped_when_managed flag
|
|
Packit |
b099d7 |
* and its managed flag.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
if (XmIsPrimitive (w))
|
|
Packit |
b099d7 |
return (w->core.managed && w->core.mapped_when_managed);
|
|
Packit |
b099d7 |
else if (XmIsGadget (w))
|
|
Packit |
b099d7 |
return (w->core.managed);
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
/* Treat menupanes specially */
|
|
Packit |
b099d7 |
if (XmIsRowColumn(w) && XmIsMenuShell(XtParent(w)))
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
return (True);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
return (w->core.managed && w->core.mapped_when_managed);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Boolean
|
|
Packit |
b099d7 |
_XmChangeNavigationType(
|
|
Packit |
b099d7 |
Widget current,
|
|
Packit |
b099d7 |
#if NeedWidePrototypes
|
|
Packit |
b099d7 |
int newNavType )
|
|
Packit |
b099d7 |
#else
|
|
Packit |
b099d7 |
XmNavigationType newNavType )
|
|
Packit |
b099d7 |
#endif /* NeedWidePrototypes */
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
/* This is a convenience routine for widgets wanting to change
|
|
Packit |
b099d7 |
* their navigation type without using XtSetValues().
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
XmFocusData focusData ;
|
|
Packit |
b099d7 |
Widget new_wid = current->core.self ;
|
|
Packit |
b099d7 |
XmNavigationType curNavType = _XmGetNavigationType( current) ;
|
|
Packit |
b099d7 |
XmTravGraph tgraph ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if( (curNavType != newNavType)
|
|
Packit |
b099d7 |
&& (focusData = _XmGetFocusData( new_wid))
|
|
Packit |
b099d7 |
&& (tgraph = &(focusData->trav_graph))->num_entries )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
_XmTravGraphUpdate( tgraph, new_wid) ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if( (focusData->focus_policy == XmEXPLICIT)
|
|
Packit |
b099d7 |
&& (focusData->focus_item == new_wid)
|
|
Packit |
b099d7 |
&& !XmIsTraversable( new_wid) )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Widget new_focus = _XmTraverseAway( tgraph, new_wid,
|
|
Packit |
b099d7 |
(focusData->active_tab_group != new_wid)) ;
|
|
Packit |
b099d7 |
if( !new_focus )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
new_focus = new_wid ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
_XmMgrTraversal( new_focus, XmTRAVERSE_CURRENT) ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
return TRUE ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/********************************************************************/
|
|
Packit |
b099d7 |
/* Following is the old code needed for subclasses already using it */
|
|
Packit |
b099d7 |
/* They can either define the macro and change nothing (but suffer
|
|
Packit |
b099d7 |
the addition of code and the drawing performance) or adapt to the
|
|
Packit |
b099d7 |
new interface (better) */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/************************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* Primitive:_XmDrawShadow, become XmDrawShadow
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* Draw an n segment wide bordering shadow on the drawable
|
|
Packit |
b099d7 |
* d, using the provided GC's and rectangle.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
************************************************************************/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
void _XmDrawShadow (Display *display, Drawable d,
|
|
Packit |
b099d7 |
GC top_GC, GC bottom_GC, int size, int x, int y,
|
|
Packit |
b099d7 |
int width, int height)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
static XRectangle * rects = NULL;
|
|
Packit |
b099d7 |
static int rect_count = 0;
|
|
Packit |
b099d7 |
register int i;
|
|
Packit |
b099d7 |
register int size2;
|
|
Packit |
b099d7 |
register int size3;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (size <= 0) return;
|
|
Packit |
b099d7 |
if (size > width / 2) size = width / 2;
|
|
Packit |
b099d7 |
if (size > height / 2) size = height / 2;
|
|
Packit |
b099d7 |
if (size <= 0) return;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (rect_count == 0)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
rects = (XRectangle *) XtMalloc (sizeof (XRectangle) * size * 4);
|
|
Packit |
b099d7 |
rect_count = size;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (rect_count < size)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
rects = (XRectangle *) XtRealloc((char *)rects, sizeof (XRectangle) * size * 4);
|
|
Packit |
b099d7 |
rect_count = size;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
size2 = size + size;
|
|
Packit |
b099d7 |
size3 = size2 + size;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
for (i = 0; i < size; i++)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
/* Top segments */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
rects[i].x = x;
|
|
Packit |
b099d7 |
rects[i].y = y + i;
|
|
Packit |
b099d7 |
rects[i].width = width - i;
|
|
Packit |
b099d7 |
rects[i].height = 1;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Left segments */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
rects[i + size].x = x + i;
|
|
Packit |
b099d7 |
rects[i + size].y = y;
|
|
Packit |
b099d7 |
rects[i + size].width = 1;
|
|
Packit |
b099d7 |
rects[i + size].height = height - i;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Bottom segments */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
rects[i + size2].x = x + i + 1;
|
|
Packit |
b099d7 |
rects[i + size2].y = y + height - i - 1;
|
|
Packit |
b099d7 |
rects[i + size2].width = width - i - 1;
|
|
Packit |
b099d7 |
rects[i + size2].height = 1;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Right segments */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
rects[i + size3].x = x + width - i - 1;
|
|
Packit |
b099d7 |
rects[i + size3].y = y + i + 1;
|
|
Packit |
b099d7 |
rects[i + size3].width = 1;
|
|
Packit |
b099d7 |
rects[i + size3].height = height - i - 1;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XFillRectangles (display, d, top_GC, &rects[0], size2);
|
|
Packit |
b099d7 |
XFillRectangles (display, d, bottom_GC, &rects[size2], size2);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/************************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* Primitive:_XmEraseShadow become XmClearShadow
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* Erase an n segment wide bordering shadow on the drawable
|
|
Packit |
b099d7 |
* d, using the provided rectangle.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
************************************************************************/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
void _XmEraseShadow (Display *display, Drawable d, int size,
|
|
Packit |
b099d7 |
int x, int y, int width, int height)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if (width > 0 && size > 0)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XClearArea (display, d, x, y, width, size, FALSE);
|
|
Packit |
b099d7 |
XClearArea (display, d, x, y + height - size, width, size, FALSE);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (size > 0 && height - (2 * size) > 0)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XClearArea (display, d, x, y + size, size, height - (2 * size), FALSE);
|
|
Packit |
b099d7 |
XClearArea (display, d, x + width - size, y + size, size,
|
|
Packit |
b099d7 |
height - (2 * size), FALSE);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/************************************************************************
|
|
Packit |
b099d7 |
* ArrowBI:_XmGetArrowDrawRects, become XmDrawArrow
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* Calculate the drawing rectangles.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
************************************************************************/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
void _XmGetArrowDrawRects (int highlight_thickness, int shadow_thickness, unsigned int direction, int core_width, int core_height, short *top_count, short *cent_count, short *bot_count, XRectangle **top, XRectangle **cent, XRectangle **bot)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
/* Arrow rectangle generation function */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
int size, width, start;
|
|
Packit |
b099d7 |
register int y;
|
|
Packit |
b099d7 |
XRectangle *tmp;
|
|
Packit |
b099d7 |
register int temp;
|
|
Packit |
b099d7 |
short t = 0;
|
|
Packit |
b099d7 |
short b = 0;
|
|
Packit |
b099d7 |
short c = 0;
|
|
Packit |
b099d7 |
int xOffset = 0;
|
|
Packit |
b099d7 |
int yOffset = 0;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Free the old lists */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (*top != NULL)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XtFree ((char *) *top); *top = NULL;
|
|
Packit |
b099d7 |
XtFree ((char *) *cent); *cent = NULL;
|
|
Packit |
b099d7 |
XtFree ((char *) *bot); *bot = NULL;
|
|
Packit |
b099d7 |
*top_count = 0;
|
|
Packit |
b099d7 |
*cent_count = 0;
|
|
Packit |
b099d7 |
*bot_count = 0;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Get the size and allocate the rectangle lists */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (core_width > core_height)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
size = core_height - 2 -
|
|
Packit |
b099d7 |
2 * (highlight_thickness + shadow_thickness);
|
|
Packit |
b099d7 |
xOffset = (core_width - core_height) / 2;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
size = core_width - 2 -
|
|
Packit |
b099d7 |
2 * (highlight_thickness + shadow_thickness);
|
|
Packit |
b099d7 |
yOffset = (core_height - core_width) / 2;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (size < 1) return;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (direction == XmARROW_RIGHT ||
|
|
Packit |
b099d7 |
direction == XmARROW_LEFT)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
temp = xOffset;
|
|
Packit |
b099d7 |
xOffset = yOffset;
|
|
Packit |
b099d7 |
yOffset = temp;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
*top = (XRectangle *) XtMalloc (sizeof (XRectangle) * (size / 2 + 6));
|
|
Packit |
b099d7 |
*cent = (XRectangle *) XtMalloc (sizeof (XRectangle) * (size / 2 + 6));
|
|
Packit |
b099d7 |
*bot = (XRectangle *) XtMalloc (sizeof (XRectangle) * (size / 2 + 6));
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Set up a loop to generate the segments. */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
width = size;
|
|
Packit |
b099d7 |
y = size + highlight_thickness + shadow_thickness - 1 + yOffset;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
start = highlight_thickness + shadow_thickness + 1 + xOffset;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
while (width > 0)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (width == 1)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
(*top)[t].x = start; (*top)[t].y = y + 1;
|
|
Packit |
b099d7 |
(*top)[t].width = 1; (*top)[t].height = 1;
|
|
Packit |
b099d7 |
t++;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else if (width == 2)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if (size == 2 ||
|
|
Packit |
b099d7 |
(direction == XmARROW_UP ||
|
|
Packit |
b099d7 |
direction == XmARROW_LEFT))
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
(*top)[t].x = start; (*top)[t].y = y;
|
|
Packit |
b099d7 |
(*top)[t].width = 2; (*top)[t].height = 1;
|
|
Packit |
b099d7 |
t++;
|
|
Packit |
b099d7 |
(*top)[t].x = start; (*top)[t].y = y + 1;
|
|
Packit |
b099d7 |
(*top)[t].width = 1; (*top)[t].height = 1;
|
|
Packit |
b099d7 |
t++;
|
|
Packit |
b099d7 |
(*bot)[b].x = start + 1; (*bot)[b].y = y + 1;
|
|
Packit |
b099d7 |
(*bot)[b].width = 1; (*bot)[b].height = 1;
|
|
Packit |
b099d7 |
b++;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else if (direction == XmARROW_UP ||
|
|
Packit |
b099d7 |
direction == XmARROW_LEFT)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
(*top)[t].x = start; (*top)[t].y = y;
|
|
Packit |
b099d7 |
(*top)[t].width = 2; (*top)[t].height = 1;
|
|
Packit |
b099d7 |
t++;
|
|
Packit |
b099d7 |
(*bot)[b].x = start; (*bot)[b].y = y + 1;
|
|
Packit |
b099d7 |
(*bot)[b].width = 2; (*bot)[b].height = 1;
|
|
Packit |
b099d7 |
b++;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if (start == highlight_thickness +
|
|
Packit |
b099d7 |
shadow_thickness + 1 + xOffset)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if (direction == XmARROW_UP ||
|
|
Packit |
b099d7 |
direction == XmARROW_LEFT)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
(*top)[t].x = start; (*top)[t].y = y;
|
|
Packit |
b099d7 |
(*top)[t].width = 2; (*top)[t].height = 1;
|
|
Packit |
b099d7 |
t++;
|
|
Packit |
b099d7 |
(*top)[t].x = start; (*top)[t].y = y + 1;
|
|
Packit |
b099d7 |
(*top)[t].width = 1; (*top)[t].height = 1;
|
|
Packit |
b099d7 |
t++;
|
|
Packit |
b099d7 |
(*bot)[b].x = start + 1; (*bot)[b].y = y + 1;
|
|
Packit |
b099d7 |
(*bot)[b].width = 1; (*bot)[b].height = 1;
|
|
Packit |
b099d7 |
b++;
|
|
Packit |
b099d7 |
(*bot)[b].x = start + 2; (*bot)[b].y = y;
|
|
Packit |
b099d7 |
(*bot)[b].width = width - 2; (*bot)[b].height = 2;
|
|
Packit |
b099d7 |
b++;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
(*top)[t].x = start; (*top)[t].y = y;
|
|
Packit |
b099d7 |
(*top)[t].width = 2; (*top)[t].height = 1;
|
|
Packit |
b099d7 |
t++;
|
|
Packit |
b099d7 |
(*bot)[b].x = start; (*bot)[b].y = y + 1;
|
|
Packit |
b099d7 |
(*bot)[b].width = 2; (*bot)[b].height = 1;
|
|
Packit |
b099d7 |
b++;
|
|
Packit |
b099d7 |
(*bot)[b].x = start + 2; (*bot)[b].y = y;
|
|
Packit |
b099d7 |
(*bot)[b].width = width - 2; (*bot)[b].height = 2;
|
|
Packit |
b099d7 |
b++;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
(*top)[t].x = start; (*top)[t].y = y;
|
|
Packit |
b099d7 |
(*top)[t].width = 2; (*top)[t].height = 2;
|
|
Packit |
b099d7 |
t++;
|
|
Packit |
b099d7 |
(*bot)[b].x = start + width - 2; (*bot)[b].y = y;
|
|
Packit |
b099d7 |
(*bot)[b].width = 2; (*bot)[b].height = 2;
|
|
Packit |
b099d7 |
if (width == 3)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
(*bot)[b].width = 1;
|
|
Packit |
b099d7 |
(*bot)[b].x += 1;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
b++;
|
|
Packit |
b099d7 |
if (width > 4)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
(*cent)[c].x = start + 2; (*cent)[c].y = y;
|
|
Packit |
b099d7 |
(*cent)[c].width = width - 4; (*cent)[c].height = 2;
|
|
Packit |
b099d7 |
c++;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
start++;
|
|
Packit |
b099d7 |
width -= 2;
|
|
Packit |
b099d7 |
y -= 2;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (direction == XmARROW_UP ||
|
|
Packit |
b099d7 |
direction == XmARROW_LEFT)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
*top_count = t;
|
|
Packit |
b099d7 |
*cent_count = c;
|
|
Packit |
b099d7 |
*bot_count = b;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
tmp = *top;
|
|
Packit |
b099d7 |
*top = *bot;
|
|
Packit |
b099d7 |
*bot = tmp;
|
|
Packit |
b099d7 |
*top_count = b;
|
|
Packit |
b099d7 |
*cent_count = c;
|
|
Packit |
b099d7 |
*bot_count = t;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Transform the "up" pointing arrow to the correct direction */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
switch (direction)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
case XmARROW_LEFT:
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
register int i;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
i = -1;
|
|
Packit |
b099d7 |
do
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
i++;
|
|
Packit |
b099d7 |
if (i < *top_count)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
temp = (*top)[i].y; (*top)[i].y =
|
|
Packit |
b099d7 |
(*top)[i].x; (*top)[i].x = temp;
|
|
Packit |
b099d7 |
temp = (*top)[i].width;
|
|
Packit |
b099d7 |
(*top)[i].width = (*top)[i].height; (*top)[i].height = temp;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
if (i < *bot_count)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
temp = (*bot)[i].y; (*bot)[i].y =
|
|
Packit |
b099d7 |
(*bot)[i].x; (*bot)[i].x = temp;
|
|
Packit |
b099d7 |
temp = (*bot)[i].width;
|
|
Packit |
b099d7 |
(*bot)[i].width = (*bot)[i].height; (*bot)[i].height = temp;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
if (i < *cent_count)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
temp = (*cent)[i].y; (*cent)[i].y =
|
|
Packit |
b099d7 |
(*cent)[i].x; (*cent)[i].x = temp;
|
|
Packit |
b099d7 |
temp = (*cent)[i].width;
|
|
Packit |
b099d7 |
(*cent)[i].width = (*cent)[i].height; (*cent)[i].height = temp;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
while (i < *top_count || i < *bot_count || i < *cent_count);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
case XmARROW_RIGHT:
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
register int h_right = core_height - 2;
|
|
Packit |
b099d7 |
register int w_right = core_width - 2;
|
|
Packit |
b099d7 |
register int i;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
i = -1;
|
|
Packit |
b099d7 |
do
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
i++;
|
|
Packit |
b099d7 |
if (i < *top_count)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
temp = (*top)[i].y; (*top)[i].y = (*top)[i].x;
|
|
Packit |
b099d7 |
(*top)[i].x = temp;
|
|
Packit |
b099d7 |
temp = (*top)[i].width; (*top)[i].width = (*top)[i].height;
|
|
Packit |
b099d7 |
(*top)[i].height = temp;
|
|
Packit |
b099d7 |
(*top)[i].x = w_right - (*top)[i].x - (*top)[i].width + 2;
|
|
Packit |
b099d7 |
(*top)[i].y = h_right - (*top)[i].y - (*top)[i].height + 2;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
if (i < *bot_count)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
temp = (*bot)[i].y; (*bot)[i].y = (*bot)[i].x;
|
|
Packit |
b099d7 |
(*bot)[i].x = temp;
|
|
Packit |
b099d7 |
temp = (*bot)[i].width; (*bot)[i].width = (*bot)[i].height;
|
|
Packit |
b099d7 |
(*bot)[i].height = temp;
|
|
Packit |
b099d7 |
(*bot)[i].x = w_right - (*bot)[i].x - (*bot)[i].width + 2;
|
|
Packit |
b099d7 |
(*bot)[i].y = h_right - (*bot)[i].y - (*bot)[i].height + 2;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
if (i < *cent_count)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
temp = (*cent)[i].y; (*cent)[i].y = (*cent)[i].x;
|
|
Packit |
b099d7 |
(*cent)[i].x = temp;
|
|
Packit |
b099d7 |
temp = (*cent)[i].width; (*cent)[i].width = (*cent)[i].height;
|
|
Packit |
b099d7 |
(*cent)[i].height = temp;
|
|
Packit |
b099d7 |
(*cent)[i].x = w_right - (*cent)[i].x - (*cent)[i].width + 2;
|
|
Packit |
b099d7 |
(*cent)[i].y = h_right - (*cent)[i].y - (*cent)[i].height + 2;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
while (i < *top_count || i < *bot_count || i < *cent_count);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
case XmARROW_UP:
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
case XmARROW_DOWN:
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
register int w_down = core_width - 2;
|
|
Packit |
b099d7 |
register int h_down = core_height - 2;
|
|
Packit |
b099d7 |
register int i;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
i = -1;
|
|
Packit |
b099d7 |
do
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
i++;
|
|
Packit |
b099d7 |
if (i < *top_count)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
(*top)[i].x = w_down - (*top)[i].x - (*top)[i].width + 2;
|
|
Packit |
b099d7 |
(*top)[i].y = h_down - (*top)[i].y - (*top)[i].height + 2;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
if (i < *bot_count)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
(*bot)[i].x = w_down - (*bot)[i].x - (*bot)[i].width + 2;
|
|
Packit |
b099d7 |
(*bot)[i].y = h_down - (*bot)[i].y - (*bot)[i].height + 2;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
if (i < *cent_count)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
(*cent)[i].x = w_down - (*cent)[i].x - (*cent)[i].width + 2;
|
|
Packit |
b099d7 |
(*cent)[i].y = h_down - (*cent)[i].y - (*cent)[i].height + 2;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
while (i < *top_count || i < *bot_count || i < *cent_count);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/************************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* ArrowBI:_XmOffsetArrow, become XmDrawArrow
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* Offset the arrow drawing rectangles, if needed, by the difference
|
|
Packit |
b099d7 |
* of the current x, y and the saved x, y);
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
************************************************************************/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
void _XmOffsetArrow (int diff_x, int diff_y, XRectangle *top, XRectangle *cent, XRectangle *bot, int top_count, int cent_count, int bot_count)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
register int i;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (diff_x != 0 || diff_y != 0)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
for (i = 0; i < top_count; i++)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
(top + i)->x += diff_x;
|
|
Packit |
b099d7 |
(top + i)->y += diff_y;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
for (i = 0; i < cent_count; i++)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
(cent + i)->x += diff_x;
|
|
Packit |
b099d7 |
(cent + i)->y += diff_y;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
for (i = 0; i < bot_count; i++)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
(bot + i)->x += diff_x;
|
|
Packit |
b099d7 |
(bot + i)->y += diff_y;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*************************************<->*************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* ToggleBI:_DrawSquareButton, become code
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*************************************<->***********************************/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
void _XmDrawSquareButton (Widget w, int x, int y, int size, GC topGC, GC bottomGC, GC centerGC,
|
|
Packit |
b099d7 |
#if NeedWidePrototypes
|
|
Packit |
b099d7 |
int fill)
|
|
Packit |
b099d7 |
#else
|
|
Packit |
b099d7 |
Boolean fill)
|
|
Packit |
b099d7 |
#endif /* NeedWidePrototypes */
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
_XmDrawShadow (XtDisplay (w), XtWindow (w),
|
|
Packit |
b099d7 |
topGC, bottomGC,
|
|
Packit |
b099d7 |
2, x, y, size, size);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (fill)
|
|
Packit |
b099d7 |
if (size > 6)
|
|
Packit |
b099d7 |
XFillRectangle (XtDisplay ((Widget) w),
|
|
Packit |
b099d7 |
XtWindow ((Widget) w),
|
|
Packit |
b099d7 |
centerGC,
|
|
Packit |
b099d7 |
((fill) ? x+2 : x+3),
|
|
Packit |
b099d7 |
((fill) ? y+2 : y+3),
|
|
Packit |
b099d7 |
((fill) ? size-4 : size-6),
|
|
Packit |
b099d7 |
((fill) ? size-4 : size-6));
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/************************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* ToggleBI:DrawDiamondButton, become XmDrawDiamond
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* The diamond drawing routine. Used in place of widgets or gadgets
|
|
Packit |
b099d7 |
* draw routine when toggleButton's indicatorType is one_of_many.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
************************************************************************/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
void _XmDrawDiamondButton (Widget tw, int x, int y, int size, GC topGC, GC bottomGC, GC centerGC,
|
|
Packit |
b099d7 |
#if NeedWidePrototypes
|
|
Packit |
b099d7 |
int fill )
|
|
Packit |
b099d7 |
#else
|
|
Packit |
b099d7 |
Boolean fill)
|
|
Packit |
b099d7 |
#endif /* NeedWidePrototypes */
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XSegment seg[12];
|
|
Packit |
b099d7 |
XPoint pt[5];
|
|
Packit |
b099d7 |
int midX, midY;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (size % 2 == 0)
|
|
Packit |
b099d7 |
size--;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
midX = x + (size + 1) / 2;
|
|
Packit |
b099d7 |
midY = y + (size + 1) / 2;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* COUNTER REVERSE DRAWING EFFECT ON TINY ToggleButtonS */
|
|
Packit |
b099d7 |
if (size <= 3)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
/* The top shadow segments */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
seg[0].x1 = x + size - 1; /* 1 */
|
|
Packit |
b099d7 |
seg[0].y1 = midY - 1;
|
|
Packit |
b099d7 |
seg[0].x2 = midX - 1; /* 2 */
|
|
Packit |
b099d7 |
seg[0].y2 = y + size - 1;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
seg[1].x1 = x + size - 2; /* 3 */
|
|
Packit |
b099d7 |
seg[1].y1 = midY - 1;
|
|
Packit |
b099d7 |
seg[1].x2 = midX - 1; /* 4 */
|
|
Packit |
b099d7 |
seg[1].y2 = y + size - 2;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
seg[2].x1 = x + size - 3; /* 3 */
|
|
Packit |
b099d7 |
seg[2].y1 = midY - 1;
|
|
Packit |
b099d7 |
seg[2].x2 = midX - 1; /* 4 */
|
|
Packit |
b099d7 |
seg[2].y2 = y + size - 3;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*--*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
seg[3].x1 = midX - 1; /* 5 */
|
|
Packit |
b099d7 |
seg[3].y1 = y + size - 1;
|
|
Packit |
b099d7 |
seg[3].x2 = x; /* 6 */
|
|
Packit |
b099d7 |
seg[3].y2 = midY - 1;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
seg[4].x1 = midX - 1; /* 7 */
|
|
Packit |
b099d7 |
seg[4].y1 = y + size - 2;
|
|
Packit |
b099d7 |
seg[4].x2 = x + 1; /* 8 */
|
|
Packit |
b099d7 |
seg[4].y2 = midY - 1;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
seg[5].x1 = midX - 1; /* 7 */
|
|
Packit |
b099d7 |
seg[5].y1 = y + size - 3;
|
|
Packit |
b099d7 |
seg[5].x2 = x + 2; /* 8 */
|
|
Packit |
b099d7 |
seg[5].y2 = midY - 1;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* The bottom shadow segments */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
seg[6].x1 = x + size - 1; /* 9 */
|
|
Packit |
b099d7 |
seg[6].y1 = midY - 1;
|
|
Packit |
b099d7 |
seg[6].x2 = midX - 1; /* 10 */
|
|
Packit |
b099d7 |
seg[6].y2 = y;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
seg[7].x1 = x + size - 2; /* 11 */
|
|
Packit |
b099d7 |
seg[7].y1 = midY - 1;
|
|
Packit |
b099d7 |
seg[7].x2 = midX - 1; /* 12 */
|
|
Packit |
b099d7 |
seg[7].y2 = y + 1;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
seg[8].x1 = x + size - 3; /* 11 */
|
|
Packit |
b099d7 |
seg[8].y1 = midY - 1;
|
|
Packit |
b099d7 |
seg[8].x2 = midX - 1; /* 12 */
|
|
Packit |
b099d7 |
seg[8].y2 = y + 2;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*--*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
seg[9].x1 = midX - 1; /* 13 */
|
|
Packit |
b099d7 |
seg[9].y1 = y;
|
|
Packit |
b099d7 |
seg[9].x2 = x; /* 14 */
|
|
Packit |
b099d7 |
seg[9].y2 = midY - 1;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
seg[10].x1 = midX - 1; /* 15 */
|
|
Packit |
b099d7 |
seg[10].y1 = y + 1;
|
|
Packit |
b099d7 |
seg[10].x2 = x + 1; /* 16 */
|
|
Packit |
b099d7 |
seg[10].y2 = midY - 1;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
seg[11].x1 = midX - 1; /* 15 */
|
|
Packit |
b099d7 |
seg[11].y1 = y + 2;
|
|
Packit |
b099d7 |
seg[11].x2 = x + 2; /* 16 */
|
|
Packit |
b099d7 |
seg[11].y2 = midY - 1;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else /* NORMAL SIZED ToggleButtonS */
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
/* The top shadow segments */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
seg[0].x1 = x; /* 1 */
|
|
Packit |
b099d7 |
seg[0].y1 = midY - 1;
|
|
Packit |
b099d7 |
seg[0].x2 = midX - 1; /* 2 */
|
|
Packit |
b099d7 |
seg[0].y2 = y;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
seg[1].x1 = x + 1; /* 3 */
|
|
Packit |
b099d7 |
seg[1].y1 = midY - 1;
|
|
Packit |
b099d7 |
seg[1].x2 = midX - 1; /* 4 */
|
|
Packit |
b099d7 |
seg[1].y2 = y + 1;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
seg[2].x1 = x + 2; /* 3 */
|
|
Packit |
b099d7 |
seg[2].y1 = midY - 1;
|
|
Packit |
b099d7 |
seg[2].x2 = midX - 1; /* 4 */
|
|
Packit |
b099d7 |
seg[2].y2 = y + 2;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*--*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
seg[3].x1 = midX - 1; /* 5 */
|
|
Packit |
b099d7 |
seg[3].y1 = y;
|
|
Packit |
b099d7 |
seg[3].x2 = x + size - 1; /* 6 */
|
|
Packit |
b099d7 |
seg[3].y2 = midY - 1;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
seg[4].x1 = midX - 1; /* 7 */
|
|
Packit |
b099d7 |
seg[4].y1 = y + 1;
|
|
Packit |
b099d7 |
seg[4].x2 = x + size - 2; /* 8 */
|
|
Packit |
b099d7 |
seg[4].y2 = midY - 1;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
seg[5].x1 = midX - 1; /* 7 */
|
|
Packit |
b099d7 |
seg[5].y1 = y + 2;
|
|
Packit |
b099d7 |
seg[5].x2 = x + size - 3; /* 8 */
|
|
Packit |
b099d7 |
seg[5].y2 = midY - 1;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* The bottom shadow segments */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
seg[6].x1 = x; /* 9 */
|
|
Packit |
b099d7 |
seg[6].y1 = midY - 1;
|
|
Packit |
b099d7 |
seg[6].x2 = midX - 1; /* 10 */
|
|
Packit |
b099d7 |
seg[6].y2 = y + size - 1;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
seg[7].x1 = x + 1; /* 11 */
|
|
Packit |
b099d7 |
seg[7].y1 = midY - 1;
|
|
Packit |
b099d7 |
seg[7].x2 = midX - 1; /* 12 */
|
|
Packit |
b099d7 |
seg[7].y2 = y + size - 2;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
seg[8].x1 = x + 2; /* 11 */
|
|
Packit |
b099d7 |
seg[8].y1 = midY - 1;
|
|
Packit |
b099d7 |
seg[8].x2 = midX - 1; /* 12 */
|
|
Packit |
b099d7 |
seg[8].y2 = y + size - 3;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*--*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
seg[9].x1 = midX - 1; /* 13 */
|
|
Packit |
b099d7 |
seg[9].y1 = y + size - 1;
|
|
Packit |
b099d7 |
seg[9].x2 = x + size - 1; /* 14 */
|
|
Packit |
b099d7 |
seg[9].y2 = midY - 1;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
seg[10].x1 = midX - 1; /* 15 */
|
|
Packit |
b099d7 |
seg[10].y1 = y + size - 2;
|
|
Packit |
b099d7 |
seg[10].x2 = x + size - 2; /* 16 */
|
|
Packit |
b099d7 |
seg[10].y2 = midY - 1;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
seg[11].x1 = midX - 1; /* 15 */
|
|
Packit |
b099d7 |
seg[11].y1 = y + size - 3;
|
|
Packit |
b099d7 |
seg[11].x2 = x + size - 3; /* 16 */
|
|
Packit |
b099d7 |
seg[11].y2 = midY - 1;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XDrawSegments (XtDisplay ((Widget) tw), XtWindow ((Widget) tw),
|
|
Packit |
b099d7 |
topGC, &seg[3], 3);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XDrawSegments (XtDisplay ((Widget) tw), XtWindow ((Widget) tw),
|
|
Packit |
b099d7 |
bottomGC, &seg[6], 6);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XDrawSegments (XtDisplay ((Widget) tw), XtWindow ((Widget) tw),
|
|
Packit |
b099d7 |
topGC, &seg[0], 3);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* For Fill */
|
|
Packit |
b099d7 |
if (fill)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
pt[0].x = x + 3;
|
|
Packit |
b099d7 |
pt[0].y = midY - 1;
|
|
Packit |
b099d7 |
pt[1].x = midX - 1 ;
|
|
Packit |
b099d7 |
pt[1].y = y + 2;
|
|
Packit |
b099d7 |
pt[2].x = x + size - 3;
|
|
Packit |
b099d7 |
pt[2].y = midY - 1;
|
|
Packit |
b099d7 |
pt[3].x = midX - 1 ;
|
|
Packit |
b099d7 |
pt[3].y = y + size - 3;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
pt[0].x = x + 4;
|
|
Packit |
b099d7 |
pt[0].y = midY - 1;
|
|
Packit |
b099d7 |
pt[1].x = midX - 1;
|
|
Packit |
b099d7 |
pt[1].y = y + 3;
|
|
Packit |
b099d7 |
pt[2].x = x + size - 4;
|
|
Packit |
b099d7 |
pt[2].y = midY - 1;
|
|
Packit |
b099d7 |
pt[3].x = midX - 1;
|
|
Packit |
b099d7 |
pt[3].y = y + size - 4;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* NOTE: code which handled the next two ifs by setting pt[1-3]
|
|
Packit |
b099d7 |
to match pt[0] values was replaced with return statements because
|
|
Packit |
b099d7 |
passing 4 identical coordinates to XFillPolygon caused the PMAX
|
|
Packit |
b099d7 |
to give a bus error. Dana@HP reports that the call is legitimate
|
|
Packit |
b099d7 |
and that the error is in the PMAX server. The return statements
|
|
Packit |
b099d7 |
will stay until the situation with the PMAX is resolved. (mitch) */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* COUNTER REVERSE DRAWING EFFECT ON TINY ToggleButtonS */
|
|
Packit |
b099d7 |
if (pt[0].x > pt[1].x)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (pt[0].y < pt[1].y)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XFillPolygon (XtDisplay ((Widget) tw), XtWindow ((Widget) tw),
|
|
Packit |
b099d7 |
centerGC, pt, 4, Convex, CoordModeOrigin);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/************************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* Manager:XmDrawEtchedShadow, become XmDrawShadow
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* Draw an n segment wide etched shadow on the drawable
|
|
Packit |
b099d7 |
* d, using the provided GC's and rectangle.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
************************************************************************/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static XRectangle *rects = NULL;
|
|
Packit |
b099d7 |
static int rect_count = 0;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
get_rects(
|
|
Packit |
b099d7 |
int max_i,
|
|
Packit |
b099d7 |
register int offset,
|
|
Packit |
b099d7 |
register int x,
|
|
Packit |
b099d7 |
register int y,
|
|
Packit |
b099d7 |
register int width,
|
|
Packit |
b099d7 |
register int height,
|
|
Packit |
b099d7 |
register int pos_top,
|
|
Packit |
b099d7 |
register int pos_left,
|
|
Packit |
b099d7 |
register int pos_bottom,
|
|
Packit |
b099d7 |
register int pos_right)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
register int i;
|
|
Packit |
b099d7 |
register int offsetX2;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
for (i = 0; i < max_i; i++, offset++)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
offsetX2 = offset + offset;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Top segments */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
rects[pos_top + i].x = x + offset;
|
|
Packit |
b099d7 |
rects[pos_top + i].y = y + offset;
|
|
Packit |
b099d7 |
rects[pos_top + i].width = width - offsetX2 -1;
|
|
Packit |
b099d7 |
rects[pos_top + i].height = 1;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Left segments */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
rects[pos_left + i].x = x + offset;
|
|
Packit |
b099d7 |
rects[pos_left + i].y = y + offset;
|
|
Packit |
b099d7 |
rects[pos_left + i].width = 1;
|
|
Packit |
b099d7 |
rects[pos_left + i].height = height - offsetX2 - 1;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Bottom segments */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
rects[pos_bottom + i].x = x + offset;
|
|
Packit |
b099d7 |
rects[pos_bottom + i].y = y + height - offset - 1;
|
|
Packit |
b099d7 |
rects[pos_bottom + i].width = width - offsetX2;
|
|
Packit |
b099d7 |
rects[pos_bottom + i].height = 1;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Right segments */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
rects[pos_right + i].x = x + width - offset - 1;
|
|
Packit |
b099d7 |
rects[pos_right + i].y = y + offset;
|
|
Packit |
b099d7 |
rects[pos_right + i].width = 1;
|
|
Packit |
b099d7 |
rects[pos_right + i].height = height - offsetX2;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
XmDrawEtchedShadow (
|
|
Packit |
b099d7 |
Display * display,
|
|
Packit |
b099d7 |
Drawable d,
|
|
Packit |
b099d7 |
GC top_GC,
|
|
Packit |
b099d7 |
GC bottom_GC,
|
|
Packit |
b099d7 |
register int size,
|
|
Packit |
b099d7 |
register int x,
|
|
Packit |
b099d7 |
register int y,
|
|
Packit |
b099d7 |
register int width,
|
|
Packit |
b099d7 |
register int height)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
int half_size;
|
|
Packit |
b099d7 |
int size2;
|
|
Packit |
b099d7 |
int size3;
|
|
Packit |
b099d7 |
int pos_top, pos_left, pos_bottom, pos_right;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (size <= 0) return;
|
|
Packit |
b099d7 |
if (size == 1)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
_XmDrawShadow (display, d,
|
|
Packit |
b099d7 |
top_GC, bottom_GC, size, x, y, width, height);
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (size > width / 2) size = width / 2;
|
|
Packit |
b099d7 |
if (size > height / 2) size = height / 2;
|
|
Packit |
b099d7 |
if (size <= 0) return;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
size = (size % 2) ? (size-1) : (size);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
half_size = size / 2;
|
|
Packit |
b099d7 |
size2 = size + size;
|
|
Packit |
b099d7 |
size3 = size2 + size;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (rect_count == 0)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
rects = (XRectangle *) XtMalloc (sizeof (XRectangle) * size * 4);
|
|
Packit |
b099d7 |
rect_count = size;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (rect_count < size)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
rects = (XRectangle *) XtRealloc((char *)rects, sizeof (XRectangle) * size * 4);
|
|
Packit |
b099d7 |
rect_count = size;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
pos_top = 0;
|
|
Packit |
b099d7 |
pos_left = half_size;
|
|
Packit |
b099d7 |
pos_bottom = size2;
|
|
Packit |
b099d7 |
pos_right = size2 + half_size;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
get_rects(half_size, 0, x, y, width, height,
|
|
Packit |
b099d7 |
pos_top, pos_left, pos_bottom, pos_right);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
pos_top = size3;
|
|
Packit |
b099d7 |
pos_left = size3 + half_size;
|
|
Packit |
b099d7 |
pos_bottom = size;
|
|
Packit |
b099d7 |
pos_right = size + half_size;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
get_rects(half_size, half_size, x, y, width, height,
|
|
Packit |
b099d7 |
pos_top, pos_left, pos_bottom, pos_right);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XFillRectangles (display, d, bottom_GC, &rects[size2], size2);
|
|
Packit |
b099d7 |
XFillRectangles (display, d, top_GC, &rects[0], size2);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*****************************************************************
|
|
Packit |
b099d7 |
* Manager:_XmDrawShadowType, become XmDrawShadow
|
|
Packit |
b099d7 |
*****************************************************************/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
void _XmDrawShadowType (Widget w, unsigned int shadow_type,
|
|
Packit |
b099d7 |
#if NeedWidePrototypes
|
|
Packit |
b099d7 |
int core_width, int core_height,
|
|
Packit |
b099d7 |
int shadow_thickness, int highlight_thickness,
|
|
Packit |
b099d7 |
#else
|
|
Packit |
b099d7 |
Dimension core_width, Dimension core_height,
|
|
Packit |
b099d7 |
Dimension shadow_thickness, Dimension highlight_thickness,
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
GC top_shadow_GC, GC bottom_shadow_GC)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if (!XtIsRealized(w))
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
switch (shadow_type)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
case XmSHADOW_IN:
|
|
Packit |
b099d7 |
case XmSHADOW_OUT:
|
|
Packit |
b099d7 |
if (shadow_thickness > 0)
|
|
Packit |
b099d7 |
_XmDrawShadow (XtDisplay (w), XtWindow (w),
|
|
Packit |
b099d7 |
(shadow_type == XmSHADOW_IN) ? bottom_shadow_GC : top_shadow_GC,
|
|
Packit |
b099d7 |
(shadow_type == XmSHADOW_IN) ? top_shadow_GC : bottom_shadow_GC,
|
|
Packit |
b099d7 |
shadow_thickness,
|
|
Packit |
b099d7 |
highlight_thickness,
|
|
Packit |
b099d7 |
highlight_thickness,
|
|
Packit |
b099d7 |
core_width - 2 * highlight_thickness,
|
|
Packit |
b099d7 |
core_height - 2 * highlight_thickness);
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
case XmSHADOW_ETCHED_IN:
|
|
Packit |
b099d7 |
case XmSHADOW_ETCHED_OUT:
|
|
Packit |
b099d7 |
XmDrawEtchedShadow (XtDisplay(w), XtWindow(w),
|
|
Packit |
b099d7 |
(shadow_type == XmSHADOW_ETCHED_IN) ?
|
|
Packit |
b099d7 |
bottom_shadow_GC : top_shadow_GC,
|
|
Packit |
b099d7 |
(shadow_type == XmSHADOW_ETCHED_IN) ?
|
|
Packit |
b099d7 |
top_shadow_GC : bottom_shadow_GC,
|
|
Packit |
b099d7 |
shadow_thickness,
|
|
Packit |
b099d7 |
highlight_thickness,
|
|
Packit |
b099d7 |
highlight_thickness,
|
|
Packit |
b099d7 |
core_width - 2 * highlight_thickness,
|
|
Packit |
b099d7 |
core_height - 2 * highlight_thickness);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/************************************************************************
|
|
Packit |
b099d7 |
* Primitive:_XmDrawBorder, become XmDrawHighlight
|
|
Packit |
b099d7 |
************************************************************************/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
void _XmDrawBorder ( Widget w, GC gc,
|
|
Packit |
b099d7 |
#if NeedWidePrototypes
|
|
Packit |
b099d7 |
int x, int y,
|
|
Packit |
b099d7 |
int width, int height, int highlight_width)
|
|
Packit |
b099d7 |
#else
|
|
Packit |
b099d7 |
Position x, Position y,
|
|
Packit |
b099d7 |
Dimension width, Dimension height, Dimension highlight_width)
|
|
Packit |
b099d7 |
#endif /* NeedWidePrototypes */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XRectangle rect[4];
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
rect[0].x = x;
|
|
Packit |
b099d7 |
rect[0].y = y;
|
|
Packit |
b099d7 |
rect[0].width = width;
|
|
Packit |
b099d7 |
rect[0].height = highlight_width;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
rect[1].x = x;
|
|
Packit |
b099d7 |
rect[1].y = y;
|
|
Packit |
b099d7 |
rect[1].width = highlight_width;
|
|
Packit |
b099d7 |
rect[1].height = height;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
rect[2].x = x + width - highlight_width;
|
|
Packit |
b099d7 |
rect[2].y = y;
|
|
Packit |
b099d7 |
rect[2].width = highlight_width;
|
|
Packit |
b099d7 |
rect[2].height = height;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
rect[3].x = x;
|
|
Packit |
b099d7 |
rect[3].y = y + height - highlight_width;
|
|
Packit |
b099d7 |
rect[3].width = width;
|
|
Packit |
b099d7 |
rect[3].height = highlight_width;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XFillRectangles (XtDisplay (w), XtWindow (w), gc, &rect[0], 4);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/***************************************************************
|
|
Packit |
b099d7 |
All these functions were private but global in 1.1, so instead of
|
|
Packit |
b099d7 |
just moving them static, we also provide the compatibility stuff.
|
|
Packit |
b099d7 |
They are just wrapping around the new static names
|
|
Packit |
b099d7 |
****************************************************************/
|
|
Packit |
b099d7 |
void
|
|
Packit |
b099d7 |
_XmFileSelectionBoxCreateFilterLabel(
|
|
Packit |
b099d7 |
XmFileSelectionBoxWidget fsb )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
FS_FilterLabel( fsb) = _XmBB_CreateLabelG( (Widget) fsb,
|
|
Packit |
b099d7 |
FS_FilterLabelString( fsb),
|
|
Packit |
b099d7 |
"FilterLabel",
|
|
Packit |
b099d7 |
XmFilterStringLoc) ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
void
|
|
Packit |
b099d7 |
_XmFileSelectionBoxCreateDirListLabel(
|
|
Packit |
b099d7 |
XmFileSelectionBoxWidget fsb )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
FS_DirListLabel( fsb) = _XmBB_CreateLabelG( (Widget) fsb,
|
|
Packit |
b099d7 |
FS_DirListLabelString( fsb),
|
|
Packit |
b099d7 |
"Dir",
|
|
Packit |
b099d7 |
XmDirListStringLoc) ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
/*****************************************************************/
|
|
Packit |
b099d7 |
void
|
|
Packit |
b099d7 |
_XmFileSelectionBoxCreateDirList(
|
|
Packit |
b099d7 |
XmFileSelectionBoxWidget fsb )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Arg al[20];
|
|
Packit |
b099d7 |
register int ac = 0;
|
|
Packit |
b099d7 |
XtCallbackProc callbackProc ;
|
|
Packit |
b099d7 |
/****************/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
FS_DirListSelectedItemPosition( fsb) = 0 ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtSetArg( al[ac], XmNvisibleItemCount,
|
|
Packit |
b099d7 |
SB_ListVisibleItemCount( fsb)) ; ac++ ;
|
|
Packit |
b099d7 |
XtSetArg( al[ac], XmNstringDirection, SB_StringDirection( fsb)); ac++;
|
|
Packit |
b099d7 |
XtSetArg( al[ac], XmNselectionPolicy, XmBROWSE_SELECT); ac++;
|
|
Packit |
b099d7 |
XtSetArg( al[ac], XmNlistSizePolicy, XmCONSTANT); ac++;
|
|
Packit |
b099d7 |
XtSetArg( al[ac], XmNscrollBarDisplayPolicy, XmSTATIC); ac++;
|
|
Packit |
b099d7 |
XtSetArg( al[ac], XmNnavigationType, XmSTICKY_TAB_GROUP) ; ++ac ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
FS_DirList( fsb) = XmCreateScrolledList( (Widget) fsb, "DirList", al, ac);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
callbackProc = ((XmSelectionBoxWidgetClass) fsb->core.widget_class)
|
|
Packit |
b099d7 |
->selection_box_class.list_callback ;
|
|
Packit |
b099d7 |
if( callbackProc )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XtAddCallback( FS_DirList( fsb), XmNsingleSelectionCallback,
|
|
Packit |
b099d7 |
callbackProc, (XtPointer) fsb) ;
|
|
Packit |
b099d7 |
XtAddCallback( FS_DirList( fsb), XmNbrowseSelectionCallback,
|
|
Packit |
b099d7 |
callbackProc, (XtPointer) fsb) ;
|
|
Packit |
b099d7 |
XtAddCallback( FS_DirList( fsb), XmNdefaultActionCallback,
|
|
Packit |
b099d7 |
callbackProc, (XtPointer) fsb) ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
XtManageChild( FS_DirList( fsb)) ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
return ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*****************************************************************/
|
|
Packit |
b099d7 |
void
|
|
Packit |
b099d7 |
_XmFileSelectionBoxCreateFilterText(
|
|
Packit |
b099d7 |
XmFileSelectionBoxWidget fs )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Arg arglist[10] ;
|
|
Packit |
b099d7 |
int argCount ;
|
|
Packit |
b099d7 |
char * stext_value ;
|
|
Packit |
b099d7 |
XtAccelerators temp_accelerators ;
|
|
Packit |
b099d7 |
/****************/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Get text portion from Compound String, and set
|
|
Packit |
b099d7 |
* fs_stext_charset and fs_stext_direction bits...
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
/* Should do this stuff entirely with XmStrings when the text
|
|
Packit |
b099d7 |
* widget supports it.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
if( !(stext_value = _XmStringGetTextConcat( FS_Pattern( fs))) )
|
|
Packit |
b099d7 |
{ stext_value = (char *) XtMalloc( 1) ;
|
|
Packit |
b099d7 |
stext_value[0] = '\0' ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
argCount = 0 ;
|
|
Packit |
b099d7 |
XtSetArg( arglist[argCount], XmNcolumns,
|
|
Packit |
b099d7 |
SB_TextColumns( fs)) ; argCount++ ;
|
|
Packit |
b099d7 |
XtSetArg( arglist[argCount], XmNresizeWidth, FALSE) ; argCount++ ;
|
|
Packit |
b099d7 |
XtSetArg( arglist[argCount], XmNvalue, stext_value) ; argCount++ ;
|
|
Packit |
b099d7 |
XtSetArg( arglist[argCount], XmNnavigationType,
|
|
Packit |
b099d7 |
XmSTICKY_TAB_GROUP) ; argCount++ ;
|
|
Packit |
b099d7 |
FS_FilterText( fs) = XmCreateTextField( (Widget) fs, "FilterText",
|
|
Packit |
b099d7 |
arglist, argCount) ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Install text accelerators.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
temp_accelerators = fs->core.accelerators ;
|
|
Packit |
b099d7 |
fs->core.accelerators = SB_TextAccelerators( fs) ;
|
|
Packit |
b099d7 |
XtInstallAccelerators( FS_FilterText( fs), (Widget) fs) ;
|
|
Packit |
b099d7 |
fs->core.accelerators = temp_accelerators ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtFree( stext_value) ;
|
|
Packit |
b099d7 |
return ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/****************************************************************/
|
|
Packit |
b099d7 |
/*ARGSUSED*/
|
|
Packit |
b099d7 |
void
|
|
Packit |
b099d7 |
_XmFileSelectionBoxGetDirectory(
|
|
Packit |
b099d7 |
Widget fs,
|
|
Packit |
b099d7 |
int resource, /* unused */
|
|
Packit |
b099d7 |
XtArgVal *value)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmString data ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
data = XmStringCopy(FS_Directory(fs));
|
|
Packit |
b099d7 |
*value = (XtArgVal) data ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
/****************************************************************/
|
|
Packit |
b099d7 |
/*ARGSUSED*/
|
|
Packit |
b099d7 |
void
|
|
Packit |
b099d7 |
_XmFileSelectionBoxGetNoMatchString(
|
|
Packit |
b099d7 |
Widget fs,
|
|
Packit |
b099d7 |
int resource, /* unused */
|
|
Packit |
b099d7 |
XtArgVal *value)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmString data ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
data = XmStringCopy(FS_NoMatchString(fs));
|
|
Packit |
b099d7 |
*value = (XtArgVal) data ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
/****************************************************************/
|
|
Packit |
b099d7 |
/*ARGSUSED*/
|
|
Packit |
b099d7 |
void
|
|
Packit |
b099d7 |
_XmFileSelectionBoxGetPattern(
|
|
Packit |
b099d7 |
Widget fs,
|
|
Packit |
b099d7 |
int resource, /* unused */
|
|
Packit |
b099d7 |
XtArgVal *value)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmString data ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
data = XmStringCopy(FS_Pattern(fs));
|
|
Packit |
b099d7 |
*value = (XtArgVal) data ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
/*****************************************************************/
|
|
Packit |
b099d7 |
/*ARGSUSED*/
|
|
Packit |
b099d7 |
void
|
|
Packit |
b099d7 |
_XmFileSelectionBoxGetFilterLabelString(
|
|
Packit |
b099d7 |
Widget fs,
|
|
Packit |
b099d7 |
int resource_offset, /* unused */
|
|
Packit |
b099d7 |
XtArgVal *value )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmString data ;
|
|
Packit |
b099d7 |
Arg al[1] ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtSetArg( al[0], XmNlabelString, &data) ;
|
|
Packit |
b099d7 |
XtGetValues( FS_FilterLabel( fs), al, 1) ;
|
|
Packit |
b099d7 |
*value = (XtArgVal) data ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
/*****************************************************************/
|
|
Packit |
b099d7 |
/*ARGSUSED*/
|
|
Packit |
b099d7 |
void
|
|
Packit |
b099d7 |
_XmFileSelectionBoxGetDirListLabelString(
|
|
Packit |
b099d7 |
Widget fs,
|
|
Packit |
b099d7 |
int resource_offset, /* unused */
|
|
Packit |
b099d7 |
XtArgVal *value )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmString data ;
|
|
Packit |
b099d7 |
Arg al[1] ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtSetArg( al[0], XmNlabelString, &data) ;
|
|
Packit |
b099d7 |
XtGetValues( FS_DirListLabel( fs), al, 1) ;
|
|
Packit |
b099d7 |
*value = (XtArgVal) data ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
/*****************************************************************/
|
|
Packit |
b099d7 |
/*ARGSUSED*/
|
|
Packit |
b099d7 |
void
|
|
Packit |
b099d7 |
_XmFileSelectionBoxGetDirListItems(
|
|
Packit |
b099d7 |
Widget fs,
|
|
Packit |
b099d7 |
int resource_offset, /* unused */
|
|
Packit |
b099d7 |
XtArgVal *value )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmString data ;
|
|
Packit |
b099d7 |
Arg al[1] ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtSetArg( al[0], XmNitems, &data) ;
|
|
Packit |
b099d7 |
XtGetValues( FS_DirList( fs), al, 1) ;
|
|
Packit |
b099d7 |
*value = (XtArgVal) data ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
/*****************************************************************/
|
|
Packit |
b099d7 |
/*ARGSUSED*/
|
|
Packit |
b099d7 |
void
|
|
Packit |
b099d7 |
_XmFileSelectionBoxGetDirListItemCount(
|
|
Packit |
b099d7 |
Widget fs,
|
|
Packit |
b099d7 |
int resource_offset, /* unused */
|
|
Packit |
b099d7 |
XtArgVal *value )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmString data ;
|
|
Packit |
b099d7 |
Arg al[1] ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtSetArg( al[0], XmNitemCount, &data) ;
|
|
Packit |
b099d7 |
XtGetValues( FS_DirList( fs), al, 1) ;
|
|
Packit |
b099d7 |
*value = (XtArgVal) data ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
/*****************************************************************/
|
|
Packit |
b099d7 |
/*ARGSUSED*/
|
|
Packit |
b099d7 |
void
|
|
Packit |
b099d7 |
_XmFileSelectionBoxGetListItems(
|
|
Packit |
b099d7 |
Widget fs,
|
|
Packit |
b099d7 |
int resource_offset, /* unused */
|
|
Packit |
b099d7 |
XtArgVal *value )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmString data ;
|
|
Packit |
b099d7 |
Arg al[1] ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if( FS_StateFlags( fs) & XmFS_NO_MATCH )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
*value = (XtArgVal) NULL ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{ XtSetArg( al[0], XmNitems, &data) ;
|
|
Packit |
b099d7 |
XtGetValues( SB_List( fs), al, 1) ;
|
|
Packit |
b099d7 |
*value = (XtArgVal) data ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
/*****************************************************************/
|
|
Packit |
b099d7 |
/*ARGSUSED*/
|
|
Packit |
b099d7 |
void
|
|
Packit |
b099d7 |
_XmFileSelectionBoxGetListItemCount(
|
|
Packit |
b099d7 |
Widget fs,
|
|
Packit |
b099d7 |
int resource_offset, /* unused */
|
|
Packit |
b099d7 |
XtArgVal *value )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmString data ;
|
|
Packit |
b099d7 |
Arg al[1] ;
|
|
Packit |
b099d7 |
/****************/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if( FS_StateFlags( fs) & XmFS_NO_MATCH )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
*value = (XtArgVal) 0 ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{ XtSetArg( al[0], XmNitemCount, &data) ;
|
|
Packit |
b099d7 |
XtGetValues( SB_List( fs), al, 1) ;
|
|
Packit |
b099d7 |
*value = (XtArgVal) data ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
/*****************************************************************/
|
|
Packit |
b099d7 |
/*ARGSUSED*/
|
|
Packit |
b099d7 |
void
|
|
Packit |
b099d7 |
_XmFileSelectionBoxGetDirMask(
|
|
Packit |
b099d7 |
Widget fs,
|
|
Packit |
b099d7 |
int resource_offset, /* unused */
|
|
Packit |
b099d7 |
XtArgVal *value )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
String filterText ;
|
|
Packit |
b099d7 |
XmString data ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
filterText = XmTextFieldGetString( FS_FilterText(fs)) ;
|
|
Packit |
b099d7 |
data = XmStringGenerate(filterText, XmFONTLIST_DEFAULT_TAG,
|
|
Packit |
b099d7 |
XmCHARSET_TEXT, NULL) ;
|
|
Packit |
b099d7 |
*value = (XtArgVal) data ;
|
|
Packit |
b099d7 |
XtFree( filterText) ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
return ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/****************************************************************/
|
|
Packit |
b099d7 |
static Widget
|
|
Packit |
b099d7 |
GetActiveText(
|
|
Packit |
b099d7 |
XmFileSelectionBoxWidget fsb,
|
|
Packit |
b099d7 |
XEvent *event )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Widget activeChild = NULL ;
|
|
Packit |
b099d7 |
/****************/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if( _XmGetFocusPolicy( (Widget) fsb) == XmEXPLICIT )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if( (fsb->manager.active_child == SB_Text( fsb))
|
|
Packit |
b099d7 |
|| (fsb->manager.active_child == FS_FilterText( fsb)) )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
activeChild = fsb->manager.active_child ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if( SB_Text( fsb)
|
|
Packit |
b099d7 |
&& (XtWindow( SB_Text( fsb))
|
|
Packit |
b099d7 |
== ((XKeyPressedEvent *) event)->window) )
|
|
Packit |
b099d7 |
{ activeChild = SB_Text( fsb) ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{ if( FS_FilterText( fsb)
|
|
Packit |
b099d7 |
&& (XtWindow( FS_FilterText( fsb))
|
|
Packit |
b099d7 |
== ((XKeyPressedEvent *) event)->window) )
|
|
Packit |
b099d7 |
{ activeChild = FS_FilterText( fsb) ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
return( activeChild) ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
/****************************************************************/
|
|
Packit |
b099d7 |
/*ARGSUSED*/
|
|
Packit |
b099d7 |
void
|
|
Packit |
b099d7 |
_XmFileSelectionBoxUpOrDown(
|
|
Packit |
b099d7 |
Widget wid,
|
|
Packit |
b099d7 |
XEvent *event,
|
|
Packit |
b099d7 |
String *argv,
|
|
Packit |
b099d7 |
Cardinal *argc ) /* unused */
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmFileSelectionBoxWidget fsb = (XmFileSelectionBoxWidget) wid ;
|
|
Packit |
b099d7 |
int visible ;
|
|
Packit |
b099d7 |
int top ;
|
|
Packit |
b099d7 |
int key_pressed ;
|
|
Packit |
b099d7 |
Widget list ;
|
|
Packit |
b099d7 |
int * position ;
|
|
Packit |
b099d7 |
int count ;
|
|
Packit |
b099d7 |
Widget activeChild ;
|
|
Packit |
b099d7 |
Arg av[5] ;
|
|
Packit |
b099d7 |
Cardinal ac ;
|
|
Packit |
b099d7 |
/****************/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if( !(activeChild = GetActiveText( fsb, event)) )
|
|
Packit |
b099d7 |
{ return ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
if( activeChild == SB_Text( fsb) )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if( FS_StateFlags( fsb) & XmFS_NO_MATCH )
|
|
Packit |
b099d7 |
{ return ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
list = SB_List( fsb) ;
|
|
Packit |
b099d7 |
position = &SB_ListSelectedItemPosition( fsb) ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else /* activeChild == FS_FilterText( fsb) */
|
|
Packit |
b099d7 |
{ list = fsb->file_selection_box.dir_list ;
|
|
Packit |
b099d7 |
position = &FS_DirListSelectedItemPosition( fsb) ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
if( !list )
|
|
Packit |
b099d7 |
{ return ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
ac = 0 ;
|
|
Packit |
b099d7 |
XtSetArg( av[ac], XmNitemCount, &count) ; ++ac ;
|
|
Packit |
b099d7 |
XtSetArg( av[ac], XmNtopItemPosition, &top) ; ++ac ;
|
|
Packit |
b099d7 |
XtSetArg( av[ac], XmNvisibleItemCount, &visible) ; ++ac ;
|
|
Packit |
b099d7 |
XtGetValues( (Widget) list, av, ac) ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if( !count )
|
|
Packit |
b099d7 |
{ return ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
key_pressed = atoi( *argv) ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if( *position == 0 )
|
|
Packit |
b099d7 |
{ /* No selection, so select first item.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
XmListSelectPos( list, ++*position, True) ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{ if( !key_pressed && (*position > 1) )
|
|
Packit |
b099d7 |
{ /* up */
|
|
Packit |
b099d7 |
XmListDeselectPos( list, *position) ;
|
|
Packit |
b099d7 |
XmListSelectPos( list, --*position, True) ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{ if( (key_pressed == 1) && (*position < count) )
|
|
Packit |
b099d7 |
{ /* down */
|
|
Packit |
b099d7 |
XmListDeselectPos( list, *position) ;
|
|
Packit |
b099d7 |
XmListSelectPos( list, ++*position, True) ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{ if( key_pressed == 2 )
|
|
Packit |
b099d7 |
{ /* home */
|
|
Packit |
b099d7 |
XmListDeselectPos( list, *position) ;
|
|
Packit |
b099d7 |
*position = 1 ;
|
|
Packit |
b099d7 |
XmListSelectPos( list, *position, True) ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{ if( key_pressed == 3 )
|
|
Packit |
b099d7 |
{ /* end */
|
|
Packit |
b099d7 |
XmListDeselectPos( list, *position) ;
|
|
Packit |
b099d7 |
*position = count ;
|
|
Packit |
b099d7 |
XmListSelectPos( list, *position, True) ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
if( top > *position )
|
|
Packit |
b099d7 |
{ XmListSetPos( list, *position) ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{ if( (top + visible) <= *position )
|
|
Packit |
b099d7 |
{ XmListSetBottomPos( list, *position) ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
return ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
/****************************************************************/
|
|
Packit |
b099d7 |
void
|
|
Packit |
b099d7 |
_XmFileSelectionBoxRestore(
|
|
Packit |
b099d7 |
Widget wid,
|
|
Packit |
b099d7 |
XEvent *event,
|
|
Packit |
b099d7 |
String *argv,
|
|
Packit |
b099d7 |
Cardinal *argc )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmFileSelectionBoxWidget fsb = (XmFileSelectionBoxWidget) wid ;
|
|
Packit |
b099d7 |
String itemString ;
|
|
Packit |
b099d7 |
String dir ;
|
|
Packit |
b099d7 |
String mask ;
|
|
Packit |
b099d7 |
int dirLen ;
|
|
Packit |
b099d7 |
int maskLen ;
|
|
Packit |
b099d7 |
Widget activeChild ;
|
|
Packit |
b099d7 |
/****************/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if( !(activeChild = GetActiveText( fsb, event)) )
|
|
Packit |
b099d7 |
{ return ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
if( activeChild == SB_Text( fsb) )
|
|
Packit |
b099d7 |
{ _XmSelectionBoxRestore( (Widget) fsb, event, argv, argc) ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else /* activeChild == FS_FilterText( fsb) */
|
|
Packit |
b099d7 |
{ /* Should do this stuff entirely with XmStrings when the text
|
|
Packit |
b099d7 |
* widget supports it.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
if( (dir = _XmStringGetTextConcat( FS_Directory( fsb))) != NULL )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
dirLen = strlen( dir) ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if( (mask = _XmStringGetTextConcat( FS_Pattern( fsb))) != NULL )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
maskLen = strlen( mask) ;
|
|
Packit |
b099d7 |
itemString = XtMalloc( dirLen + maskLen + 1) ;
|
|
Packit |
b099d7 |
strcpy( itemString, dir) ;
|
|
Packit |
b099d7 |
strcpy( &itemString[dirLen], mask) ;
|
|
Packit |
b099d7 |
XmTextFieldSetString( FS_FilterText( fsb), itemString) ;
|
|
Packit |
b099d7 |
XmTextFieldSetCursorPosition( FS_FilterText( fsb),
|
|
Packit |
b099d7 |
XmTextFieldGetLastPosition( FS_FilterText( fsb))) ;
|
|
Packit |
b099d7 |
XtFree( itemString) ;
|
|
Packit |
b099d7 |
XtFree( mask) ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
XtFree( dir) ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
return ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
/*****************************************************************/
|
|
Packit |
b099d7 |
XmGeoMatrix
|
|
Packit |
b099d7 |
_XmFileSBGeoMatrixCreate(
|
|
Packit |
b099d7 |
Widget wid,
|
|
Packit |
b099d7 |
Widget instigator,
|
|
Packit |
b099d7 |
XtWidgetGeometry *desired )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
return (*(xmFileSelectionBoxClassRec.bulletin_board_class
|
|
Packit |
b099d7 |
.geo_matrix_create))( wid, instigator, desired) ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
/****************************************************************/
|
|
Packit |
b099d7 |
Boolean
|
|
Packit |
b099d7 |
_XmFileSelectionBoxNoGeoRequest(
|
|
Packit |
b099d7 |
XmGeoMatrix geoSpec )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if( BB_InSetValues( geoSpec->composite)
|
|
Packit |
b099d7 |
&& (XtClass( geoSpec->composite) == xmFileSelectionBoxWidgetClass) )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
return( TRUE) ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
return( FALSE) ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
/****************************************************************/
|
|
Packit |
b099d7 |
void
|
|
Packit |
b099d7 |
_XmFileSelectionBoxFocusMoved(
|
|
Packit |
b099d7 |
Widget wid,
|
|
Packit |
b099d7 |
XtPointer client_data,
|
|
Packit |
b099d7 |
XtPointer data )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
(*(xmFileSelectionBoxClassRec.bulletin_board_class.focus_moved_proc))(
|
|
Packit |
b099d7 |
wid, client_data, data );
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XmHeap
|
|
Packit |
b099d7 |
_XmHeapCreate(
|
|
Packit |
b099d7 |
int segment_size )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmHeap heap;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
heap = XtNew(XmHeapRec);
|
|
Packit |
b099d7 |
heap->start = NULL;
|
|
Packit |
b099d7 |
heap->segment_size = segment_size;
|
|
Packit |
b099d7 |
heap->bytes_remaining = 0;
|
|
Packit |
b099d7 |
return heap;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
char *
|
|
Packit |
b099d7 |
_XmHeapAlloc(
|
|
Packit |
b099d7 |
XmHeap heap,
|
|
Packit |
b099d7 |
Cardinal bytes )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
register char* heap_loc;
|
|
Packit |
b099d7 |
if (heap == NULL) return XtMalloc(bytes);
|
|
Packit |
b099d7 |
if (heap->bytes_remaining < bytes) {
|
|
Packit |
b099d7 |
if ((bytes + sizeof(char*)) >= (heap->segment_size>>1)) {
|
|
Packit |
b099d7 |
/* preserve current segment; insert this one in front */
|
|
Packit |
b099d7 |
heap_loc = XtMalloc(bytes + sizeof(char*));
|
|
Packit |
b099d7 |
if (heap->start) {
|
|
Packit |
b099d7 |
*(char**)heap_loc = *(char**)heap->start;
|
|
Packit |
b099d7 |
*(char**)heap->start = heap_loc;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else {
|
|
Packit |
b099d7 |
*(char**)heap_loc = NULL;
|
|
Packit |
b099d7 |
heap->start = heap_loc;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
return heap_loc;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
/* else discard remainder of this segment */
|
|
Packit |
b099d7 |
heap_loc = XtMalloc((unsigned)heap->segment_size);
|
|
Packit |
b099d7 |
*(char**)heap_loc = heap->start;
|
|
Packit |
b099d7 |
heap->start = heap_loc;
|
|
Packit |
b099d7 |
heap->current = heap_loc + sizeof(char*);
|
|
Packit |
b099d7 |
heap->bytes_remaining = heap->segment_size - sizeof(char*);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
#ifdef WORD64
|
|
Packit |
b099d7 |
/* round to nearest 8-byte boundary */
|
|
Packit |
b099d7 |
bytes = (bytes + 7) & (~7);
|
|
Packit |
b099d7 |
#else
|
|
Packit |
b099d7 |
/* round to nearest 4-byte boundary */
|
|
Packit |
b099d7 |
bytes = (bytes + 3) & (~3);
|
|
Packit |
b099d7 |
#endif /* WORD64 */
|
|
Packit |
b099d7 |
heap_loc = heap->current;
|
|
Packit |
b099d7 |
heap->current += bytes;
|
|
Packit |
b099d7 |
heap->bytes_remaining -= bytes; /* can be negative, if rounded */
|
|
Packit |
b099d7 |
return heap_loc;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
void
|
|
Packit |
b099d7 |
_XmHeapFree(
|
|
Packit |
b099d7 |
XmHeap heap )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
char* segment = heap->start;
|
|
Packit |
b099d7 |
while (segment != NULL) {
|
|
Packit |
b099d7 |
char* next_segment = *(char**)segment;
|
|
Packit |
b099d7 |
XtFree(segment);
|
|
Packit |
b099d7 |
segment = next_segment;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
heap->start = NULL;
|
|
Packit |
b099d7 |
heap->bytes_remaining = 0;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
typedef struct {
|
|
Packit |
b099d7 |
Boolean *traversal_on;
|
|
Packit |
b099d7 |
Boolean *have_traversal;
|
|
Packit |
b099d7 |
Boolean *sensitive;
|
|
Packit |
b099d7 |
Boolean *ancestor_sensitive;
|
|
Packit |
b099d7 |
Boolean *mapped_when_managed;
|
|
Packit |
b099d7 |
Boolean *highlighted;
|
|
Packit |
b099d7 |
Boolean *managed;
|
|
Packit |
b099d7 |
unsigned char *navigation_type;
|
|
Packit |
b099d7 |
}*WidgetNavigPtrs;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
void
|
|
Packit |
b099d7 |
_XmGetWidgetNavigPtrs(
|
|
Packit |
b099d7 |
Widget widget,
|
|
Packit |
b099d7 |
WidgetNavigPtrs np )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
np->sensitive = &(widget->core.sensitive);
|
|
Packit |
b099d7 |
np->ancestor_sensitive = &(widget->core.ancestor_sensitive);
|
|
Packit |
b099d7 |
np->managed = &(widget->core.managed);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (XmIsManager(widget))
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmManagerWidget w = (XmManagerWidget) widget;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
np->traversal_on = &(w->manager.traversal_on);
|
|
Packit |
b099d7 |
np->mapped_when_managed = &(w->core.mapped_when_managed);
|
|
Packit |
b099d7 |
np->navigation_type = &(w->manager.navigation_type);
|
|
Packit |
b099d7 |
np->highlighted = NULL;
|
|
Packit |
b099d7 |
np->have_traversal = NULL;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else if (XmIsPrimitive(widget))
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmPrimitiveWidget w = (XmPrimitiveWidget) widget;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
np->traversal_on = &(w->primitive.traversal_on);
|
|
Packit |
b099d7 |
np->mapped_when_managed = &(w->core.mapped_when_managed);
|
|
Packit |
b099d7 |
np->navigation_type = &(w->primitive.navigation_type);
|
|
Packit |
b099d7 |
np->highlighted = &(w->primitive.highlighted);
|
|
Packit |
b099d7 |
np->have_traversal = &(w->primitive.have_traversal);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else if (XmIsGadget(widget))
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmGadget w = (XmGadget) widget;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
np->traversal_on = &(w->gadget.traversal_on);
|
|
Packit |
b099d7 |
np->mapped_when_managed = NULL;
|
|
Packit |
b099d7 |
np->navigation_type = &(w->gadget.navigation_type);
|
|
Packit |
b099d7 |
np->highlighted = &(w->gadget.highlighted);
|
|
Packit |
b099d7 |
np->have_traversal = &(w->gadget.have_traversal);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else /* it must be an object or foriegn widget */
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
np->traversal_on = NULL;
|
|
Packit |
b099d7 |
np->mapped_when_managed = NULL;
|
|
Packit |
b099d7 |
np->navigation_type = NULL;
|
|
Packit |
b099d7 |
np->highlighted = NULL;
|
|
Packit |
b099d7 |
np->have_traversal = NULL;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
void
|
|
Packit |
b099d7 |
GetWidgetNavigPtrs(
|
|
Packit |
b099d7 |
Widget widget,
|
|
Packit |
b099d7 |
WidgetNavigPtrs np )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
_XmGetWidgetNavigPtrs( widget, np) ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Boolean
|
|
Packit |
b099d7 |
_XmFindTraversablePrim(
|
|
Packit |
b099d7 |
CompositeWidget tabGroup )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Widget first = _XmNavigate( (Widget) tabGroup, XmTRAVERSE_CURRENT) ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
return first ? (XmCONTROL_NAVIGABLE == _XmGetNavigability( first)) : FALSE ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
typedef enum {
|
|
Packit |
b099d7 |
HereOnly,
|
|
Packit |
b099d7 |
AboveOnly,
|
|
Packit |
b099d7 |
BelowOnly,
|
|
Packit |
b099d7 |
AboveAndBelow
|
|
Packit |
b099d7 |
} XmNavigTestType;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*ARGSUSED*/
|
|
Packit |
b099d7 |
Boolean
|
|
Packit |
b099d7 |
_XmPathIsTraversable(
|
|
Packit |
b099d7 |
Widget widget,
|
|
Packit |
b099d7 |
#if NeedWidePrototypes
|
|
Packit |
b099d7 |
int navType,
|
|
Packit |
b099d7 |
#else
|
|
Packit |
b099d7 |
XmNavigationType navType,
|
|
Packit |
b099d7 |
#endif /* NeedWidePrototypes */
|
|
Packit |
b099d7 |
XmNavigTestType testType, /* unused */
|
|
Packit |
b099d7 |
XRectangle *visRect ) /* unused */
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
return _XmFindTraversablePrim( (CompositeWidget) widget) ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*ARGSUSED*/
|
|
Packit |
b099d7 |
void
|
|
Packit |
b099d7 |
SetMwmStuff(
|
|
Packit |
b099d7 |
XmVendorShellExtObject ove, /* unused */
|
|
Packit |
b099d7 |
XmVendorShellExtObject nve ) /* unused */
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
/* Sorry Charlie, this doesn't work any more.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
return ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*ARGSUSED*/
|
|
Packit |
b099d7 |
void
|
|
Packit |
b099d7 |
_XmBB_GetDialogTitle(
|
|
Packit |
b099d7 |
Widget bb,
|
|
Packit |
b099d7 |
int resource, /* unused */
|
|
Packit |
b099d7 |
XtArgVal *value)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmString data = XmStringCopy((XmString) ((XmBulletinBoardWidget) bb)
|
|
Packit |
b099d7 |
->bulletin_board.dialog_title);
|
|
Packit |
b099d7 |
*value = (XtArgVal) data ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static Boolean
|
|
Packit |
b099d7 |
_isISO(
|
|
Packit |
b099d7 |
String charset )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
register int i;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (strlen(charset) == 5)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
for (i = 0; i < 5; i++)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if (!isdigit((unsigned char)charset[i])) return (False);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
return (True);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else return (False);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
char *
|
|
Packit |
b099d7 |
_XmCharsetCanonicalize(
|
|
Packit |
b099d7 |
String charset )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
String new_s;
|
|
Packit |
b099d7 |
int len;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* ASCII -> ISO8859-1 */
|
|
Packit |
b099d7 |
if (!strcmp(charset, "ASCII"))
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
len = strlen(XmSTRING_ISO8859_1);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
new_s = XtMalloc(len + 1);
|
|
Packit |
b099d7 |
strncpy(new_s, XmSTRING_ISO8859_1, len);
|
|
Packit |
b099d7 |
new_s[len] = '\0';
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else if (_isISO(charset))
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
/* "ISO####-#" */
|
|
Packit |
b099d7 |
new_s = XtMalloc(3 + 4 + 1 + 1 + 1);
|
|
Packit |
b099d7 |
sprintf(new_s, "ISO%s", charset);
|
|
Packit |
b099d7 |
new_s[7] = '-';
|
|
Packit |
b099d7 |
new_s[8] = charset[4];
|
|
Packit |
b099d7 |
new_s[9] = '\0';
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
/* Anything else is copied but not modified. */
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
len = strlen(charset);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
new_s = XtMalloc(len + 1);
|
|
Packit |
b099d7 |
strncpy(new_s, charset, len);
|
|
Packit |
b099d7 |
new_s[len] = '\0';
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
return (new_s);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*ARGSUSED*/
|
|
Packit |
b099d7 |
Widget
|
|
Packit |
b099d7 |
_XmGetDisplayObject(Widget shell,
|
|
Packit |
b099d7 |
ArgList args, /* unused */
|
|
Packit |
b099d7 |
Cardinal *num_args) /* unused */
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
return XmGetXmDisplay( XtDisplay( shell)) ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*ARGSUSED*/
|
|
Packit |
b099d7 |
Widget
|
|
Packit |
b099d7 |
_XmGetScreenObject(Widget shell,
|
|
Packit |
b099d7 |
ArgList args, /* unused */
|
|
Packit |
b099d7 |
Cardinal *num_args) /* unused */
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
return XmGetXmScreen( XtScreen( shell)) ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*ARGSUSED*/
|
|
Packit |
b099d7 |
XmWrapperData
|
|
Packit |
b099d7 |
_XmGetWrapperData (WidgetClass w_class) /* unused */
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
/* If somebody actually used this, they are probably in for a surprise.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
return (XmWrapperData) XtCalloc( 1, sizeof( XmWrapperDataRec)) ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
void
|
|
Packit |
b099d7 |
_XmLowerCase(
|
|
Packit |
b099d7 |
register char *source,
|
|
Packit |
b099d7 |
register char *dest )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
register char ch;
|
|
Packit |
b099d7 |
int i;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
for (i = 0; (ch = *source) != 0 && i < 999; source++, dest++, i++) {
|
|
Packit |
b099d7 |
if ('A' <= ch && ch <= 'Z')
|
|
Packit |
b099d7 |
*dest = ch - 'A' + 'a';
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
*dest = ch;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
*dest = 0;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
void dump_external(){}
|
|
Packit |
b099d7 |
void dump_fontlist_cache(){}
|
|
Packit |
b099d7 |
void dump_fontlist(){}
|
|
Packit |
b099d7 |
void dump_internal(){}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
void
|
|
Packit |
b099d7 |
_XmButtonPopdownChildren (XmRowColumnWidget rowcol)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if (RC_PopupPosted(rowcol))
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
(*(((XmMenuShellClassRec *)xmMenuShellWidgetClass)->
|
|
Packit |
b099d7 |
menu_shell_class.popdownEveryone))(RC_PopupPosted(rowcol),
|
|
Packit |
b099d7 |
NULL,NULL,NULL);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
void
|
|
Packit |
b099d7 |
_XmInitializeMenuCursor (void)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
/* It's unlucky to hit this one...
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*ARGSUSED*/
|
|
Packit |
b099d7 |
void
|
|
Packit |
b099d7 |
_XmCreateMenuCursor (Widget m) /* unused */
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
/* ... or this one.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
XContext _XmMenuCursorContext = 0; /* This won't help much either. */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static Boolean simplistic_transient_flag ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*ARGSUSED*/
|
|
Packit |
b099d7 |
Boolean
|
|
Packit |
b099d7 |
_XmGetTransientFlag (Widget w) /* unused */
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
return simplistic_transient_flag ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*ARGSUSED*/
|
|
Packit |
b099d7 |
void
|
|
Packit |
b099d7 |
_XmSetTransientFlag (Widget w, /* unused */
|
|
Packit |
b099d7 |
Boolean value)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
/* In a very simple case, this might work. To implement more of this
|
|
Packit |
b099d7 |
* for BC would probably not help an application which was invasive
|
|
Packit |
b099d7 |
* enough to use this flag in the first place.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
simplistic_transient_flag = value ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*ARGSUSED*/
|
|
Packit |
b099d7 |
Boolean
|
|
Packit |
b099d7 |
_XmQueryPixmapCache (Screen *screen, /* unused */
|
|
Packit |
b099d7 |
char *image_name, /* unused */
|
|
Packit |
b099d7 |
Pixel foreground, /* unused */
|
|
Packit |
b099d7 |
Pixel background) /* unused */
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
/* Simple case: return FALSE (creating new pixmap will find it in cache).
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
return FALSE ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*ARGSUSED*/
|
|
Packit |
b099d7 |
void
|
|
Packit |
b099d7 |
_XmRC_GetLabelString(
|
|
Packit |
b099d7 |
XmRowColumnWidget rc,
|
|
Packit |
b099d7 |
XrmQuark resource, /* unused */
|
|
Packit |
b099d7 |
XtArgVal * value)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
*value = (XtArgVal) XmStringCopy(RC_OptionLabel(rc));
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*ARGSUSED*/
|
|
Packit |
b099d7 |
void
|
|
Packit |
b099d7 |
_XmRC_GetMenuAccelerator(
|
|
Packit |
b099d7 |
XmRowColumnWidget rc,
|
|
Packit |
b099d7 |
XrmQuark resource, /* unused */
|
|
Packit |
b099d7 |
XtArgVal * value)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
String data ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (rc->row_column.menu_accelerator != NULL) {
|
|
Packit |
b099d7 |
data = (String)XtMalloc(strlen(RC_MenuAccelerator(rc)) + 1);
|
|
Packit |
b099d7 |
strcpy(data, RC_MenuAccelerator(rc));
|
|
Packit |
b099d7 |
*value = (XtArgVal) data ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else *value = (XtArgVal) NULL;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*ARGSUSED*/
|
|
Packit |
b099d7 |
void
|
|
Packit |
b099d7 |
_XmRC_GetMnemonicCharSet(
|
|
Packit |
b099d7 |
XmRowColumnWidget rc,
|
|
Packit |
b099d7 |
XrmQuark resource, /* unused */
|
|
Packit |
b099d7 |
XtArgVal * value)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Widget label = XmOptionLabelGadget((Widget)rc);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (label)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
int n = 0;
|
|
Packit |
b099d7 |
Arg al[1] ;
|
|
Packit |
b099d7 |
String data ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtSetArg(al[n], XmNmnemonicCharSet, &data); n++;
|
|
Packit |
b099d7 |
XtGetValues(label, al, n);
|
|
Packit |
b099d7 |
*value = (XtArgVal) data ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
*value = (XtArgVal) NULL;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*ARGSUSED*/
|
|
Packit |
b099d7 |
void
|
|
Packit |
b099d7 |
_XmScaleGetTitleString(
|
|
Packit |
b099d7 |
Widget wid,
|
|
Packit |
b099d7 |
int resource, /* unused */
|
|
Packit |
b099d7 |
XtArgVal *value)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmScaleWidget scale = (XmScaleWidget) wid ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (scale->scale.title == NULL) {
|
|
Packit |
b099d7 |
*value = (XtArgVal) NULL ;
|
|
Packit |
b099d7 |
} else {
|
|
Packit |
b099d7 |
Arg al[1] ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtSetArg (al[0], XmNlabelString, value);
|
|
Packit |
b099d7 |
XtGetValues (scale->composite.children[0], al, 1);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*ARGSUSED*/
|
|
Packit |
b099d7 |
void
|
|
Packit |
b099d7 |
_XmTextFieldDestinationVisible(
|
|
Packit |
b099d7 |
Widget w, /* unused */
|
|
Packit |
b099d7 |
#if NeedWidePrototypes
|
|
Packit |
b099d7 |
int turn_on ) /* unused */
|
|
Packit |
b099d7 |
#else
|
|
Packit |
b099d7 |
Boolean turn_on ) /* unused */
|
|
Packit |
b099d7 |
#endif /* NeedWidePrototypes */
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
return ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
int
|
|
Packit |
b099d7 |
_XmTextGetBaseLine(
|
|
Packit |
b099d7 |
Widget widget )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
return XmTextGetBaseline( widget) ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*ARGSUSED*/
|
|
Packit |
b099d7 |
void
|
|
Packit |
b099d7 |
_XmTextOutLoadGCsAndRecolorCursors(XmTextWidget old_tw, /* unused */
|
|
Packit |
b099d7 |
XmTextWidget new_tw) /* unused */
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
return ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_XmConst char *_XmTextEventBindings1 = _XmTextIn_XmTextEventBindings1 ;
|
|
Packit |
b099d7 |
_XmConst char *_XmTextEventBindings2 = _XmTextIn_XmTextEventBindings2 ;
|
|
Packit |
b099d7 |
_XmConst char *_XmTextEventBindings3 = _XmTextIn_XmTextEventBindings3 ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/************************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* The following are the gadget traversal action routines
|
|
Packit |
b099d7 |
* DD; was in Manager.c but not used anywhere.
|
|
Packit |
b099d7 |
************************************************************************/
|
|
Packit |
b099d7 |
/*ARGSUSED*/
|
|
Packit |
b099d7 |
void
|
|
Packit |
b099d7 |
_XmDoGadgetTraversal(
|
|
Packit |
b099d7 |
XmManagerWidget mw,
|
|
Packit |
b099d7 |
XEvent *event, /* unused */
|
|
Packit |
b099d7 |
int direction )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Widget ref_wid = mw->manager.active_child ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if( ref_wid == NULL )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
ref_wid = (Widget) mw ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
_XmMgrTraversal( ref_wid, (XmTraversalDirection) direction) ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/**********************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* _XmBuildManagerResources
|
|
Packit |
b099d7 |
* Build up the manager's synthetic and constraint synthetic
|
|
Packit |
b099d7 |
* resource processing list by combining the super classes with
|
|
Packit |
b099d7 |
* this class.
|
|
Packit |
b099d7 |
* DD: This one should is now static in Manager.c
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
**********************************************************************/
|
|
Packit |
b099d7 |
void
|
|
Packit |
b099d7 |
_XmBuildManagerResources(
|
|
Packit |
b099d7 |
WidgetClass c )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmManagerWidgetClass wc = (XmManagerWidgetClass) c ;
|
|
Packit |
b099d7 |
XmManagerWidgetClass sc;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
sc = (XmManagerWidgetClass) wc->core_class.superclass;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_XmInitializeSyntheticResources(wc->manager_class.syn_resources,
|
|
Packit |
b099d7 |
wc->manager_class.num_syn_resources);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_XmInitializeSyntheticResources(
|
|
Packit |
b099d7 |
wc->manager_class.syn_constraint_resources,
|
|
Packit |
b099d7 |
wc->manager_class.num_syn_constraint_resources);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (sc == (XmManagerWidgetClass) constraintWidgetClass) return;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_XmBuildResources (&(wc->manager_class.syn_resources),
|
|
Packit |
b099d7 |
&(wc->manager_class.num_syn_resources),
|
|
Packit |
b099d7 |
sc->manager_class.syn_resources,
|
|
Packit |
b099d7 |
sc->manager_class.num_syn_resources);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_XmBuildResources (&(wc->manager_class.syn_constraint_resources),
|
|
Packit |
b099d7 |
&(wc->manager_class.num_syn_constraint_resources),
|
|
Packit |
b099d7 |
sc->manager_class.syn_constraint_resources,
|
|
Packit |
b099d7 |
sc->manager_class.num_syn_constraint_resources);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/** Gadget synthetic hook from Manager.c. Are not static in Gadget.c **/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*ARGSUSED*/
|
|
Packit |
b099d7 |
void
|
|
Packit |
b099d7 |
_XmGetHighlightColor(
|
|
Packit |
b099d7 |
Widget w,
|
|
Packit |
b099d7 |
int offset, /* unused */
|
|
Packit |
b099d7 |
XtArgVal *value )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmManagerWidget mw = (XmManagerWidget) XtParent(w);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
*value = (XtArgVal) mw->manager.highlight_color;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*ARGSUSED*/
|
|
Packit |
b099d7 |
void
|
|
Packit |
b099d7 |
_XmGetTopShadowColor(
|
|
Packit |
b099d7 |
Widget w,
|
|
Packit |
b099d7 |
int offset, /* unused */
|
|
Packit |
b099d7 |
XtArgVal *value )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmManagerWidget mw = (XmManagerWidget) XtParent(w);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
*value = (XtArgVal) mw->manager.top_shadow_color;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*ARGSUSED*/
|
|
Packit |
b099d7 |
void
|
|
Packit |
b099d7 |
_XmGetBottomShadowColor(
|
|
Packit |
b099d7 |
Widget w,
|
|
Packit |
b099d7 |
int offset, /* unused */
|
|
Packit |
b099d7 |
XtArgVal *value )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmManagerWidget mw = (XmManagerWidget) XtParent(w);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
*value = (XtArgVal) mw->manager.bottom_shadow_color;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/************************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* The border highlighting and unhighlighting routines.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* These routines were originally in Primitive.c but not used anywhere.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
************************************************************************/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
void
|
|
Packit |
b099d7 |
_XmHighlightBorder(
|
|
Packit |
b099d7 |
Widget w )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if( XmIsPrimitive( w) ) {
|
|
Packit |
b099d7 |
(*(xmPrimitiveClassRec.primitive_class.border_highlight))( w) ;
|
|
Packit |
b099d7 |
} else {
|
|
Packit |
b099d7 |
if( XmIsGadget( w) ) {
|
|
Packit |
b099d7 |
(*(xmGadgetClassRec.gadget_class.border_highlight))( w) ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
return ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
void
|
|
Packit |
b099d7 |
_XmUnhighlightBorder(
|
|
Packit |
b099d7 |
Widget w )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if( XmIsPrimitive( w) )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
(*(xmPrimitiveClassRec.primitive_class.border_unhighlight))( w) ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{ if( XmIsGadget( w) )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
(*(xmGadgetClassRec.gadget_class.border_unhighlight))( w) ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
return ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/************************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* This routine was global in Primitive.c. It is now static.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
************************************************************************/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
void
|
|
Packit |
b099d7 |
_XmBuildPrimitiveResources(
|
|
Packit |
b099d7 |
WidgetClass c )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmPrimitiveWidgetClass wc = (XmPrimitiveWidgetClass) c ;
|
|
Packit |
b099d7 |
XmPrimitiveWidgetClass sc;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
sc = (XmPrimitiveWidgetClass) wc->core_class.superclass;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_XmInitializeSyntheticResources(wc->primitive_class.syn_resources,
|
|
Packit |
b099d7 |
wc->primitive_class.num_syn_resources);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (sc == (XmPrimitiveWidgetClass) widgetClass) return;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_XmBuildResources (&(wc->primitive_class.syn_resources),
|
|
Packit |
b099d7 |
&(wc->primitive_class.num_syn_resources),
|
|
Packit |
b099d7 |
sc->primitive_class.syn_resources,
|
|
Packit |
b099d7 |
sc->primitive_class.num_syn_resources);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|