Blame lib/Xm/Separator.c

Packit b099d7
/* 
Packit b099d7
 * Motif
Packit b099d7
 *
Packit b099d7
 * Copyright (c) 1987-2012, The Open Group. All rights reserved.
Packit b099d7
 *
Packit b099d7
 * These libraries and programs are free software; you can
Packit b099d7
 * redistribute them and/or modify them under the terms of the GNU
Packit b099d7
 * Lesser General Public License as published by the Free Software
Packit b099d7
 * Foundation; either version 2 of the License, or (at your option)
Packit b099d7
 * any later version.
Packit b099d7
 *
Packit b099d7
 * These libraries and programs are distributed in the hope that
Packit b099d7
 * they will be useful, but WITHOUT ANY WARRANTY; without even the
Packit b099d7
 * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
Packit b099d7
 * PURPOSE. See the GNU Lesser General Public License for more
Packit b099d7
 * details.
Packit b099d7
 *
Packit b099d7
 * You should have received a copy of the GNU Lesser General Public
Packit b099d7
 * License along with these librararies and programs; if not, write
Packit b099d7
 * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
Packit b099d7
 * Floor, Boston, MA 02110-1301 USA
Packit b099d7
*/ 
Packit b099d7
/* 
Packit b099d7
 * HISTORY
Packit b099d7
*/ 
Packit b099d7
#ifdef HAVE_CONFIG_H
Packit b099d7
#include <config.h>
Packit b099d7
#endif
Packit b099d7
Packit b099d7
Packit b099d7
#ifdef REV_INFO
Packit b099d7
#ifndef lint
Packit b099d7
static char rcsid[] = "$XConsortium: Separator.c /main/14 1996/03/25 17:53:11 barstow $"
Packit b099d7
#endif
Packit b099d7
#endif
Packit b099d7
/*
Packit b099d7
*  (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */
Packit b099d7
Packit b099d7
#include <stdio.h>
Packit b099d7
#include <ctype.h>
Packit b099d7
#include <X11/keysymdef.h>   
Packit b099d7
#include <X11/IntrinsicP.h>
Packit b099d7
#include "XmI.h"
Packit b099d7
#include <Xm/RowColumnP.h>
Packit b099d7
#include <Xm/SeparatorP.h>
Packit b099d7
#include "RepTypeI.h"
Packit b099d7
#include <Xm/TraitP.h>
Packit b099d7
#include <Xm/MenuT.h>
Packit b099d7
#include <Xm/DrawP.h>
Packit b099d7
#include <Xm/VaSimpleP.h>
Packit b099d7
Packit b099d7
Packit b099d7
/********    Static Function Declarations    ********/
Packit b099d7
Packit b099d7
static void ClassInitialize() ;
Packit b099d7
static void ClassPartInitialize( 
Packit b099d7
                        WidgetClass wc) ;
Packit b099d7
static void Initialize( 
Packit b099d7
                        Widget rw,
Packit b099d7
                        Widget nw,
Packit b099d7
                        ArgList args,
Packit b099d7
                        Cardinal *num_args) ;
Packit b099d7
static void GetSeparatorGC( 
Packit b099d7
                        XmSeparatorWidget mw) ;
Packit b099d7
static void Redisplay( 
Packit b099d7
                        Widget wid,
Packit b099d7
                        XEvent *event,
Packit b099d7
                        Region region) ;
Packit b099d7
static void Destroy( 
Packit b099d7
                        Widget wid) ;
Packit b099d7
static Boolean SetValues( 
Packit b099d7
                        Widget cw,
Packit b099d7
                        Widget rw,
Packit b099d7
                        Widget nw,
Packit b099d7
                        ArgList args,
Packit b099d7
                        Cardinal *num_args) ;
