|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Motif
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* Copyright (c) 1987-2012, The Open Group. All rights reserved.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* These libraries and programs are free software; you can
|
|
Packit |
b099d7 |
* redistribute them and/or modify them under the terms of the GNU
|
|
Packit |
b099d7 |
* Lesser General Public License as published by the Free Software
|
|
Packit |
b099d7 |
* Foundation; either version 2 of the License, or (at your option)
|
|
Packit |
b099d7 |
* any later version.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* These libraries and programs are distributed in the hope that
|
|
Packit |
b099d7 |
* they will be useful, but WITHOUT ANY WARRANTY; without even the
|
|
Packit |
b099d7 |
* implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
|
Packit |
b099d7 |
* PURPOSE. See the GNU Lesser General Public License for more
|
|
Packit |
b099d7 |
* details.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* You should have received a copy of the GNU Lesser General Public
|
|
Packit |
b099d7 |
* License along with these librararies and programs; if not, write
|
|
Packit |
b099d7 |
* to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
|
|
Packit |
b099d7 |
* Floor, Boston, MA 02110-1301 USA
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* HISTORY
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
#ifdef REV_INFO
|
|
Packit |
b099d7 |
#ifndef lint
|
|
Packit |
b099d7 |
static char rcsid[] = "$TOG: ArrowBG.c /main/20 1999/01/26 15:30:15 mgreess $"
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
/* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#ifdef HAVE_CONFIG_H
|
|
Packit |
b099d7 |
#include <config.h>
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#include <stdio.h>
|
|
Packit |
b099d7 |
#include <Xm/ArrowBGP.h>
|
|
Packit |
b099d7 |
#include <Xm/DrawP.h>
|
|
Packit |
b099d7 |
#include <Xm/ManagerP.h>
|
|
Packit |
b099d7 |
#include <Xm/TraitP.h>
|
|
Packit |
b099d7 |
#include <Xm/AccColorT.h>
|
|
Packit |
b099d7 |
#include <Xm/ActivatableT.h>
|
|
Packit |
b099d7 |
#include <Xm/CareVisualT.h>
|
|
Packit |
b099d7 |
#include <Xm/VaSimpleP.h>
|
|
Packit |
b099d7 |
#include "ColorI.h"
|
|
Packit |
b099d7 |
#include "PixConvI.h"
|
|
Packit |
b099d7 |
#include "PrimitiveI.h"
|
|
Packit |
b099d7 |
#include "RepTypeI.h"
|
|
Packit |
b099d7 |
#include "ScreenI.h"
|
|
Packit |
b099d7 |
#include "TravActI.h"
|
|
Packit |
b099d7 |
#include "TraversalI.h"
|
|
Packit |
b099d7 |
#include "XmI.h"
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#define DELAY_DEFAULT 100
|
|
Packit |
b099d7 |
#define INVALID_PIXEL ((Pixel) -1)
|
|
Packit |
b099d7 |
#define INVALID_PIXMAP ((Pixmap) -1)
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/******** Static Function Declarations ********/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static Pixmap GetHighlightPixmapDefault(XmArrowButtonGadget ag);
|
|
Packit |
b099d7 |
static Pixmap GetTopShadowPixmapDefault(XmArrowButtonGadget ag);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void ClassPartInitialize(WidgetClass wc);
|
|
Packit |
b099d7 |
static void Initialize(Widget rw,
|
|
Packit |
b099d7 |
Widget nw,
|
|
Packit |
b099d7 |
ArgList args,
|
|
Packit |
b099d7 |
Cardinal *num_args);
|
|
Packit |
b099d7 |
static void GetArrowGC(XmArrowButtonGadget ag);
|
|
Packit |
b099d7 |
static void GetBackgroundGC(XmArrowButtonGadget ag);
|
|
Packit |
b099d7 |
static void Redisplay(Widget w, XEvent *event, Region region);
|
|
Packit |
b099d7 |
static void Destroy(Widget w);
|
|
Packit |
b099d7 |
static Boolean SetValues(Widget cw,
|
|
Packit |
b099d7 |
Widget rw,
|
|
Packit |
b099d7 |
Widget nw,
|
|
Packit |
b099d7 |
ArgList args,
|
|
Packit |
b099d7 |
Cardinal *num_args);
|
|
Packit |
b099d7 |
static void HighlightBorder(Widget w);
|
|
Packit |
b099d7 |
static void InputDispatch(Widget wid, XEvent *event, Mask event_mask);
|
|
Packit |
b099d7 |
static void Arm(XmArrowButtonGadget aw, XEvent *event);
|
|
Packit |
b099d7 |
static void Activate(Widget wid,
|
|
Packit |
b099d7 |
XEvent *event,
|
|
Packit |
b099d7 |
String *params,
|
|
Packit |
b099d7 |
Cardinal *num_params);
|
|
Packit |
b099d7 |
static void ArmAndActivate(Widget w,
|
|
Packit |
b099d7 |
XEvent *event,
|
|
Packit |
b099d7 |
String *params,
|
|
Packit |
b099d7 |
Cardinal *num_params);
|
|
Packit |
b099d7 |
static void ArmTimeout(XtPointer data, XtIntervalId *id);
|
|
Packit |
b099d7 |
static void Disarm(XmArrowButtonGadget aw, XEvent *event);
|
|
Packit |
b099d7 |
static void Enter(XmArrowButtonGadget aw, XEvent *event);
|
|
Packit |
b099d7 |
static void Leave(XmArrowButtonGadget aw, XEvent *event);
|
|
Packit |
b099d7 |
static void Help(XmArrowButtonGadget aw, XEvent *event);
|
|
Packit |
b099d7 |
static void ActivateCommonG(XmArrowButtonGadget ag,
|
|
Packit |
b099d7 |
XEvent *event,
|
|
Packit |
b099d7 |
Mask event_mask);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void ChangeCB(Widget w,
|
|
Packit |
b099d7 |
XtCallbackProc activCB,
|
|
Packit |
b099d7 |
XtPointer closure,
|
|
Packit |
b099d7 |
Boolean setunset);
|
|
Packit |
b099d7 |
static Boolean HandleRedraw(Widget kid,
|
|
Packit |
b099d7 |
Widget cur_parent,
|
|
Packit |
b099d7 |
Widget new_parent,
|
|
Packit |
b099d7 |
Mask visual_flag);
|
|
Packit |
b099d7 |
static void InitNewColorBehavior(XmArrowButtonGadget ag);
|
|
Packit |
b099d7 |
static void DealWithColors(XmArrowButtonGadget ag);
|
|
Packit |
b099d7 |
static void DealWithPixmaps(XmArrowButtonGadget ag);
|
|
Packit |
b099d7 |
static void InitNewPixmapBehavior(XmArrowButtonGadget ag);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void DrawArrowG(XmArrowButtonGadget ag,
|
|
Packit |
b099d7 |
GC top_gc,
|
|
Packit |
b099d7 |
GC bottom_gc,
|
|
Packit |
b099d7 |
GC center_gc);
|
|
Packit |
b099d7 |
static void GetColors(Widget widget, XmAccessColorData color_data);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/******** End Static Function Declarations ********/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Resource list for Arrow */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static XtResource resources[] =
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNmultiClick, XmCMultiClick, XmRMultiClick,
|
|
Packit |
b099d7 |
sizeof(unsigned char),
|
|
Packit |
b099d7 |
XtOffsetOf(struct _XmArrowButtonGadgetRec, arrowbutton.multiClick),
|
|
Packit |
b099d7 |
XmRImmediate, (XtPointer) XmMULTICLICK_KEEP
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNarrowDirection, XmCArrowDirection, XmRArrowDirection,
|
|
Packit |
b099d7 |
sizeof(unsigned char),
|
|
Packit |
b099d7 |
XtOffsetOf(struct _XmArrowButtonGadgetRec, arrowbutton.direction),
|
|
Packit |
b099d7 |
XmRImmediate, (XtPointer) XmARROW_UP
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNactivateCallback, XmCCallback, XmRCallback, sizeof(XtCallbackList),
|
|
Packit |
b099d7 |
XtOffsetOf(struct _XmArrowButtonGadgetRec, arrowbutton.activate_callback),
|
|
Packit |
b099d7 |
XmRPointer, (XtPointer) NULL
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNarmCallback, XmCCallback, XmRCallback, sizeof(XtCallbackList),
|
|
Packit |
b099d7 |
XtOffsetOf(struct _XmArrowButtonGadgetRec, arrowbutton.arm_callback),
|
|
Packit |
b099d7 |
XmRPointer, (XtPointer) NULL
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNdisarmCallback, XmCCallback, XmRCallback, sizeof(XtCallbackList),
|
|
Packit |
b099d7 |
XtOffsetOf(struct _XmArrowButtonGadgetRec, arrowbutton.disarm_callback),
|
|
Packit |
b099d7 |
XmRPointer, (XtPointer) NULL
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNbackground, XmCBackground, XmRPixel,
|
|
Packit |
b099d7 |
sizeof(Pixel),
|
|
Packit |
b099d7 |
XtOffsetOf(struct _XmArrowButtonGadgetRec, arrowbutton.background),
|
|
Packit |
b099d7 |
XmRImmediate, (XtPointer) INVALID_PIXEL
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNforeground, XmCForeground, XmRPixel,
|
|
Packit |
b099d7 |
sizeof(Pixel),
|
|
Packit |
b099d7 |
XtOffsetOf(struct _XmArrowButtonGadgetRec, arrowbutton.foreground),
|
|
Packit |
b099d7 |
XmRImmediate, (XtPointer) INVALID_PIXEL
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNtopShadowColor, XmCTopShadowColor, XmRPixel,
|
|
Packit |
b099d7 |
sizeof(Pixel),
|
|
Packit |
b099d7 |
XtOffsetOf(struct _XmArrowButtonGadgetRec, arrowbutton.top_shadow_color),
|
|
Packit |
b099d7 |
XmRImmediate, (XtPointer) INVALID_PIXEL
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNtopShadowPixmap, XmCTopShadowPixmap, XmRNoScalingDynamicPixmap,
|
|
Packit |
b099d7 |
sizeof(Pixmap),
|
|
Packit |
b099d7 |
XtOffsetOf(struct _XmArrowButtonGadgetRec, arrowbutton.top_shadow_pixmap),
|
|
Packit |
b099d7 |
XmRImmediate, (XtPointer) INVALID_PIXMAP
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNbottomShadowColor, XmCBottomShadowColor, XmRPixel,
|
|
Packit |
b099d7 |
sizeof(Pixel),
|
|
Packit |
b099d7 |
XtOffsetOf(struct _XmArrowButtonGadgetRec, arrowbutton.bottom_shadow_color),
|
|
Packit |
b099d7 |
XmRImmediate, (XtPointer) INVALID_PIXEL
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNbottomShadowPixmap, XmCBottomShadowPixmap, XmRNoScalingDynamicPixmap,
|
|
Packit |
b099d7 |
sizeof(Pixmap),
|
|
Packit |
b099d7 |
XtOffsetOf(struct _XmArrowButtonGadgetRec, arrowbutton.bottom_shadow_pixmap),
|
|
Packit |
b099d7 |
XmRImmediate, (XtPointer) XmUNSPECIFIED_PIXMAP
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNhighlightColor, XmCHighlightColor, XmRPixel,
|
|
Packit |
b099d7 |
sizeof(Pixel),
|
|
Packit |
b099d7 |
XtOffsetOf(struct _XmArrowButtonGadgetRec, arrowbutton.highlight_color),
|
|
Packit |
b099d7 |
XmRImmediate, (XtPointer) INVALID_PIXEL
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNhighlightPixmap, XmCHighlightPixmap, XmRNoScalingDynamicPixmap,
|
|
Packit |
b099d7 |
sizeof(Pixmap),
|
|
Packit |
b099d7 |
XtOffsetOf(struct _XmArrowButtonGadgetRec, arrowbutton.highlight_pixmap),
|
|
Packit |
b099d7 |
XmRImmediate, (XtPointer) INVALID_PIXMAP
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNdetailShadowThickness, XmCShadowThickness, XmRHorizontalDimension,
|
|
Packit |
b099d7 |
sizeof (Dimension),
|
|
Packit |
b099d7 |
XtOffsetOf(XmArrowButtonGadgetRec, arrowbutton.detail_shadow_thickness),
|
|
Packit |
b099d7 |
XmRCallProc, (XtPointer) _XmSetThickness
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
};
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static XmSyntheticResource syn_resources[] =
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNdetailShadowThickness,
|
|
Packit |
b099d7 |
sizeof(Dimension),
|
|
Packit |
b099d7 |
XtOffsetOf(XmArrowButtonGadgetRec, arrowbutton.detail_shadow_thickness),
|
|
Packit |
b099d7 |
XmeFromHorizontalPixels,XmeToHorizontalPixels
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
};
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* The Arrow class record definition */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
externaldef(xmarrowbuttongadgetclassrec) XmArrowButtonGadgetClassRec
|
|
Packit |
b099d7 |
xmArrowButtonGadgetClassRec =
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
{ /* object fields */
|
|
Packit |
b099d7 |
(WidgetClass) &xmGadgetClassRec, /* superclass */
|
|
Packit |
b099d7 |
"XmArrowButtonGadget", /* class_name */
|
|
Packit |
b099d7 |
sizeof(XmArrowButtonGadgetRec), /* widget_size */
|
|
Packit |
b099d7 |
(XtProc)NULL, /* class_initialize */
|
|
Packit |
b099d7 |
ClassPartInitialize, /* class_part_initialize */
|
|
Packit |
b099d7 |
FALSE, /* class_inited */
|
|
Packit |
b099d7 |
Initialize, /* initialize */
|
|
Packit |
b099d7 |
(XtArgsProc)NULL, /* initialize_hook */
|
|
Packit |
b099d7 |
NULL, /* realize */
|
|
Packit |
b099d7 |
NULL, /* actions */
|
|
Packit |
b099d7 |
0, /* num_actions */
|
|
Packit |
b099d7 |
resources, /* resources */
|
|
Packit |
b099d7 |
XtNumber(resources), /* num_resources */
|
|
Packit |
b099d7 |
NULLQUARK, /* xrm_class */
|
|
Packit |
b099d7 |
TRUE, /* compress_motion */
|
|
Packit |
b099d7 |
XtExposeCompressMaximal, /* compress_exposure */
|
|
Packit |
b099d7 |
TRUE, /* compress_enterleave */
|
|
Packit |
b099d7 |
FALSE, /* visible_interest */
|
|
Packit |
b099d7 |
Destroy, /* destroy */
|
|
Packit |
b099d7 |
(XtWidgetProc)NULL, /* resize */
|
|
Packit |
b099d7 |
Redisplay, /* expose */
|
|
Packit |
b099d7 |
SetValues, /* set_values */
|
|
Packit |
b099d7 |
(XtArgsFunc)NULL, /* set_values_hook */
|
|
Packit |
b099d7 |
XtInheritSetValuesAlmost, /* set_values_almost */
|
|
Packit |
b099d7 |
(XtArgsProc)NULL, /* get_values_hook */
|
|
Packit |
b099d7 |
NULL, /* accept_focus */
|
|
Packit |
b099d7 |
XtVersion, /* version */
|
|
Packit |
b099d7 |
(XtPointer)NULL, /* callback private */
|
|
Packit |
b099d7 |
(String)NULL, /* tm_table */
|
|
Packit |
b099d7 |
(XtGeometryHandler)NULL, /* query_geometry */
|
|
Packit |
b099d7 |
NULL, /* display_accelerator */
|
|
Packit |
b099d7 |
(XtPointer)NULL /* extension */
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{ /* XmGadget fields */
|
|
Packit |
b099d7 |
HighlightBorder, /* border highlight */
|
|
Packit |
b099d7 |
XmInheritBorderUnhighlight, /* border_unhighlight */
|
|
Packit |
b099d7 |
ArmAndActivate, /* arm_and_activate */
|
|
Packit |
b099d7 |
InputDispatch, /* input dispatch */
|
|
Packit |
b099d7 |
XmInheritVisualChange, /* visual_change */
|
|
Packit |
b099d7 |
syn_resources, /* syn_resources */
|
|
Packit |
b099d7 |
XtNumber(syn_resources), /* num_syn_resources */
|
|
Packit |
b099d7 |
(XmCacheClassPartPtr)NULL, /* class cache part */
|
|
Packit |
b099d7 |
(XtPointer)NULL /* extension */
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{ /* XmArrowButtonGadget fields */
|
|
Packit |
b099d7 |
(XtPointer)NULL /* extension */
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
};
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
externaldef(xmarrowbuttongadgetclass) WidgetClass xmArrowButtonGadgetClass =
|
|
Packit |
b099d7 |
(WidgetClass) &xmArrowButtonGadgetClassRec;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Trait record for arrowBG */
|
|
Packit |
b099d7 |
static XmConst XmActivatableTraitRec arrowBGAT =
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
0, /* version */
|
|
Packit |
b099d7 |
ChangeCB /* changeCB */
|
|
Packit |
b099d7 |
};
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static XmConst XmCareVisualTraitRec arrowBGCVT =
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
0, /* version */
|
|
Packit |
b099d7 |
HandleRedraw /* redraw */
|
|
Packit |
b099d7 |
};
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Access Colors Trait record for arrow button gadget */
|
|
Packit |
b099d7 |
static XmConst XmAccessColorsTraitRec arrowBGACT =
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
0, /* version */
|
|
Packit |
b099d7 |
GetColors, /* getColors */
|
|
Packit |
b099d7 |
NULL /* setColors */
|
|
Packit |
b099d7 |
};
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static Pixmap
|
|
Packit |
b099d7 |
GetHighlightPixmapDefault(XmArrowButtonGadget ag)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmManagerWidget mw = (XmManagerWidget)XtParent(ag);
|
|
Packit |
b099d7 |
Pixmap result = XmUNSPECIFIED_PIXMAP;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (ag->arrowbutton.highlight_color == ag->arrowbutton.background)
|
|
Packit |
b099d7 |
result = XmGetPixmapByDepth(XtScreen(ag), XmS50_foreground,
|
|
Packit |
b099d7 |
ag->arrowbutton.highlight_color,
|
|
Packit |
b099d7 |
ag->arrowbutton.foreground,
|
|
Packit |
b099d7 |
mw->core.depth);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
return result;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static Pixmap
|
|
Packit |
b099d7 |
GetTopShadowPixmapDefault(XmArrowButtonGadget ag)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmManagerWidget mw = (XmManagerWidget)XtParent(ag);
|
|
Packit |
b099d7 |
Pixmap result = XmUNSPECIFIED_PIXMAP;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (ag->arrowbutton.top_shadow_color == ag->arrowbutton.background)
|
|
Packit |
b099d7 |
result = XmGetPixmapByDepth(XtScreen(ag), XmS50_foreground,
|
|
Packit |
b099d7 |
ag->arrowbutton.top_shadow_color,
|
|
Packit |
b099d7 |
ag->arrowbutton.foreground,
|
|
Packit |
b099d7 |
mw->core.depth);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
else if (DefaultDepthOfScreen(XtScreen(ag)) == 1)
|
|
Packit |
b099d7 |
result = XmGetPixmapByDepth(XtScreen(ag), XmS50_foreground,
|
|
Packit |
b099d7 |
ag->arrowbutton.top_shadow_color,
|
|
Packit |
b099d7 |
ag->arrowbutton.background,
|
|
Packit |
b099d7 |
mw->core.depth);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
return result;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/************************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* ClassPartInitialize
|
|
Packit |
b099d7 |
* Set up the fast subclassing for the widget
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
************************************************************************/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
ClassPartInitialize(
|
|
Packit |
b099d7 |
WidgetClass wc)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
_XmFastSubclassInit (wc, XmARROW_BUTTON_GADGET_BIT);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Install the activatable trait for all subclasses */
|
|
Packit |
b099d7 |
XmeTraitSet((XtPointer)wc, XmQTactivatable, (XtPointer)&arrowBGAT);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Install the careParentVisual trait for all subclasses as well. */
|
|
Packit |
b099d7 |
XmeTraitSet((XtPointer)wc, XmQTcareParentVisual, (XtPointer)&arrowBGCVT);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Install the accessColors trait for all subclasses as well. */
|
|
Packit |
b099d7 |
XmeTraitSet((XtPointer)wc, XmQTaccessColors, (XtPointer)&arrowBGACT);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/************************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* Initialize
|
|
Packit |
b099d7 |
* The main widget instance initialization routine.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
************************************************************************/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*ARGSUSED*/
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
Initialize(
|
|
Packit |
b099d7 |
Widget rw,
|
|
Packit |
b099d7 |
Widget nw,
|
|
Packit |
b099d7 |
ArgList args, /* unused */
|
|
Packit |
b099d7 |
Cardinal *num_args) /* unused */
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmArrowButtonGadget request = (XmArrowButtonGadget) rw;
|
|
Packit |
b099d7 |
XmArrowButtonGadget new_w = (XmArrowButtonGadget) nw;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Check the data put into the new widget from .Xdefaults
|
|
Packit |
b099d7 |
* or through the arg list.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
if (!XmRepTypeValidValue(XmRID_ARROW_DIRECTION,
|
|
Packit |
b099d7 |
new_w->arrowbutton.direction, (Widget) new_w))
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
new_w->arrowbutton.direction = XmARROW_UP;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Set up a geometry for the widget if it is currently 0. */
|
|
Packit |
b099d7 |
if (request->rectangle.width == 0)
|
|
Packit |
b099d7 |
new_w->rectangle.width += 15;
|
|
Packit |
b099d7 |
if (request->rectangle.height == 0)
|
|
Packit |
b099d7 |
new_w->rectangle.height += 15;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Set the internal arrow variables */
|
|
Packit |
b099d7 |
new_w->arrowbutton.timer = 0;
|
|
Packit |
b099d7 |
new_w->arrowbutton.selected = False;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Get the drawing graphics contexts. */
|
|
Packit |
b099d7 |
DealWithColors(new_w);
|
|
Packit |
b099d7 |
DealWithPixmaps(new_w);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
GetArrowGC (new_w);
|
|
Packit |
b099d7 |
GetBackgroundGC (new_w);
|
|
Packit |
b099d7 |
new_w->arrowbutton.highlight_GC =
|
|
Packit |
b099d7 |
_XmGetPixmapBasedGC (XtParent(nw),
|
|
Packit |
b099d7 |
new_w->arrowbutton.highlight_color,
|
|
Packit |
b099d7 |
new_w->arrowbutton.background,
|
|
Packit |
b099d7 |
new_w->arrowbutton.highlight_pixmap);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
new_w->arrowbutton.top_shadow_GC =
|
|
Packit |
b099d7 |
_XmGetPixmapBasedGC (XtParent(nw),
|
|
Packit |
b099d7 |
new_w->arrowbutton.top_shadow_color,
|
|
Packit |
b099d7 |
new_w->arrowbutton.background,
|
|
Packit |
b099d7 |
new_w->arrowbutton.top_shadow_pixmap);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
new_w->arrowbutton.bottom_shadow_GC =
|
|
Packit |
b099d7 |
_XmGetPixmapBasedGC (XtParent(nw),
|
|
Packit |
b099d7 |
new_w->arrowbutton.bottom_shadow_color,
|
|
Packit |
b099d7 |
new_w->arrowbutton.background,
|
|
Packit |
b099d7 |
new_w->arrowbutton.bottom_shadow_pixmap);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Initialize the interesting input types. */
|
|
Packit |
b099d7 |
new_w->gadget.event_mask = XmARM_EVENT | XmACTIVATE_EVENT | XmHELP_EVENT |
|
|
Packit |
b099d7 |
XmFOCUS_IN_EVENT | XmFOCUS_OUT_EVENT | XmENTER_EVENT | XmLEAVE_EVENT
|
|
Packit |
b099d7 |
| XmMULTI_ARM_EVENT| XmMULTI_ACTIVATE_EVENT;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/************************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* GetBackgroundGC
|
|
Packit |
b099d7 |
* Get the graphics context used for drawing the background.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
************************************************************************/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
GetBackgroundGC(
|
|
Packit |
b099d7 |
XmArrowButtonGadget ag)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XGCValues values;
|
|
Packit |
b099d7 |
XtGCMask valueMask;
|
|
Packit |
b099d7 |
XmManagerWidget mw = (XmManagerWidget) XtParent(ag);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
ag->arrowbutton.fill_bg_box =
|
|
Packit |
b099d7 |
((mw->core.background_pixel != ag->arrowbutton.background) &&
|
|
Packit |
b099d7 |
(mw->core.background_pixmap == XmUNSPECIFIED_PIXMAP));
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (!ag->arrowbutton.fill_bg_box)
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
valueMask = GCForeground | GCBackground;
|
|
Packit |
b099d7 |
values.foreground = ag->arrowbutton.background;
|
|
Packit |
b099d7 |
values.background = ag->arrowbutton.foreground;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
ag->arrowbutton.background_GC = XtGetGC ((Widget) mw, valueMask, &values);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/************************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* GetArrowGC
|
|
Packit |
b099d7 |
* Get the graphics context used for drawing the arrowbutton.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
************************************************************************/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
GetArrowGC(
|
|
Packit |
b099d7 |
XmArrowButtonGadget ag)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XGCValues values;
|
|
Packit |
b099d7 |
XtGCMask valueMask, unusedMask;
|
|
Packit |
b099d7 |
XmManagerWidget mw = (XmManagerWidget) XtParent(ag);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
valueMask = GCForeground | GCBackground | GCGraphicsExposures;
|
|
Packit |
b099d7 |
unusedMask = GCClipXOrigin | GCClipYOrigin | GCFont;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
values.foreground = ag->arrowbutton.foreground;
|
|
Packit |
b099d7 |
values.background = ag->arrowbutton.background;
|
|
Packit |
b099d7 |
values.graphics_exposures = False;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
ag->arrowbutton.arrow_GC = XtAllocateGC ((Widget) mw, 0, valueMask, &values,
|
|
Packit |
b099d7 |
GCClipMask, unusedMask);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
valueMask |= GCFillStyle | GCStipple;
|
|
Packit |
b099d7 |
values.fill_style = FillOpaqueStippled;
|
|
Packit |
b099d7 |
values.stipple = _XmGetInsensitiveStippleBitmap((Widget) ag);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
ag->arrowbutton.insensitive_GC = XtAllocateGC((Widget) mw, 0, valueMask,
|
|
Packit |
b099d7 |
&values, GCClipMask,
|
|
Packit |
b099d7 |
unusedMask);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/************************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* Redisplay
|
|
Packit |
b099d7 |
* General redisplay function called on exposure events.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
************************************************************************/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*ARGSUSED*/
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
Redisplay(
|
|
Packit |
b099d7 |
Widget w,
|
|
Packit |
b099d7 |
XEvent *event,
|
|
Packit |
b099d7 |
Region region)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmArrowButtonGadget aw = (XmArrowButtonGadget) w;
|
|
Packit |
b099d7 |
int iwidth, iheight;
|
|
Packit |
b099d7 |
int background_x_offset, background_y_offset, background_width,
|
|
Packit |
b099d7 |
background_height;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
iwidth = (int) aw->rectangle.width - 2 * aw->gadget.highlight_thickness;
|
|
Packit |
b099d7 |
iheight = (int) aw->rectangle.height - 2 * aw->gadget.highlight_thickness;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
background_x_offset = (aw->rectangle.x +
|
|
Packit |
b099d7 |
aw->gadget.highlight_thickness +
|
|
Packit |
b099d7 |
aw->gadget.shadow_thickness);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
background_y_offset = (aw->rectangle.y +
|
|
Packit |
b099d7 |
aw->gadget.highlight_thickness +
|
|
Packit |
b099d7 |
aw->gadget.shadow_thickness);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
background_height = iheight - 2 * aw->gadget.shadow_thickness;
|
|
Packit |
b099d7 |
background_width = iwidth - 2 * aw->gadget.shadow_thickness;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (aw->arrowbutton.fill_bg_box)
|
|
Packit |
b099d7 |
XFillRectangle(XtDisplay(aw),
|
|
Packit |
b099d7 |
XtWindow((Widget) aw),
|
|
Packit |
b099d7 |
aw->arrowbutton.background_GC,
|
|
Packit |
b099d7 |
background_x_offset,
|
|
Packit |
b099d7 |
background_y_offset,
|
|
Packit |
b099d7 |
background_width,
|
|
Packit |
b099d7 |
background_height);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Draw the arrow */
|
|
Packit |
b099d7 |
if ((iwidth > 0) && (iheight > 0))
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if (aw->gadget.shadow_thickness > 0)
|
|
Packit |
b099d7 |
XmeDrawShadows (XtDisplay (aw), XtWindow (aw),
|
|
Packit |
b099d7 |
aw->arrowbutton.top_shadow_GC,
|
|
Packit |
b099d7 |
aw->arrowbutton.bottom_shadow_GC,
|
|
Packit |
b099d7 |
aw->rectangle.x + aw->gadget.highlight_thickness,
|
|
Packit |
b099d7 |
aw->rectangle.y + aw->gadget.highlight_thickness,
|
|
Packit |
b099d7 |
aw->rectangle.width - 2 *
|
|
Packit |
b099d7 |
aw->gadget.highlight_thickness,
|
|
Packit |
b099d7 |
aw->rectangle.height-2 *
|
|
Packit |
b099d7 |
aw->gadget.highlight_thickness,
|
|
Packit |
b099d7 |
aw->gadget.shadow_thickness, XmSHADOW_OUT);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (aw->arrowbutton.selected && XtIsSensitive(w))
|
|
Packit |
b099d7 |
DrawArrowG(aw, aw->arrowbutton.bottom_shadow_GC,
|
|
Packit |
b099d7 |
aw->arrowbutton.top_shadow_GC, aw->arrowbutton.arrow_GC);
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
DrawArrowG(aw, aw->arrowbutton.top_shadow_GC,
|
|
Packit |
b099d7 |
aw->arrowbutton.bottom_shadow_GC,
|
|
Packit |
b099d7 |
(XtIsSensitive(w) ?
|
|
Packit |
b099d7 |
aw->arrowbutton.arrow_GC : aw->arrowbutton.insensitive_GC));
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (aw->gadget.highlighted)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
(*(xmArrowButtonGadgetClassRec.gadget_class.border_highlight)) (w);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* DealWithColors
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* Deal with compatibility.
|
|
Packit |
b099d7 |
* If any resource is set initialize like a widget otherwise get
|
|
Packit |
b099d7 |
* everything from the parent.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
DealWithColors(
|
|
Packit |
b099d7 |
XmArrowButtonGadget ag)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmManagerWidget mw = (XmManagerWidget) XtParent(ag);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* If the gadget color is set to the tag value or it is the
|
|
Packit |
b099d7 |
* same as the manager color; bc mode is enabled otherwise
|
|
Packit |
b099d7 |
* initialize like a widget.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
if ((ag->arrowbutton.background == INVALID_PIXEL ||
|
|
Packit |
b099d7 |
ag->arrowbutton.background == mw->core.background_pixel) &&
|
|
Packit |
b099d7 |
(ag->arrowbutton.foreground == INVALID_PIXEL ||
|
|
Packit |
b099d7 |
ag->arrowbutton.foreground == mw->manager.foreground) &&
|
|
Packit |
b099d7 |
(ag->arrowbutton.top_shadow_color == INVALID_PIXEL ||
|
|
Packit |
b099d7 |
ag->arrowbutton.top_shadow_color == mw->manager.top_shadow_color) &&
|
|
Packit |
b099d7 |
(ag->arrowbutton.bottom_shadow_color == INVALID_PIXEL ||
|
|
Packit |
b099d7 |
ag->arrowbutton.bottom_shadow_color == mw->manager.bottom_shadow_color) &&
|
|
Packit |
b099d7 |
(ag->arrowbutton.highlight_color == INVALID_PIXEL ||
|
|
Packit |
b099d7 |
ag->arrowbutton.highlight_color == mw->manager.highlight_color))
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
ag->arrowbutton.background = mw->core.background_pixel;
|
|
Packit |
b099d7 |
ag->arrowbutton.foreground = mw->manager.foreground;
|
|
Packit |
b099d7 |
ag->arrowbutton.top_shadow_color = mw->manager.top_shadow_color;
|
|
Packit |
b099d7 |
ag->arrowbutton.bottom_shadow_color = mw->manager.bottom_shadow_color;
|
|
Packit |
b099d7 |
ag->arrowbutton.highlight_color = mw->manager.highlight_color;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
InitNewColorBehavior(ag);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
InitNewColorBehavior(
|
|
Packit |
b099d7 |
XmArrowButtonGadget ag)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XrmValue value;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
value.size = sizeof(Pixel);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (ag->arrowbutton.background == INVALID_PIXEL)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
_XmBackgroundColorDefault ((Widget)ag,
|
|
Packit |
b099d7 |
XtOffsetOf(struct _XmArrowButtonGadgetRec,
|
|
Packit |
b099d7 |
arrowbutton.background),
|
|
Packit |
b099d7 |
&value);
|
|
Packit |
b099d7 |
memcpy((char*) &ag->arrowbutton.background, value.addr, value.size);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (ag->arrowbutton.foreground == INVALID_PIXEL)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
_XmForegroundColorDefault ((Widget)ag,
|
|
Packit |
b099d7 |
XtOffsetOf(struct _XmArrowButtonGadgetRec,
|
|
Packit |
b099d7 |
arrowbutton.foreground),
|
|
Packit |
b099d7 |
&value);
|
|
Packit |
b099d7 |
memcpy((char*) &ag->arrowbutton.foreground, value.addr, value.size);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (ag->arrowbutton.top_shadow_color == INVALID_PIXEL)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
_XmTopShadowColorDefault ((Widget)ag,
|
|
Packit |
b099d7 |
XtOffsetOf(struct _XmArrowButtonGadgetRec,
|
|
Packit |
b099d7 |
arrowbutton.top_shadow_color),
|
|
Packit |
b099d7 |
&value);
|
|
Packit |
b099d7 |
memcpy((char*)&ag->arrowbutton.top_shadow_color, value.addr,value.size);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (ag->arrowbutton.bottom_shadow_color == INVALID_PIXEL)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
_XmBottomShadowColorDefault((Widget)ag,
|
|
Packit |
b099d7 |
XtOffsetOf(struct _XmArrowButtonGadgetRec,
|
|
Packit |
b099d7 |
arrowbutton.bottom_shadow_color),
|
|
Packit |
b099d7 |
&value);
|
|
Packit |
b099d7 |
memcpy((char*)&ag->arrowbutton.bottom_shadow_color, value.addr, value.size);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (ag->arrowbutton.highlight_color == INVALID_PIXEL)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
_XmHighlightColorDefault((Widget)ag,
|
|
Packit |
b099d7 |
XtOffsetOf(struct _XmArrowButtonGadgetRec,
|
|
Packit |
b099d7 |
arrowbutton.highlight_color),
|
|
Packit |
b099d7 |
&value);
|
|
Packit |
b099d7 |
memcpy((char*) &ag->arrowbutton.highlight_color, value.addr,value.size);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* DealWithPixmaps
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* Deal with compatibility.
|
|
Packit |
b099d7 |
* If any resource is set initialize like a widget otherwise get
|
|
Packit |
b099d7 |
* everything from the parent.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
DealWithPixmaps(
|
|
Packit |
b099d7 |
XmArrowButtonGadget ag)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmManagerWidget mw = (XmManagerWidget) XtParent(ag);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if ((ag->arrowbutton.top_shadow_pixmap == INVALID_PIXMAP ||
|
|
Packit |
b099d7 |
ag->arrowbutton.top_shadow_pixmap == mw->manager.top_shadow_pixmap) &&
|
|
Packit |
b099d7 |
(ag->arrowbutton.highlight_pixmap == INVALID_PIXMAP ||
|
|
Packit |
b099d7 |
ag->arrowbutton.highlight_pixmap == mw->manager.highlight_pixmap))
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
ag->arrowbutton.top_shadow_pixmap = mw->manager.top_shadow_pixmap;
|
|
Packit |
b099d7 |
ag->arrowbutton.highlight_pixmap = mw->manager.highlight_pixmap;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
InitNewPixmapBehavior(ag);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* InitNewPixmapBehavior
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* Initialize colors like a widget.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
InitNewPixmapBehavior(
|
|
Packit |
b099d7 |
XmArrowButtonGadget ag)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if (ag->arrowbutton.top_shadow_pixmap == INVALID_PIXMAP)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
ag->arrowbutton.top_shadow_pixmap = GetTopShadowPixmapDefault(ag);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (ag->arrowbutton.highlight_pixmap == INVALID_PIXMAP)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
ag->arrowbutton.highlight_pixmap = GetHighlightPixmapDefault(ag);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/************************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* Destroy
|
|
Packit |
b099d7 |
* Clean up allocated resources when the widget is destroyed.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
************************************************************************/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
Destroy(
|
|
Packit |
b099d7 |
Widget w)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmArrowButtonGadget aw = (XmArrowButtonGadget) w;
|
|
Packit |
b099d7 |
XmManagerWidget mw = (XmManagerWidget) XtParent(aw);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (aw->arrowbutton.timer)
|
|
Packit |
b099d7 |
XtRemoveTimeOut (aw->arrowbutton.timer);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtReleaseGC ((Widget) mw, aw->arrowbutton.arrow_GC);
|
|
Packit |
b099d7 |
XtReleaseGC ((Widget) mw, aw->arrowbutton.insensitive_GC);
|
|
Packit |
b099d7 |
if (aw->arrowbutton.fill_bg_box)
|
|
Packit |
b099d7 |
XtReleaseGC ((Widget) mw, aw->arrowbutton.background_GC);
|
|
Packit |
b099d7 |
XtReleaseGC ((Widget) mw, aw->arrowbutton.top_shadow_GC);
|
|
Packit |
b099d7 |
XtReleaseGC ((Widget) mw, aw->arrowbutton.bottom_shadow_GC);
|
|
Packit |
b099d7 |
XtReleaseGC ((Widget) mw, aw->arrowbutton.highlight_GC);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/************************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* SetValues
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
************************************************************************/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*ARGSUSED*/
|
|
Packit |
b099d7 |
static Boolean
|
|
Packit |
b099d7 |
SetValues(
|
|
Packit |
b099d7 |
Widget cw,
|
|
Packit |
b099d7 |
Widget rw, /* unused */
|
|
Packit |
b099d7 |
Widget nw,
|
|
Packit |
b099d7 |
ArgList args, /* unused */
|
|
Packit |
b099d7 |
Cardinal *num_args) /* unused */
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmArrowButtonGadget current = (XmArrowButtonGadget) cw;
|
|
Packit |
b099d7 |
XmArrowButtonGadget new_w = (XmArrowButtonGadget) nw;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Boolean returnFlag = FALSE;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Check the data put into the new widget. */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (!XmRepTypeValidValue(XmRID_ARROW_DIRECTION,
|
|
Packit |
b099d7 |
new_w->arrowbutton.direction, (Widget) new_w))
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
new_w->arrowbutton.direction = current->arrowbutton.direction;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* ReInitialize the interesting input types. */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
new_w->gadget.event_mask |= XmARM_EVENT | XmACTIVATE_EVENT | XmHELP_EVENT |
|
|
Packit |
b099d7 |
XmFOCUS_IN_EVENT | XmFOCUS_OUT_EVENT | XmENTER_EVENT | XmLEAVE_EVENT
|
|
Packit |
b099d7 |
| XmMULTI_ARM_EVENT | XmMULTI_ACTIVATE_EVENT;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (new_w->arrowbutton.direction != current->arrowbutton.direction ||
|
|
Packit |
b099d7 |
XtIsSensitive(nw) != XtIsSensitive(cw) ||
|
|
Packit |
b099d7 |
new_w->gadget.highlight_thickness !=
|
|
Packit |
b099d7 |
current->gadget.highlight_thickness ||
|
|
Packit |
b099d7 |
new_w->gadget.shadow_thickness != current->gadget.shadow_thickness)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
returnFlag = TRUE;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (new_w->arrowbutton.foreground != current->arrowbutton.foreground ||
|
|
Packit |
b099d7 |
new_w->arrowbutton.background != current->arrowbutton.background)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XtReleaseGC (XtParent(current), new_w->arrowbutton.arrow_GC);
|
|
Packit |
b099d7 |
XtReleaseGC (XtParent(current), new_w->arrowbutton.insensitive_GC);
|
|
Packit |
b099d7 |
if (new_w->arrowbutton.fill_bg_box)
|
|
Packit |
b099d7 |
XtReleaseGC (XtParent(current), new_w->arrowbutton.background_GC);
|
|
Packit |
b099d7 |
GetArrowGC (new_w);
|
|
Packit |
b099d7 |
GetBackgroundGC (new_w);
|
|
Packit |
b099d7 |
return (True);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (current->arrowbutton.top_shadow_color !=
|
|
Packit |
b099d7 |
new_w->arrowbutton.top_shadow_color ||
|
|
Packit |
b099d7 |
current->arrowbutton.top_shadow_pixmap !=
|
|
Packit |
b099d7 |
new_w->arrowbutton.top_shadow_pixmap)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XtReleaseGC ((Widget) new_w, new_w->arrowbutton.top_shadow_GC);
|
|
Packit |
b099d7 |
new_w->arrowbutton.top_shadow_GC =
|
|
Packit |
b099d7 |
_XmGetPixmapBasedGC (XtParent(nw),
|
|
Packit |
b099d7 |
new_w->arrowbutton.top_shadow_color,
|
|
Packit |
b099d7 |
new_w->arrowbutton.background,
|
|
Packit |
b099d7 |
new_w->arrowbutton.top_shadow_pixmap);
|
|
Packit |
b099d7 |
returnFlag = True;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (current->arrowbutton.bottom_shadow_color !=
|
|
Packit |
b099d7 |
new_w->arrowbutton.bottom_shadow_color ||
|
|
Packit |
b099d7 |
current->arrowbutton.bottom_shadow_pixmap !=
|
|
Packit |
b099d7 |
new_w->arrowbutton.bottom_shadow_pixmap)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XtReleaseGC ((Widget) new_w, new_w->arrowbutton.bottom_shadow_GC);
|
|
Packit |
b099d7 |
new_w->arrowbutton.bottom_shadow_GC =
|
|
Packit |
b099d7 |
_XmGetPixmapBasedGC (XtParent(nw),
|
|
Packit |
b099d7 |
new_w->arrowbutton.bottom_shadow_color,
|
|
Packit |
b099d7 |
new_w->arrowbutton.background,
|
|
Packit |
b099d7 |
new_w->arrowbutton.bottom_shadow_pixmap);
|
|
Packit |
b099d7 |
returnFlag = True;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (current->arrowbutton.highlight_color !=
|
|
Packit |
b099d7 |
new_w->arrowbutton.highlight_color ||
|
|
Packit |
b099d7 |
current->arrowbutton.highlight_pixmap !=
|
|
Packit |
b099d7 |
new_w->arrowbutton.highlight_pixmap)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XtReleaseGC ((Widget) new_w, new_w->arrowbutton.highlight_GC);
|
|
Packit |
b099d7 |
new_w->arrowbutton.highlight_GC =
|
|
Packit |
b099d7 |
_XmGetPixmapBasedGC (XtParent(nw),
|
|
Packit |
b099d7 |
new_w->arrowbutton.highlight_color,
|
|
Packit |
b099d7 |
new_w->arrowbutton.background,
|
|
Packit |
b099d7 |
new_w->arrowbutton.highlight_pixmap);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
returnFlag = True;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
return (returnFlag);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
HighlightBorder(
|
|
Packit |
b099d7 |
Widget w)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmArrowButtonGadget ag = (XmArrowButtonGadget) w;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (ag->rectangle.width == 0 ||
|
|
Packit |
b099d7 |
ag->rectangle.height == 0 ||
|
|
Packit |
b099d7 |
ag->gadget.highlight_thickness == 0)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
ag->gadget.highlighted = True;
|
|
Packit |
b099d7 |
ag->gadget.highlight_drawn = True;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* CR 7330: Use XmeDrawHighlight, not _XmDrawHighlight. */
|
|
Packit |
b099d7 |
XmeDrawHighlight(XtDisplay((Widget) ag), XtWindow((Widget) ag),
|
|
Packit |
b099d7 |
ag->arrowbutton.highlight_GC,
|
|
Packit |
b099d7 |
ag->rectangle.x, ag->rectangle.y,
|
|
Packit |
b099d7 |
ag->rectangle.width, ag->rectangle.height,
|
|
Packit |
b099d7 |
ag->gadget.highlight_thickness);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static Boolean
|
|
Packit |
b099d7 |
HandleRedraw (
|
|
Packit |
b099d7 |
Widget kid,
|
|
Packit |
b099d7 |
Widget cur_parent,
|
|
Packit |
b099d7 |
Widget new_parent,
|
|
Packit |
b099d7 |
Mask visual_flag)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmArrowButtonGadget ag = (XmArrowButtonGadget) kid;
|
|
Packit |
b099d7 |
XmManagerWidget mw = (XmManagerWidget) new_parent;
|
|
Packit |
b099d7 |
XmManagerWidget curmw = (XmManagerWidget) cur_parent;
|
|
Packit |
b099d7 |
Boolean redraw, do_bg, do_arrow, do_highlight, do_top, do_bot;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
redraw = do_bg = do_arrow = do_highlight = do_top = do_bot = False;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if ((visual_flag & VisualBackgroundPixel) &&
|
|
Packit |
b099d7 |
(ag->arrowbutton.background == curmw->core.background_pixel))
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
redraw = do_bg = do_arrow = do_highlight = do_top = do_bot = True;
|
|
Packit |
b099d7 |
ag->arrowbutton.background = mw->core.background_pixel;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if ((visual_flag & VisualForeground) &&
|
|
Packit |
b099d7 |
(ag->arrowbutton.foreground == curmw->manager.foreground))
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
redraw = do_arrow = True;
|
|
Packit |
b099d7 |
ag->arrowbutton.foreground = mw->manager.foreground;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (visual_flag & VisualBackgroundPixmap)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
redraw = do_bg = True;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (visual_flag & (VisualTopShadowColor | VisualTopShadowPixmap))
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
redraw = do_top = True;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (ag->arrowbutton.top_shadow_color == curmw->manager.top_shadow_color)
|
|
Packit |
b099d7 |
ag->arrowbutton.top_shadow_color = mw->manager.top_shadow_color;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if ((ag->arrowbutton.top_shadow_pixmap ==
|
|
Packit |
b099d7 |
curmw->manager.top_shadow_pixmap) &&
|
|
Packit |
b099d7 |
(ag->arrowbutton.top_shadow_pixmap != XmUNSPECIFIED_PIXMAP ||
|
|
Packit |
b099d7 |
ag->arrowbutton.top_shadow_color == curmw->manager.top_shadow_color))
|
|
Packit |
b099d7 |
ag->arrowbutton.top_shadow_pixmap = mw->manager.top_shadow_pixmap;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (visual_flag & (VisualBottomShadowColor | VisualBottomShadowPixmap))
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
redraw = do_bot = True;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (ag->arrowbutton.bottom_shadow_color ==
|
|
Packit |
b099d7 |
curmw->manager.bottom_shadow_color)
|
|
Packit |
b099d7 |
ag->arrowbutton.bottom_shadow_color = mw->manager.bottom_shadow_color;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if ((ag->arrowbutton.bottom_shadow_pixmap ==
|
|
Packit |
b099d7 |
curmw->manager.bottom_shadow_pixmap) &&
|
|
Packit |
b099d7 |
(ag->arrowbutton.bottom_shadow_pixmap != XmUNSPECIFIED_PIXMAP ||
|
|
Packit |
b099d7 |
ag->arrowbutton.bottom_shadow_color == curmw->manager.bottom_shadow_color))
|
|
Packit |
b099d7 |
ag->arrowbutton.bottom_shadow_pixmap = mw->manager.bottom_shadow_pixmap;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (visual_flag & (VisualHighlightColor | VisualHighlightPixmap))
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
redraw = do_highlight = True;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (ag->arrowbutton.highlight_color == curmw->manager.highlight_color)
|
|
Packit |
b099d7 |
ag->arrowbutton.highlight_color = mw->manager.highlight_color;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (ag->arrowbutton.highlight_pixmap == curmw->manager.highlight_pixmap &&
|
|
Packit |
b099d7 |
(ag->arrowbutton.highlight_pixmap != XmUNSPECIFIED_PIXMAP ||
|
|
Packit |
b099d7 |
ag->arrowbutton.highlight_color != curmw->manager.highlight_color))
|
|
Packit |
b099d7 |
ag->arrowbutton.highlight_pixmap = mw->manager.highlight_pixmap;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
ag->arrowbutton.highlight_GC =
|
|
Packit |
b099d7 |
_XmGetPixmapBasedGC (XtParent(ag),
|
|
Packit |
b099d7 |
ag->arrowbutton.highlight_color,
|
|
Packit |
b099d7 |
ag->arrowbutton.background,
|
|
Packit |
b099d7 |
ag->arrowbutton.highlight_pixmap);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (do_bg)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if (ag->arrowbutton.fill_bg_box)
|
|
Packit |
b099d7 |
XtReleaseGC ((Widget)mw, ag->arrowbutton.background_GC);
|
|
Packit |
b099d7 |
GetBackgroundGC (ag);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (do_arrow)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XtReleaseGC ((Widget)mw, ag->arrowbutton.arrow_GC);
|
|
Packit |
b099d7 |
XtReleaseGC ((Widget)mw, ag->arrowbutton.insensitive_GC);
|
|
Packit |
b099d7 |
GetArrowGC (ag);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (do_highlight)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XtReleaseGC ((Widget)mw, ag->arrowbutton.highlight_GC);
|
|
Packit |
b099d7 |
ag->arrowbutton.highlight_GC =
|
|
Packit |
b099d7 |
_XmGetPixmapBasedGC (XtParent(ag),
|
|
Packit |
b099d7 |
ag->arrowbutton.highlight_color,
|
|
Packit |
b099d7 |
ag->arrowbutton.background,
|
|
Packit |
b099d7 |
ag->arrowbutton.highlight_pixmap);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (do_top)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XtReleaseGC ((Widget)mw, ag->arrowbutton.top_shadow_GC);
|
|
Packit |
b099d7 |
ag->arrowbutton.top_shadow_GC =
|
|
Packit |
b099d7 |
_XmGetPixmapBasedGC (XtParent(ag),
|
|
Packit |
b099d7 |
ag->arrowbutton.top_shadow_color,
|
|
Packit |
b099d7 |
ag->arrowbutton.background,
|
|
Packit |
b099d7 |
ag->arrowbutton.top_shadow_pixmap);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (do_bot)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XtReleaseGC ((Widget)mw, ag->arrowbutton.bottom_shadow_GC);
|
|
Packit |
b099d7 |
ag->arrowbutton.bottom_shadow_GC =
|
|
Packit |
b099d7 |
_XmGetPixmapBasedGC (XtParent(ag),
|
|
Packit |
b099d7 |
ag->arrowbutton.bottom_shadow_color,
|
|
Packit |
b099d7 |
ag->arrowbutton.background,
|
|
Packit |
b099d7 |
ag->arrowbutton.bottom_shadow_pixmap);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
return redraw;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/************************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* InputDispatch
|
|
Packit |
b099d7 |
* This function catches input sent by a manager and dispatches it
|
|
Packit |
b099d7 |
* to the individual routines.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
************************************************************************/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
InputDispatch(
|
|
Packit |
b099d7 |
Widget wid,
|
|
Packit |
b099d7 |
XEvent *event,
|
|
Packit |
b099d7 |
Mask event_mask)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmArrowButtonGadget ag = (XmArrowButtonGadget) wid;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if ((event_mask & XmARM_EVENT) ||
|
|
Packit |
b099d7 |
((ag->arrowbutton.multiClick == XmMULTICLICK_KEEP) &&
|
|
Packit |
b099d7 |
(event_mask & XmMULTI_ARM_EVENT)))
|
|
Packit |
b099d7 |
Arm (ag, event);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
else if (event_mask & XmACTIVATE_EVENT)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
ag->arrowbutton.click_count = 1;
|
|
Packit |
b099d7 |
ActivateCommonG (ag, event, event_mask);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
else if (event_mask & XmMULTI_ACTIVATE_EVENT)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
/* if XmNMultiClick resource is set to DISCARD - do nothing
|
|
Packit |
b099d7 |
* else call ActivateCommon() and increment clickCount;
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
if (ag->arrowbutton.multiClick == XmMULTICLICK_KEEP)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
ag->arrowbutton.click_count++;
|
|
Packit |
b099d7 |
ActivateCommonG (ag, event, event_mask);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
else if (event_mask & XmHELP_EVENT)
|
|
Packit |
b099d7 |
Help (ag, event);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
else if (event_mask & XmENTER_EVENT)
|
|
Packit |
b099d7 |
Enter (ag, event);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
else if (event_mask & XmLEAVE_EVENT)
|
|
Packit |
b099d7 |
Leave (ag, event);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
else if (event_mask & XmFOCUS_IN_EVENT)
|
|
Packit |
b099d7 |
_XmFocusInGadget ((Widget) ag, event, NULL, NULL);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
else if (event_mask & XmFOCUS_OUT_EVENT)
|
|
Packit |
b099d7 |
_XmFocusOutGadget ((Widget)ag, event, NULL, NULL);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/************************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* Arm
|
|
Packit |
b099d7 |
* This function processes button 1 down occuring on the arrowbutton.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
************************************************************************/
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
Arm(
|
|
Packit |
b099d7 |
XmArrowButtonGadget aw,
|
|
Packit |
b099d7 |
XEvent *event)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmArrowButtonCallbackStruct call_value;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
aw->arrowbutton.selected = True;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
DrawArrowG(aw, aw->arrowbutton.bottom_shadow_GC,
|
|
Packit |
b099d7 |
aw->arrowbutton.top_shadow_GC, NULL);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (aw->arrowbutton.arm_callback)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XFlush(XtDisplay(aw));
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
call_value.reason = XmCR_ARM;
|
|
Packit |
b099d7 |
call_value.event = event;
|
|
Packit |
b099d7 |
XtCallCallbackList ((Widget) aw, aw->arrowbutton.arm_callback,
|
|
Packit |
b099d7 |
&call_value);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/************************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* Activate
|
|
Packit |
b099d7 |
* This function processes button 1 up occuring on the arrowbutton.
|
|
Packit |
b099d7 |
* If the button 1 up occurred inside the button the activate
|
|
Packit |
b099d7 |
* callbacks are called.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
************************************************************************/
|
|
Packit |
b099d7 |
/*ARGSUSED*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
Activate(
|
|
Packit |
b099d7 |
Widget wid,
|
|
Packit |
b099d7 |
XEvent *event,
|
|
Packit |
b099d7 |
String *params, /* unused */
|
|
Packit |
b099d7 |
Cardinal *num_params) /* unused */
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmArrowButtonGadget aw = (XmArrowButtonGadget) wid;
|
|
Packit |
b099d7 |
XButtonPressedEvent *buttonEvent = (XButtonPressedEvent *) event;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XmPushButtonCallbackStruct call_value;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
aw->arrowbutton.selected = False;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
DrawArrowG(aw, aw->arrowbutton.top_shadow_GC,
|
|
Packit |
b099d7 |
aw->arrowbutton.bottom_shadow_GC, NULL);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* CR 9181: Consider clipping when testing visibility. */
|
|
Packit |
b099d7 |
if ((buttonEvent->type == ButtonPress ||
|
|
Packit |
b099d7 |
buttonEvent->type == ButtonRelease) &&
|
|
Packit |
b099d7 |
_XmGetPointVisibility(wid, buttonEvent->x_root, buttonEvent->y_root) &&
|
|
Packit |
b099d7 |
(aw->arrowbutton.activate_callback))
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XFlush(XtDisplay(aw));
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
call_value.reason = XmCR_ACTIVATE;
|
|
Packit |
b099d7 |
call_value.event = (XEvent *) buttonEvent;
|
|
Packit |
b099d7 |
call_value.click_count = aw->arrowbutton.click_count;
|
|
Packit |
b099d7 |
XtCallCallbackList ((Widget) aw,
|
|
Packit |
b099d7 |
aw->arrowbutton.activate_callback, &call_value);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/************************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* ArmAndActivate
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
************************************************************************/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*ARGSUSED*/
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
ArmAndActivate(
|
|
Packit |
b099d7 |
Widget w,
|
|
Packit |
b099d7 |
XEvent *event,
|
|
Packit |
b099d7 |
String *params, /* unused */
|
|
Packit |
b099d7 |
Cardinal *num_params) /* unused */
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmArrowButtonGadget ab = (XmArrowButtonGadget) w;
|
|
Packit |
b099d7 |
XmPushButtonCallbackStruct call_value;
|
|
Packit |
b099d7 |
XtExposeProc expose;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
ab->arrowbutton.selected = TRUE;
|
|
Packit |
b099d7 |
ab->arrowbutton.click_count = 1;
|
|
Packit |
b099d7 |
_XmProcessLock();
|
|
Packit |
b099d7 |
expose = ab->object.widget_class->core_class.expose;
|
|
Packit |
b099d7 |
_XmProcessUnlock();
|
|
Packit |
b099d7 |
(*(expose))
|
|
Packit |
b099d7 |
((Widget) ab, event, FALSE);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XFlush (XtDisplay (ab));
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (ab->arrowbutton.arm_callback)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
call_value.reason = XmCR_ARM;
|
|
Packit |
b099d7 |
call_value.event = event;
|
|
Packit |
b099d7 |
call_value.click_count = ab->arrowbutton.click_count;
|
|
Packit |
b099d7 |
XtCallCallbackList ((Widget) ab, ab->arrowbutton.arm_callback,
|
|
Packit |
b099d7 |
&call_value);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
call_value.reason = XmCR_ACTIVATE;
|
|
Packit |
b099d7 |
call_value.event = event;
|
|
Packit |
b099d7 |
call_value.click_count = 1; /* always 1 in kselect */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (ab->arrowbutton.activate_callback)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XFlush (XtDisplay (ab));
|
|
Packit |
b099d7 |
XtCallCallbackList ((Widget) ab, ab->arrowbutton.activate_callback,
|
|
Packit |
b099d7 |
&call_value);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
ab->arrowbutton.selected = FALSE;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (ab->arrowbutton.disarm_callback)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XFlush (XtDisplay (ab));
|
|
Packit |
b099d7 |
call_value.reason = XmCR_DISARM;
|
|
Packit |
b099d7 |
XtCallCallbackList ((Widget) ab, ab->arrowbutton.disarm_callback,
|
|
Packit |
b099d7 |
&call_value);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* If the button is still around, show it released, after a short delay */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (ab->object.being_destroyed == False)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
ab->arrowbutton.timer =
|
|
Packit |
b099d7 |
XtAppAddTimeOut(XtWidgetToApplicationContext((Widget) ab),
|
|
Packit |
b099d7 |
(unsigned long) DELAY_DEFAULT,
|
|
Packit |
b099d7 |
ArmTimeout, (XtPointer)ab);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*ARGSUSED*/
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
ArmTimeout(
|
|
Packit |
b099d7 |
XtPointer data,
|
|
Packit |
b099d7 |
XtIntervalId *id)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmArrowButtonGadget ab = (XmArrowButtonGadget) data;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
ab->arrowbutton.timer = 0;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (XtIsRealized((Widget)ab) && XtIsManaged((Widget)ab))
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Redisplay ((Widget) ab, NULL, FALSE);
|
|
Packit |
b099d7 |
XFlush (XtDisplay (ab));
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/************************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* Disarm
|
|
Packit |
b099d7 |
* This function processes button 1 up occuring on the arrowbutton.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
************************************************************************/
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
Disarm(
|
|
Packit |
b099d7 |
XmArrowButtonGadget aw,
|
|
Packit |
b099d7 |
XEvent *event)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmArrowButtonCallbackStruct call_value;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
call_value.reason = XmCR_DISARM;
|
|
Packit |
b099d7 |
call_value.event = event;
|
|
Packit |
b099d7 |
XtCallCallbackList ((Widget) aw, aw->arrowbutton.disarm_callback,
|
|
Packit |
b099d7 |
&call_value);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/************************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* Enter
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
************************************************************************/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
Enter(
|
|
Packit |
b099d7 |
XmArrowButtonGadget aw,
|
|
Packit |
b099d7 |
XEvent *event)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
_XmEnterGadget ((Widget) aw, event, NULL, NULL);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (aw->arrowbutton.selected && XtIsSensitive((Widget) aw))
|
|
Packit |
b099d7 |
DrawArrowG(aw, aw->arrowbutton.bottom_shadow_GC,
|
|
Packit |
b099d7 |
aw->arrowbutton.top_shadow_GC, NULL);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/************************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* Leave
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
************************************************************************/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
Leave(
|
|
Packit |
b099d7 |
XmArrowButtonGadget aw,
|
|
Packit |
b099d7 |
XEvent *event)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
_XmLeaveGadget ((Widget) aw, event, NULL, NULL);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (aw->arrowbutton.selected && XtIsSensitive((Widget) aw))
|
|
Packit |
b099d7 |
DrawArrowG(aw, aw->arrowbutton.top_shadow_GC,
|
|
Packit |
b099d7 |
aw->arrowbutton.bottom_shadow_GC, NULL);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/************************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* Help
|
|
Packit |
b099d7 |
* This function processes Function Key 1 press occuring on
|
|
Packit |
b099d7 |
* the arrowbutton.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
************************************************************************/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
Help(
|
|
Packit |
b099d7 |
XmArrowButtonGadget aw,
|
|
Packit |
b099d7 |
XEvent *event)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
_XmSocorro((Widget) aw, event, NULL, NULL);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/************************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* ChangeCB
|
|
Packit |
b099d7 |
* add or remove the activate callback list.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
************************************************************************/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
ChangeCB(
|
|
Packit |
b099d7 |
Widget w,
|
|
Packit |
b099d7 |
XtCallbackProc activCB,
|
|
Packit |
b099d7 |
XtPointer closure,
|
|
Packit |
b099d7 |
Boolean setunset)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if (setunset)
|
|
Packit |
b099d7 |
XtAddCallback (w, XmNactivateCallback, activCB, closure);
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
XtRemoveCallback (w, XmNactivateCallback, activCB, closure);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
GetColors(Widget w,
|
|
Packit |
b099d7 |
XmAccessColorData color_data)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
color_data->valueMask = AccessForeground | AccessBackgroundPixel |
|
|
Packit |
b099d7 |
AccessHighlightColor | AccessTopShadowColor | AccessBottomShadowColor;
|
|
Packit |
b099d7 |
color_data->background = ArrowBG_Background(w);
|
|
Packit |
b099d7 |
color_data->foreground = ArrowBG_Foreground(w);
|
|
Packit |
b099d7 |
color_data->highlight_color = ArrowBG_HighlightColor(w);
|
|
Packit |
b099d7 |
color_data->top_shadow_color = ArrowBG_TopShadowColor(w);
|
|
Packit |
b099d7 |
color_data->bottom_shadow_color = ArrowBG_BottomShadowColor(w);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/************************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* XmCreateArrowButtonGadget
|
|
Packit |
b099d7 |
* Create an instance of an arrowbutton and return the widget id.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
************************************************************************/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Widget
|
|
Packit |
b099d7 |
XmCreateArrowButtonGadget(
|
|
Packit |
b099d7 |
Widget parent,
|
|
Packit |
b099d7 |
char *name,
|
|
Packit |
b099d7 |
ArgList arglist,
|
|
Packit |
b099d7 |
Cardinal argcount)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
return XtCreateWidget(name, xmArrowButtonGadgetClass, parent,
|
|
Packit |
b099d7 |
arglist, argcount);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Widget
|
|
Packit |
b099d7 |
XmVaCreateArrowButtonGadget(
|
|
Packit |
b099d7 |
Widget parent,
|
|
Packit |
b099d7 |
char *name,
|
|
Packit |
b099d7 |
...)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
register Widget w;
|
|
Packit |
b099d7 |
va_list var;
|
|
Packit |
b099d7 |
int count;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Va_start(var,name);
|
|
Packit |
b099d7 |
count = XmeCountVaListSimple(var);
|
|
Packit |
b099d7 |
va_end(var);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Va_start(var, name);
|
|
Packit |
b099d7 |
w = XmeVLCreateWidget(name,
|
|
Packit |
b099d7 |
xmArrowButtonGadgetClass,
|
|
Packit |
b099d7 |
parent, False,
|
|
Packit |
b099d7 |
var, count);
|
|
Packit |
b099d7 |
va_end(var);
|
|
Packit |
b099d7 |
return w;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
Widget
|
|
Packit |
b099d7 |
XmVaCreateManagedArrowButtonGadget(
|
|
Packit |
b099d7 |
Widget parent,
|
|
Packit |
b099d7 |
char *name,
|
|
Packit |
b099d7 |
...)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Widget w = NULL;
|
|
Packit |
b099d7 |
va_list var;
|
|
Packit |
b099d7 |
int count;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Va_start(var, name);
|
|
Packit |
b099d7 |
count = XmeCountVaListSimple(var);
|
|
Packit |
b099d7 |
va_end(var);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Va_start(var, name);
|
|
Packit |
b099d7 |
w = XmeVLCreateWidget(name,
|
|
Packit |
b099d7 |
xmArrowButtonGadgetClass,
|
|
Packit |
b099d7 |
parent, True,
|
|
Packit |
b099d7 |
var, count);
|
|
Packit |
b099d7 |
va_end(var);
|
|
Packit |
b099d7 |
return w;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* ARGSUSED */
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
ActivateCommonG(
|
|
Packit |
b099d7 |
XmArrowButtonGadget ag,
|
|
Packit |
b099d7 |
XEvent *event,
|
|
Packit |
b099d7 |
Mask event_mask)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if (event->type == ButtonRelease)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Activate((Widget) ag, event, NULL, NULL);
|
|
Packit |
b099d7 |
Disarm (ag, event);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
else /* assume KeyPress or KeyRelease */
|
|
Packit |
b099d7 |
(* (((XmArrowButtonGadgetClassRec *)(ag->object.widget_class))->
|
|
Packit |
b099d7 |
gadget_class.arm_and_activate))
|
|
Packit |
b099d7 |
((Widget) ag, event, NULL, NULL);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Wrapper around XmeDrawArrow to calculate sizes. */
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
DrawArrowG(XmArrowButtonGadget ag,
|
|
Packit |
b099d7 |
GC top_gc,
|
|
Packit |
b099d7 |
GC bottom_gc,
|
|
Packit |
b099d7 |
GC center_gc)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Position x, y;
|
|
Packit |
b099d7 |
Dimension width, height;
|
|
Packit |
b099d7 |
Dimension margin =
|
|
Packit |
b099d7 |
ag->gadget.highlight_thickness + ag->gadget.shadow_thickness;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Don't let large margins cause confusion. */
|
|
Packit |
b099d7 |
if (margin <= (ag->rectangle.width / 2))
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
x = ag->rectangle.x + margin;
|
|
Packit |
b099d7 |
width = ag->rectangle.width - (margin * 2);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
x = ag->rectangle.x + ag->rectangle.width / 2;
|
|
Packit |
b099d7 |
width = 0;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (margin <= (ag->rectangle.height / 2))
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
y = ag->rectangle.y + margin;
|
|
Packit |
b099d7 |
height = ag->rectangle.height - (margin * 2);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
y = ag->rectangle.y + ag->rectangle.height / 2;
|
|
Packit |
b099d7 |
height = 0;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* The way we currently handle 1 shadowThickness in XmeDrawArrow
|
|
Packit |
b099d7 |
is by drawing the center a little bit bigger, so the center_gc has
|
|
Packit |
b099d7 |
to be present. Kinda hacky... */
|
|
Packit |
b099d7 |
if (!center_gc &&
|
|
Packit |
b099d7 |
ag->arrowbutton.detail_shadow_thickness == 1)
|
|
Packit |
b099d7 |
center_gc = ag->arrowbutton.arrow_GC ;
|
|
Packit |
b099d7 |
if (center_gc)
|
|
Packit |
b099d7 |
XSetClipMask(XtDisplay((Widget) ag), center_gc, None);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XmeDrawArrow (XtDisplay ((Widget) ag), XtWindow ((Widget) ag),
|
|
Packit |
b099d7 |
top_gc, bottom_gc, center_gc,
|
|
Packit |
b099d7 |
x, y, width, height,
|
|
Packit |
b099d7 |
ag->arrowbutton.detail_shadow_thickness,
|
|
Packit |
b099d7 |
ag->arrowbutton.direction);
|
|
Packit |
b099d7 |
}
|