Packit b099d7
Packit b099d7
/********    End Static Function Declarations    ********/
Packit b099d7
Packit b099d7
/* Menu Savvy trait record */
Packit b099d7
static XmConst XmMenuSavvyTraitRec MenuSavvySeparatorRecord = {
Packit b099d7
    0,				/* version */
Packit b099d7
    NULL,			/* disableCallback */
Packit b099d7
    NULL,			/* getAccelerator */
Packit b099d7
    NULL,			/* getMnemonic */
Packit b099d7
    NULL,			/* getActivateCBName */
Packit b099d7
};
Packit b099d7
Packit b099d7
Packit b099d7
/* Definition for resources that need special processing in get values */
Packit b099d7
Packit b099d7
static XmSyntheticResource syn_resources[] = 
Packit b099d7
{
Packit b099d7
   {
Packit b099d7
      XmNmargin, 
Packit b099d7
      sizeof (Dimension),
Packit b099d7
      XtOffsetOf( struct _XmSeparatorRec, separator.margin),
Packit b099d7
      XmeFromHorizontalPixels,
Packit b099d7
      XmeToHorizontalPixels
Packit b099d7
   },
Packit b099d7
};
Packit b099d7
Packit b099d7
Packit b099d7
/*  Resource list for Separator  */
Packit b099d7
Packit b099d7
static XtResource resources[] = 
Packit b099d7
{
Packit b099d7
   {
Packit b099d7
      XmNseparatorType, XmCSeparatorType, XmRSeparatorType, sizeof (unsigned char),
Packit b099d7
      XtOffsetOf( struct _XmSeparatorRec, separator.separator_type),
Packit b099d7
      XmRImmediate, (XtPointer) XmSHADOW_ETCHED_IN
Packit b099d7
   },
Packit b099d7
Packit b099d7
   {
Packit b099d7
      XmNmargin, 
Packit b099d7
      XmCMargin,
Packit b099d7
      XmRHorizontalDimension, 
Packit b099d7
      sizeof (Dimension),
Packit b099d7
      XtOffsetOf( struct _XmSeparatorRec, separator.margin),
Packit b099d7
      XmRImmediate, (XtPointer)  0
Packit b099d7
   },
Packit b099d7
Packit b099d7
   {
Packit b099d7
      XmNorientation, XmCOrientation, XmROrientation, sizeof (unsigned char),
Packit b099d7
      XtOffsetOf( struct _XmSeparatorRec, separator.orientation),
Packit b099d7
      XmRImmediate, (XtPointer) XmHORIZONTAL
Packit b099d7
   },
Packit b099d7
   {
Packit b099d7
     XmNtraversalOn,
Packit b099d7
     XmCTraversalOn,
Packit b099d7
     XmRBoolean,
Packit b099d7
     sizeof (Boolean),
Packit b099d7
     XtOffsetOf( struct _XmPrimitiveRec, primitive.traversal_on),
Packit b099d7
     XmRImmediate, (XtPointer) FALSE
Packit b099d7
   },
Packit b099d7
   {
Packit b099d7
     XmNhighlightThickness,
Packit b099d7
     XmCHighlightThickness,
Packit b099d7
     XmRHorizontalDimension,
Packit b099d7
     sizeof (Dimension),
Packit b099d7
     XtOffsetOf( struct _XmPrimitiveRec, primitive.highlight_thickness),
Packit b099d7
     XmRImmediate, (XtPointer) 0
Packit b099d7
   },
Packit b099d7
   {
Packit b099d7
     XmNshadowThickness,
Packit b099d7
     XmCShadowThickness,
Packit b099d7
     XmRHorizontalDimension,
Packit b099d7
     sizeof (Dimension),
Packit b099d7
     XtOffsetOf( struct _XmPrimitiveRec, primitive.shadow_thickness),
Packit b099d7
     XmRImmediate, (XtPointer) 2
Packit b099d7
   },
Packit b099d7
};
Packit b099d7
Packit b099d7
Packit b099d7
/*  The Separator class record definition  */
Packit b099d7
Packit b099d7
externaldef(xmseparatorclassrec) XmSeparatorClassRec xmSeparatorClassRec =
Packit b099d7
{
Packit b099d7
   {
Packit b099d7
      (WidgetClass) &xmPrimitiveClassRec, /* superclass	 	 */
Packit b099d7
      "XmSeparator",                      /* class_name	         */	
Packit b099d7
      sizeof(XmSeparatorRec),             /* widget_size         */	
Packit b099d7
      ClassInitialize,			/* 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
      XtInheritRealize,                 /* 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
      XtExposeCompressSeries |          /* compress_exposure     */	
Packit b099d7
	  XtExposeNoRegion,
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
      (XtAcceptFocusProc)NULL,          /* accept_focus	         */	
Packit b099d7
      XtVersion,                        /* version               */
Packit b099d7
      NULL,                             /* callback private      */
Packit b099d7
      NULL,                             /* tm_table              */
Packit b099d7
      (XtGeometryHandler)NULL,          /* query_geometry        */
Packit b099d7
      (XtStringProc)NULL,               /* display_accelerator   */
Packit b099d7
      NULL,                             /* extension             */
Packit b099d7
   },
Packit b099d7
Packit b099d7
   {
Packit b099d7
      (XtWidgetProc)NULL,               /* Primitive border_highlight   */
Packit b099d7
      (XtWidgetProc)NULL,               /* Primitive border_unhighlight */
Packit b099d7
      NULL,                             /* translations                 */
Packit b099d7
      (XtActionProc)NULL,               /* arm_and_activate             */
Packit b099d7
      syn_resources,                    /* syn resources                */
Packit b099d7
      XtNumber(syn_resources),	        /* num syn_resources            */
Packit b099d7
      NULL,                             /* extension                    */
Packit b099d7
   },
Packit b099d7
Packit b099d7
   {
Packit b099d7
      (XtPointer) NULL,                 /* extension                    */
Packit b099d7
   }
Packit b099d7
};
Packit b099d7
Packit b099d7
externaldef(xmseparatorwidgetclass) WidgetClass xmSeparatorWidgetClass =
Packit b099d7
				   (WidgetClass) &xmSeparatorClassRec;
Packit b099d7
Packit b099d7
/************************************************************************
Packit b099d7
 *
Packit b099d7
 *  ClassInitialize 
Packit b099d7
 *
Packit b099d7
 ************************************************************************/
Packit b099d7
static void 
Packit b099d7
ClassInitialize( void )
Packit b099d7
{
Packit b099d7
    /* Install the menu savvy trait. */
Packit b099d7
    XmeTraitSet((XtPointer) xmSeparatorWidgetClass, XmQTmenuSavvy,
Packit b099d7
		(XtPointer) &MenuSavvySeparatorRecord);
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
static void 
Packit b099d7
ClassPartInitialize(
Packit b099d7
        WidgetClass wc )
Packit b099d7
{
Packit b099d7
   _XmFastSubclassInit (wc, XmSEPARATOR_BIT);
Packit b099d7
}
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
/*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
   XmSeparatorWidget request = (XmSeparatorWidget) rw ;
Packit b099d7
   XmSeparatorWidget new_w = (XmSeparatorWidget) nw ;
Packit b099d7
   new_w -> primitive.traversal_on = FALSE; 
Packit b099d7
Packit b099d7
   /* Force highlightThickness to zero if in a menu. */
Packit b099d7
   if (XmIsRowColumn(XtParent(new_w)) &&
Packit b099d7
       ((RC_Type(XtParent(new_w)) == XmMENU_PULLDOWN) ||
Packit b099d7
        (RC_Type(XtParent(new_w)) == XmMENU_POPUP)))
Packit b099d7
     new_w->primitive.highlight_thickness = 0;
Packit b099d7
Packit b099d7
   if(    !XmRepTypeValidValue( XmRID_SEPARATOR_TYPE,
Packit b099d7
                              new_w->separator.separator_type, (Widget) new_w)    )
Packit b099d7
   {
Packit b099d7
      new_w -> separator.separator_type = XmSHADOW_ETCHED_IN;
Packit b099d7
   }
Packit b099d7
Packit b099d7
   if(    !XmRepTypeValidValue( XmRID_ORIENTATION,
Packit b099d7
                                 new_w->separator.orientation, (Widget) new_w)    )
Packit b099d7
   {
Packit b099d7
      new_w -> separator.orientation = XmHORIZONTAL;
Packit b099d7
   }
Packit b099d7
Packit b099d7
   if (new_w->separator.orientation == XmHORIZONTAL)
Packit b099d7
   {
Packit b099d7
      if (request -> core.width == 0)
Packit b099d7
	 new_w -> core.width = 2 * new_w -> primitive.highlight_thickness +2;
Packit b099d7
Packit b099d7
      if (request -> core.height == 0)
Packit b099d7
      {
Packit b099d7
	 new_w -> core.height = 2 * new_w -> primitive.highlight_thickness;
Packit b099d7
Packit b099d7
	 if (new_w -> separator.separator_type == XmSINGLE_LINE ||
Packit b099d7
	     new_w -> separator.separator_type == XmSINGLE_DASHED_LINE)
Packit b099d7
	    new_w -> core.height += 3;
Packit b099d7
	 else if (new_w -> separator.separator_type == XmSHADOW_ETCHED_IN ||
Packit b099d7
		  new_w -> separator.separator_type == XmSHADOW_ETCHED_OUT ||
Packit b099d7
		  new_w -> separator.separator_type == XmSHADOW_ETCHED_IN_DASH ||
Packit b099d7
		  new_w -> separator.separator_type == XmSHADOW_ETCHED_OUT_DASH)
Packit b099d7
	    new_w -> core.height += new_w -> primitive.shadow_thickness;
Packit b099d7
	 else if (new_w -> separator.separator_type == XmDOUBLE_LINE ||
Packit b099d7
		  new_w -> separator.separator_type == XmDOUBLE_DASHED_LINE)
Packit b099d7
	    new_w -> core.height += 5;
Packit b099d7
	 else
Packit b099d7
	    if (new_w -> core.height == 0)
Packit b099d7
	       new_w -> core.height = 1;
Packit b099d7
      }
Packit b099d7
   }
Packit b099d7
   
Packit b099d7
   if (new_w->separator.orientation == XmVERTICAL)
Packit b099d7
   {
Packit b099d7
      if (request -> core.height == 0)
Packit b099d7
	 new_w -> core.height = 2 * new_w -> primitive.highlight_thickness +2;
Packit b099d7
Packit b099d7
      if (request -> core.width == 0)
Packit b099d7
      {
Packit b099d7
	 new_w -> core.width = 2 * new_w -> primitive.highlight_thickness;
Packit b099d7
Packit b099d7
	 if (new_w -> separator.separator_type == XmSINGLE_LINE ||
Packit b099d7
	     new_w -> separator.separator_type == XmSINGLE_DASHED_LINE)
Packit b099d7
	    new_w -> core.width += 3;
Packit b099d7
	 else if (new_w -> separator.separator_type == XmSHADOW_ETCHED_IN ||
Packit b099d7
		  new_w -> separator.separator_type == XmSHADOW_ETCHED_OUT ||
Packit b099d7
		  new_w -> separator.separator_type == XmSHADOW_ETCHED_IN_DASH ||
Packit b099d7
		  new_w -> separator.separator_type == XmSHADOW_ETCHED_OUT_DASH)
Packit b099d7
	    new_w -> core.width += new_w -> primitive.shadow_thickness;
Packit b099d7
	 else if (new_w -> separator.separator_type == XmDOUBLE_LINE ||
Packit b099d7
		  new_w -> separator.separator_type == XmDOUBLE_DASHED_LINE)
Packit b099d7
	    new_w -> core.width += 5;
Packit b099d7
	 else
Packit b099d7
	    if (new_w -> core.width == 0)
Packit b099d7
	       new_w -> core.width = 1;
Packit b099d7
      }
Packit b099d7
   }
Packit b099d7
   
Packit b099d7
   /*  Get the drawing graphics contexts.  */
Packit b099d7
Packit b099d7
   GetSeparatorGC (new_w);
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
/************************************************************************
Packit b099d7
 *
Packit b099d7
 *  GetSeparatorGC
Packit b099d7
 *     Get the graphics context used for drawing the separator.
Packit b099d7
 *
Packit b099d7
 ************************************************************************/
Packit b099d7
static void 
Packit b099d7
GetSeparatorGC(
Packit b099d7
        XmSeparatorWidget mw )
Packit b099d7
{
Packit b099d7
   XGCValues values;
Packit b099d7
   XtGCMask  valueMask;
Packit b099d7
Packit b099d7
   valueMask = GCForeground | GCBackground;
Packit b099d7
Packit b099d7
   values.foreground = mw -> primitive.foreground;
Packit b099d7
   values.background = mw -> core.background_pixel;
Packit b099d7
Packit b099d7
   if (mw -> separator.separator_type == XmSINGLE_DASHED_LINE ||
Packit b099d7
       mw -> separator.separator_type == XmDOUBLE_DASHED_LINE)
Packit b099d7
   {
Packit b099d7
      valueMask = valueMask | GCLineStyle;
Packit b099d7
      values.line_style = LineDoubleDash;
Packit b099d7
   }
Packit b099d7
Packit b099d7
   mw -> separator.separator_GC = XtGetGC ((Widget) mw, valueMask, &values);
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
/************************************************************************
Packit b099d7
 *
Packit b099d7
 *  Redisplay
Packit b099d7
 *     Invoke the application exposure callbacks.
Packit b099d7
 *
Packit b099d7
 ************************************************************************/
Packit b099d7
/*ARGSUSED*/
Packit b099d7
static void 
Packit b099d7
Redisplay(
Packit b099d7
        Widget wid,
Packit b099d7
        XEvent *event,
Packit b099d7
        Region region )
Packit b099d7
{
Packit b099d7
     XmSeparatorWidget mw = (XmSeparatorWidget) wid ;
Packit b099d7
Packit b099d7
    XmeDrawSeparator(XtDisplay(wid), XtWindow(wid),
Packit b099d7
                  mw->primitive.top_shadow_GC,
Packit b099d7
                  mw->primitive.bottom_shadow_GC,
Packit b099d7
                  mw->separator.separator_GC,
Packit b099d7
                  mw->primitive.highlight_thickness,
Packit b099d7
                  mw->primitive.highlight_thickness,
Packit b099d7
                  mw->core.width - 2*mw->primitive.highlight_thickness,
Packit b099d7
                  mw->core.height - 2*mw->primitive.highlight_thickness,
Packit b099d7
                  mw->primitive.shadow_thickness,
Packit b099d7
                  mw->separator.margin,
Packit b099d7
                  mw->separator.orientation,
Packit b099d7
                  mw->separator.separator_type);
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
/************************************************************************
Packit b099d7
 *
Packit b099d7
 *  Destroy
Packit b099d7
 *	Remove the callback lists.
Packit b099d7
 *
Packit b099d7
 ************************************************************************/
Packit b099d7
static void 
Packit b099d7
Destroy(
Packit b099d7
        Widget wid )
Packit b099d7
{
Packit b099d7
   XtReleaseGC (wid, ((XmSeparatorWidget) wid)->separator.separator_GC);
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
/************************************************************************
Packit b099d7
 *
Packit b099d7
 *  SetValues
Packit b099d7
 *
Packit b099d7
 ************************************************************************/
Packit b099d7
/*ARGSUSED*/
Packit b099d7
static Boolean 
Packit b099d7
SetValues(
Packit b099d7
        Widget cw,
Packit b099d7
        Widget rw,
Packit b099d7
        Widget nw,
Packit b099d7
        ArgList args,		/* unused */
Packit b099d7
        Cardinal *num_args )	/* unused */
Packit b099d7
{
Packit b099d7
        XmSeparatorWidget current = (XmSeparatorWidget) cw ;
Packit b099d7
        XmSeparatorWidget request = (XmSeparatorWidget) rw ;
Packit b099d7
        XmSeparatorWidget new_w = (XmSeparatorWidget) nw ;
Packit b099d7
   Boolean flag = FALSE;   
Packit b099d7
Packit b099d7
   /*
Packit b099d7
    * We never allow our traversal flags to be changed during SetValues();
Packit b099d7
    * this is enforced by our superclass.
Packit b099d7
    */
Packit b099d7
Packit b099d7
   /*  Force traversal_on to FALSE */
Packit b099d7
   new_w -> primitive.traversal_on = FALSE;
Packit b099d7
Packit b099d7
   /* Force highlightThickness to zero if in a menu. */
Packit b099d7
   if (XmIsRowColumn(XtParent(new_w)) &&
Packit b099d7
       ((RC_Type(XtParent(new_w)) == XmMENU_PULLDOWN) ||
Packit b099d7
        (RC_Type(XtParent(new_w)) == XmMENU_POPUP)))
Packit b099d7
     new_w->primitive.highlight_thickness = 0;
Packit b099d7
 
Packit b099d7
   if(    !XmRepTypeValidValue( XmRID_SEPARATOR_TYPE,
Packit b099d7
                              new_w->separator.separator_type, (Widget) new_w)    )
Packit b099d7
   {
Packit b099d7
      new_w -> separator.separator_type = current -> separator.separator_type;
Packit b099d7
   }
Packit b099d7
Packit b099d7
   if(    !XmRepTypeValidValue( XmRID_ORIENTATION,
Packit b099d7
                                 new_w->separator.orientation, (Widget) new_w)    )
Packit b099d7
   {
Packit b099d7
      new_w -> separator.orientation = current -> separator.orientation;
Packit b099d7
   }
Packit b099d7
Packit b099d7
   if (new_w -> separator.orientation == XmHORIZONTAL)
Packit b099d7
   {
Packit b099d7
      if (request -> core.width == 0)
Packit b099d7
	 new_w -> core.width = 2 * new_w->primitive.highlight_thickness + 2;
Packit b099d7
Packit b099d7
      if (request -> core.height == 0)
Packit b099d7
      {
Packit b099d7
	 new_w -> core.height = 2 * new_w -> primitive.highlight_thickness;
Packit b099d7
Packit b099d7
	 if (new_w -> separator.separator_type == XmSINGLE_LINE ||
Packit b099d7
	     new_w -> separator.separator_type == XmSINGLE_DASHED_LINE)
Packit b099d7
	    new_w -> core.height += 3;
Packit b099d7
	 else if (new_w -> separator.separator_type == XmSHADOW_ETCHED_IN ||
Packit b099d7
		  new_w -> separator.separator_type == XmSHADOW_ETCHED_OUT ||
Packit b099d7
		  new_w -> separator.separator_type == XmSHADOW_ETCHED_IN_DASH ||
Packit b099d7
		  new_w -> separator.separator_type == XmSHADOW_ETCHED_OUT_DASH)
Packit b099d7
	    new_w -> core.height += new_w -> primitive.shadow_thickness;
Packit b099d7
	 else if (new_w -> separator.separator_type == XmDOUBLE_LINE ||
Packit b099d7
		  new_w -> separator.separator_type == XmDOUBLE_DASHED_LINE)
Packit b099d7
	    new_w -> core.height += 5;
Packit b099d7
	 else
Packit b099d7
	    if (new_w -> core.height == 0)
Packit b099d7
	       new_w -> core.height = 1;
Packit b099d7
      }
Packit b099d7
Packit b099d7
      if ((new_w -> separator.separator_type != current -> separator.separator_type ||
Packit b099d7
           new_w -> primitive.shadow_thickness != current -> primitive.shadow_thickness ||
Packit b099d7
           new_w -> primitive.highlight_thickness != current -> primitive.highlight_thickness) &&
Packit b099d7
	   request -> core.height == current -> core.height)
Packit b099d7
      {
Packit b099d7
	 if (new_w -> separator.separator_type == XmSINGLE_LINE ||
Packit b099d7
	     new_w -> separator.separator_type == XmSINGLE_DASHED_LINE) 
Packit b099d7
	    new_w -> core.height = 2 * new_w -> primitive.highlight_thickness + 3;
Packit b099d7
	 else if (new_w -> separator.separator_type == XmSHADOW_ETCHED_IN ||
Packit b099d7
		  new_w -> separator.separator_type == XmSHADOW_ETCHED_OUT ||
Packit b099d7
		  new_w -> separator.separator_type == XmSHADOW_ETCHED_IN_DASH ||
Packit b099d7
		  new_w -> separator.separator_type == XmSHADOW_ETCHED_OUT_DASH)
Packit b099d7
	    new_w -> core.height = 2 * new_w -> primitive.highlight_thickness +
Packit b099d7
				       new_w -> primitive.shadow_thickness;
Packit b099d7
	 else if (new_w -> separator.separator_type == XmDOUBLE_LINE ||
Packit b099d7
		  new_w -> separator.separator_type == XmDOUBLE_DASHED_LINE) 
Packit b099d7
	    new_w -> core.height = 2 * new_w -> primitive.highlight_thickness + 5;
Packit b099d7
      }
Packit b099d7
   } 
Packit b099d7
Packit b099d7
   if (new_w -> separator.orientation == XmVERTICAL)
Packit b099d7
   {
Packit b099d7
      if (request -> core.height == 0)
Packit b099d7
	 new_w -> core.height = 2 * new_w->primitive.highlight_thickness + 2;
Packit b099d7
Packit b099d7
      if (request -> core.width == 0)
Packit b099d7
      {
Packit b099d7
	 new_w -> core.width = 2 * new_w -> primitive.highlight_thickness;
Packit b099d7
Packit b099d7
	 if (new_w -> separator.separator_type == XmSINGLE_LINE ||
Packit b099d7
	     new_w -> separator.separator_type == XmSINGLE_DASHED_LINE)
Packit b099d7
	    new_w -> core.width += 3;
Packit b099d7
	 else if (new_w -> separator.separator_type == XmSHADOW_ETCHED_IN ||
Packit b099d7
		  new_w -> separator.separator_type == XmSHADOW_ETCHED_OUT ||
Packit b099d7
		  new_w -> separator.separator_type == XmSHADOW_ETCHED_IN_DASH ||
Packit b099d7
		  new_w -> separator.separator_type == XmSHADOW_ETCHED_OUT_DASH)
Packit b099d7
	    new_w -> core.width += new_w -> primitive.shadow_thickness;
Packit b099d7
	 else if (new_w -> separator.separator_type == XmDOUBLE_LINE ||
Packit b099d7
		  new_w -> separator.separator_type == XmDOUBLE_DASHED_LINE)
Packit b099d7
	    new_w -> core.width += 5;
Packit b099d7
	 else
Packit b099d7
	    if (new_w -> core.width == 0)
Packit b099d7
	       new_w -> core.width = 1;
Packit b099d7
      }
Packit b099d7
Packit b099d7
      if ((new_w -> separator.separator_type != current -> separator.separator_type ||
Packit b099d7
           new_w -> primitive.shadow_thickness != current -> primitive.shadow_thickness ||
Packit b099d7
           new_w -> primitive.highlight_thickness != current -> primitive.highlight_thickness) &&
Packit b099d7
	   request -> core.width == current -> core.width)
Packit b099d7
      {
Packit b099d7
	 if (new_w -> separator.separator_type == XmSINGLE_LINE ||
Packit b099d7
	     new_w -> separator.separator_type == XmSINGLE_DASHED_LINE) 
Packit b099d7
	    new_w -> core.width = 2 * new_w -> primitive.highlight_thickness + 3;
Packit b099d7
	 else if (new_w -> separator.separator_type == XmSHADOW_ETCHED_IN ||
Packit b099d7
		  new_w -> separator.separator_type == XmSHADOW_ETCHED_OUT ||
Packit b099d7
		  new_w -> separator.separator_type == XmSHADOW_ETCHED_IN_DASH ||
Packit b099d7
		  new_w -> separator.separator_type == XmSHADOW_ETCHED_OUT_DASH)
Packit b099d7
	    new_w -> core.width = 2 * new_w -> primitive.highlight_thickness +
Packit b099d7
				       new_w -> primitive.shadow_thickness;
Packit b099d7
	 else if (new_w -> separator.separator_type == XmDOUBLE_LINE ||
Packit b099d7
		  new_w -> separator.separator_type == XmDOUBLE_DASHED_LINE) 
Packit b099d7
	    new_w -> core.width = 2 * new_w -> primitive.highlight_thickness + 5;
Packit b099d7
      }
Packit b099d7
   } 
Packit b099d7
Packit b099d7
   if (new_w -> separator.orientation != current -> separator.orientation ||
Packit b099d7
       new_w -> separator.margin != current -> separator.margin ||
Packit b099d7
       new_w -> primitive.shadow_thickness != current -> primitive.shadow_thickness) 
Packit b099d7
      flag = TRUE;
Packit b099d7
Packit b099d7
   if (new_w -> separator.separator_type != current -> separator.separator_type  ||
Packit b099d7
       new_w -> core.background_pixel != current -> core.background_pixel    ||
Packit b099d7
       new_w -> primitive.foreground != current -> primitive.foreground)
Packit b099d7
   {
Packit b099d7
      XtReleaseGC ((Widget) new_w, new_w -> separator.separator_GC);
Packit b099d7
      GetSeparatorGC (new_w);
Packit b099d7
      flag = TRUE;
Packit b099d7
   }
Packit b099d7
Packit b099d7
   return (flag);
Packit b099d7
}
Packit b099d7
Packit b099d7
/************************************************************************
Packit b099d7
 *
Packit b099d7
 *  XmCreateSeparator()
Packit b099d7
 *  XmVaCreateSeparator()
Packit b099d7
 *  XmVaCreateManagedSeparator()
Packit b099d7
 *	Create an instance of a separator and return the widget id.
Packit b099d7
 *
Packit b099d7
 ************************************************************************/
Packit b099d7
Widget 
Packit b099d7
XmCreateSeparator(
Packit b099d7
        Widget parent,
Packit b099d7
        char *name,
Packit b099d7
        ArgList arglist,
Packit b099d7
        Cardinal argcount )
Packit b099d7
{
Packit b099d7
   return (XtCreateWidget (name, xmSeparatorWidgetClass, 
Packit b099d7
                           parent, arglist, argcount));
Packit b099d7
}
Packit b099d7
Widget 
Packit b099d7
XmVaCreateSeparator(
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
                         xmSeparatorWidgetClass, 
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
XmVaCreateManagedSeparator(
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
                         xmSeparatorWidgetClass, 
Packit b099d7
                         parent, True, 
Packit b099d7
                         var, count);
Packit b099d7
    va_end(var);   
Packit b099d7
    return w;
Packit b099d7
    
Packit b099d7
}