Blame lib/Xm/LabelGP.h

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
/* $XConsortium: LabelGP.h /main/12 1995/10/25 20:08:21 cde-sun $ */
Packit b099d7
/* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */
Packit b099d7
/* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */
Packit b099d7
#ifndef _XmLabelGP_h
Packit b099d7
#define _XmLabelGP_h
Packit b099d7
Packit b099d7
#include <Xm/LabelG.h>
Packit b099d7
#include <Xm/GadgetP.h>
Packit b099d7
#include <Xm/ExtObjectP.h>
Packit b099d7
#include <Xm/XmP.h>
Packit b099d7
Packit b099d7
#ifdef __cplusplus
Packit b099d7
extern "C" {
Packit b099d7
#endif
Packit b099d7
Packit b099d7
/*************************************************************/
Packit b099d7
/* The Label Gadget Cache Object's class and instance records*/
Packit b099d7
/*************************************************************/
Packit b099d7
Packit b099d7
/* Enumerations for fill_bg_box. */
Packit b099d7
enum { _XmPLAIN_BG_BOX, _XmFILL_BG_BOX, _XmALWAYS_FILL_BG_BOX };
Packit b099d7
Packit b099d7
typedef struct _XmLabelGCacheObjClassPart
Packit b099d7
{
Packit b099d7
  int foo;
Packit b099d7
} XmLabelGCacheObjClassPart;
Packit b099d7
Packit b099d7
Packit b099d7
typedef struct _XmLabelGCacheObjClassRec     /* label cache class record */
Packit b099d7
{
Packit b099d7
  ObjectClassPart		object_class;
Packit b099d7
  XmExtClassPart                ext_class;
Packit b099d7
  XmLabelGCacheObjClassPart	label_class_cache;
Packit b099d7
} XmLabelGCacheObjClassRec;
Packit b099d7
Packit b099d7
externalref XmLabelGCacheObjClassRec xmLabelGCacheObjClassRec;
Packit b099d7
Packit b099d7
Packit b099d7
/*  The Label Gadget Cache instance record  */
Packit b099d7
Packit b099d7
typedef struct _XmLabelGCacheObjPart
Packit b099d7
{
Packit b099d7
  unsigned char	label_type;
Packit b099d7
  unsigned char	alignment;
Packit b099d7
  unsigned char	string_direction;
Packit b099d7
  
Packit b099d7
  Dimension	margin_height;   /* margin around widget */
Packit b099d7
  Dimension	margin_width;
Packit b099d7
  
Packit b099d7
  Dimension	margin_left;    /* additional margins on */
Packit b099d7
  Dimension	margin_right;   /* each side of widget */
Packit b099d7
  Dimension	margin_top;     /* text (or pixmap) is placed */
Packit b099d7
  Dimension	margin_bottom;  /* inside the margins */
Packit b099d7
  
Packit b099d7
  Boolean	recompute_size;
Packit b099d7
  
Packit b099d7
  Boolean	skipCallback;	/* set by RowColumn with entryCallback */
Packit b099d7
  unsigned char menu_type;
Packit b099d7
Packit b099d7
  /*
Packit b099d7
   * Following are color resources and instance variables for Gadgets.
Packit b099d7
   * Because of problems involving the history of the gadget cache these
Packit b099d7
   * variables appear here rather than in XmGadget.
Packit b099d7
   *
Packit b099d7
   * XmArrowButtonGadget and XmSeparatorGadget have effectively the same
Packit b099d7
   * set of color resources implemented for each.
Packit b099d7
   * 
Packit b099d7
   * XmLabelGadget does not use all of these variables (e.g top_shadow_color).
Packit b099d7
   * It initializes them and maintains them but does not use all of them
Packit b099d7
   * to render the label gadget.  They are here for use by subclasses.
Packit b099d7
   *
Packit b099d7
   *  Sterling Barrett
Packit b099d7
   *  sterling@ics.com
Packit b099d7
   */
Packit b099d7
  
Packit b099d7
  GC		background_GC;
Packit b099d7
  GC		top_shadow_GC;
Packit b099d7
  GC		bottom_shadow_GC;
Packit b099d7
  GC		highlight_GC;
Packit b099d7
  
Packit b099d7
  Pixel		foreground;
Packit b099d7
  Pixel		background;
Packit b099d7
  
Packit b099d7
  Pixel		top_shadow_color;
Packit b099d7
  Pixmap	top_shadow_pixmap;
Packit b099d7
  
Packit b099d7
  Pixel		bottom_shadow_color;
Packit b099d7
  Pixmap	bottom_shadow_pixmap;
Packit b099d7
  
Packit b099d7
  Pixel		highlight_color;
Packit b099d7
  Pixmap	highlight_pixmap;
Packit b099d7
} XmLabelGCacheObjPart;
Packit b099d7
Packit b099d7
typedef struct _XmLabelGCacheObjRec
Packit b099d7
{
Packit b099d7
  ObjectPart            object;
Packit b099d7
  XmExtPart		ext;
Packit b099d7
  XmLabelGCacheObjPart  label_cache;
Packit b099d7
} XmLabelGCacheObjRec;
Packit b099d7
Packit b099d7
/*  The Label Widget Class and instance records  */
Packit b099d7
/*************************************************/
Packit b099d7
Packit b099d7
typedef struct _XmLabelGadgetClassPart     /* label class record */
Packit b099d7
{
Packit b099d7
  XtWidgetProc		setOverrideCallback;
Packit b099d7
  XmMenuProc		menuProcs;
Packit b099d7
  XtPointer		extension;
Packit b099d7
} XmLabelGadgetClassPart;
Packit b099d7
Packit b099d7
typedef struct _XmLabelGadgetClassRec
Packit b099d7
{
Packit b099d7
  RectObjClassPart       rect_class;
Packit b099d7
  XmGadgetClassPart      gadget_class;
Packit b099d7
  XmLabelGadgetClassPart label_class;
Packit b099d7
} XmLabelGadgetClassRec;
Packit b099d7
Packit b099d7
externalref XmLabelGadgetClassRec xmLabelGadgetClassRec;
Packit b099d7
Packit b099d7
typedef struct _XmLabelGadgetPart
Packit b099d7
{
Packit b099d7
  _XmString	  _label;  /* String sent to this widget */
Packit b099d7
  _XmString       _acc_text;
Packit b099d7
  KeySym          mnemonic;
Packit b099d7
  XmStringCharSet mnemonicCharset;
Packit b099d7
  char 		  *accelerator;
Packit b099d7
  XmFontList	  font;
Packit b099d7
  
Packit b099d7
  Pixmap	  pixmap; 
Packit b099d7
  Pixmap	  pixmap_insen; 
Packit b099d7
  
Packit b099d7
  /* PRIVATE members -- values computed by LabelWidgetClass methods */
Packit b099d7
  
Packit b099d7
  GC		  normal_GC;   /* GC for text */	
Packit b099d7
  GC		  insensitive_GC;
Packit b099d7
  XRectangle	  TextRect;     /* The bounding box of the text or clip */
Packit b099d7
  XRectangle	  acc_TextRect; /* rectangle of the window; whichever is
Packit b099d7
				 smaller */
Packit b099d7
  
Packit b099d7
  XmLabelGCacheObjPart *cache;
Packit b099d7
  
Packit b099d7
  Dimension	  acc_left_delta;  /* Amount we increased the margins */
Packit b099d7
  Dimension	  acc_right_delta; /* to accomodate accelerator text */
Packit b099d7
Packit b099d7
  Dimension	* baselines;	/* Cached baseline information. */
Packit b099d7
Packit b099d7
  XtEnum          fill_bg_box;     /* Computed by LabelGadget or */
Packit b099d7
				   /* pinned by subclasses. */
Packit b099d7
  Boolean	  check_set_render_table;
Packit b099d7
Packit b099d7
  XmPixmapPlacement pixmap_placement; /* Where to place the icon label. */
Packit b099d7
  Dimension pixmap_text_padding; /* padding between the icon and the text. */
Packit b099d7
Packit b099d7
  XRectangle	  PixmapRect;   /* The bounding box of the pixmap in TextRect */
Packit b099d7
  XRectangle	  StringRect;   /* The bounding box of the string in TextRect */
Packit b099d7
#ifdef FIX_1381
Packit b099d7
  GC		  shadow_GC;
Packit b099d7
#endif
Packit b099d7
Packit b099d7
} XmLabelGadgetPart;
Packit b099d7
Packit b099d7
Packit b099d7
typedef struct _XmLabelGadgetRec
Packit b099d7
{
Packit b099d7
  ObjectPart        object;
Packit b099d7
  RectObjPart       rectangle;
Packit b099d7
  XmGadgetPart      gadget;
Packit b099d7
  XmLabelGadgetPart label;
Packit b099d7
} XmLabelGadgetRec;
Packit b099d7
Packit b099d7
typedef struct _LRectangle
Packit b099d7
{
Packit b099d7
  int x, y;
Packit b099d7
  int width, height;
Packit b099d7
} LRectangle;
Packit b099d7
Packit b099d7
/* Inherited  Functions exported by label */
Packit b099d7
Packit b099d7
#define XmInheritSetOverrideCallback	((XtWidgetProc) _XtInherit)
Packit b099d7
#define XmInheritResize			((XtWidgetProc) _XtInherit)
Packit b099d7
Packit b099d7
#define INVALID_PIXEL	((Pixel) -1)
Packit b099d7
#define INVALID_PIXMAP	((Pixmap) -1)
Packit b099d7
/* Padding between label text and accelerator text */
Packit b099d7
Packit b099d7
#define LABELG_ACC_PAD	15
Packit b099d7
Packit b099d7
/* MACROS */
Packit b099d7
/********
Packit b099d7
 * Macros for cached instance fields
Packit b099d7
 */
Packit b099d7
#define LabG_LabelType(w)		(((XmLabelGadget)(w)) -> \
Packit b099d7
					   label.cache-> label_type)
Packit b099d7
#define LabG_Alignment(w)		(((XmLabelGadget)(w)) -> \
Packit b099d7
					   label.cache-> alignment)
Packit b099d7
#define LabG_StringDirection(w)		(((XmLabelGadget)(w)) -> \
Packit b099d7
					   label.cache-> string_direction)
Packit b099d7
#define LabG_MarginHeight(w)		(((XmLabelGadget)(w)) -> \
Packit b099d7
                                           label.cache-> margin_height)
Packit b099d7
#define LabG_MarginWidth(w)		(((XmLabelGadget)(w)) -> \
Packit b099d7
                                           label.cache-> margin_width)
Packit b099d7
#define LabG_MarginLeft(w)		(((XmLabelGadget)(w)) -> \
Packit b099d7
                                           label.cache-> margin_left)
Packit b099d7
#define LabG_MarginRight(w)		(((XmLabelGadget)(w)) -> \
Packit b099d7
                                           label.cache-> margin_right)
Packit b099d7
#define LabG_MarginTop(w)		(((XmLabelGadget)(w)) -> \
Packit b099d7
                                           label.cache-> margin_top)
Packit b099d7
#define LabG_MarginBottom(w)		(((XmLabelGadget)(w)) -> \
Packit b099d7
                                           label.cache-> margin_bottom)
Packit b099d7
#define LabG_RecomputeSize(w)		(((XmLabelGadget)(w)) -> \
Packit b099d7
                                           label.cache-> recompute_size)
Packit b099d7
#define LabG_SkipCallback(w)		(((XmLabelGadget)(w)) -> \
Packit b099d7
                                           label.cache-> skipCallback)
Packit b099d7
#define LabG_MenuType(w)		(((XmLabelGadget)(w)) -> \
Packit b099d7
                                           label.cache-> menu_type)
Packit b099d7
#define LabG_BackgroundGC(w)		(((XmLabelGadget)(w)) -> \
Packit b099d7
                                           label.cache-> background_GC)
Packit b099d7
#define LabG_TopShadowGC(w)		(((XmLabelGadget)(w)) -> \
Packit b099d7
                                           label.cache-> top_shadow_GC)
Packit b099d7
#define LabG_BottomShadowGC(w)		(((XmLabelGadget)(w)) -> \
Packit b099d7
                                           label.cache-> bottom_shadow_GC)
Packit b099d7
#define LabG_HighlightGC(w)		(((XmLabelGadget)(w)) -> \
Packit b099d7
                                           label.cache-> highlight_GC)
Packit b099d7
#define LabG_Foreground(w)		(((XmLabelGadget)(w)) -> \
Packit b099d7
                                           label.cache-> foreground)
Packit b099d7
#define LabG_Background(w)		(((XmLabelGadget)(w)) -> \
Packit b099d7
                                           label.cache-> background)
Packit b099d7
#define LabG_TopShadowColor(w)		(((XmLabelGadget)(w)) -> \
Packit b099d7
                                           label.cache-> top_shadow_color)
Packit b099d7
#define LabG_TopShadowPixmap(w)		(((XmLabelGadget)(w)) -> \
Packit b099d7
                                           label.cache-> top_shadow_pixmap)
Packit b099d7
#define LabG_BottomShadowColor(w)	(((XmLabelGadget)(w)) -> \
Packit b099d7
                                           label.cache-> bottom_shadow_color)
Packit b099d7
#define LabG_BottomShadowPixmap(w)	(((XmLabelGadget)(w)) -> \
Packit b099d7
                                           label.cache-> bottom_shadow_pixmap)
Packit b099d7
#define LabG_HighlightColor(w)	        (((XmLabelGadget)(w)) -> \
Packit b099d7
                                           label.cache-> highlight_color)
Packit b099d7
#define LabG_HighlightPixmap(w)	        (((XmLabelGadget)(w)) -> \
Packit b099d7
                                           label.cache-> highlight_pixmap)
Packit b099d7
/********
Packit b099d7
 * Macros for UNcached instance fields
Packit b099d7
 */
Packit b099d7
#define LabG__label(w)			(((XmLabelGadget)(w)) -> \
Packit b099d7
					   label._label)
Packit b099d7
#define LabG__acceleratorText(w)	(((XmLabelGadget)(w)) -> \
Packit b099d7
                                           label._acc_text)
Packit b099d7
#define LabG_Font(w)			(((XmLabelGadget)(w)) -> \
Packit b099d7
					   label.font)
Packit b099d7
#define LabG_Mnemonic(w)		(((XmLabelGadget)(w)) -> \
Packit b099d7
					   label.mnemonic)
Packit b099d7
#define LabG_MnemonicCharset(w)         (((XmLabelGadget)(w)) -> \
Packit b099d7
                                           label.mnemonicCharset)
Packit b099d7
#define LabG_Accelerator(w)		(((XmLabelGadget)(w)) -> \
Packit b099d7
                                           label.accelerator)
Packit b099d7
#define LabG_Pixmap(w)			(((XmLabelGadget)(w)) -> \
Packit b099d7
                                           label.pixmap)
Packit b099d7
#define LabG_PixmapInsensitive(w)	(((XmLabelGadget)(w)) -> \
Packit b099d7
                                           label.pixmap_insen)
Packit b099d7
#define LabG_NormalGC(w)		(((XmLabelGadget)(w)) -> \
Packit b099d7
                                           label.normal_GC)
Packit b099d7
#define LabG_InsensitiveGC(w)		(((XmLabelGadget)(w)) -> \
Packit b099d7
                                           label.insensitive_GC)
Packit b099d7
#ifdef FIX_1381
Packit b099d7
#define LabG_ShadowGC(w)		(((XmLabelGadget)(w)) -> \
Packit b099d7
                                           label.shadow_GC)
Packit b099d7
#endif
Packit b099d7
#define LabG_TextRect(w)		(((XmLabelGadget)(w)) -> \
Packit b099d7
                                           label.TextRect)
Packit b099d7
#define LabG_AccTextRect(w)		(((XmLabelGadget)(w)) -> \
Packit b099d7
                                           label.acc_TextRect)
Packit b099d7
#define LabG_PixmapRect(w)		(((XmLabelGadget)(w)) -> \
Packit b099d7
                                           label.PixmapRect)
Packit b099d7
#define LabG_StringRect(w)		(((XmLabelGadget)(w)) -> \
Packit b099d7
                                           label.StringRect)
Packit b099d7
#define LabG_PixmapPlacement(w)		(((XmLabelGadget)(w)) -> \
Packit b099d7
                                           label.pixmap_placement)
Packit b099d7
#define LabG_PixmapTextPadding(w)	(((XmLabelGadget)(w)) -> \
Packit b099d7
                                           label.pixmap_text_padding)
Packit b099d7
Packit b099d7
Packit b099d7
/********
Packit b099d7
 * Convenience Macros 
Packit b099d7
 */
Packit b099d7
#define LabG_TextRect_x(w)		(LabG_TextRect(w).x)
Packit b099d7
                                           
Packit b099d7
#define LabG_TextRect_y(w)		(LabG_TextRect(w).y)
Packit b099d7
                                           
Packit b099d7
#define LabG_TextRect_width(w)		(LabG_TextRect(w).width)
Packit b099d7
                                           
Packit b099d7
#define LabG_TextRect_height(w)		(LabG_TextRect(w).height)
Packit b099d7
Packit b099d7
#define LabG_IsText(w)			(LabG_LabelType(w) == XmSTRING)
Packit b099d7
Packit b099d7
#define LabG_IsPixmap(w)		(LabG_LabelType(w) == XmPIXMAP)
Packit b099d7
Packit b099d7
#define LabG_IsPixmapAndText(w)		(LabG_LabelType(w) == \
Packit b099d7
					XmPIXMAP_AND_STRING)
Packit b099d7
Packit b099d7
#define LabG_Cache(w)			(((XmLabelGadget)(w))-> \
Packit b099d7
					   label.cache)
Packit b099d7
#define LabG_Shadow(w)    (((XmLabelGadget)(w))->gadget.shadow_thickness)
Packit b099d7
#define LabG_Highlight(w) (((XmLabelGadget)(w))->gadget.highlight_thickness)
Packit b099d7
#define LabG_Baseline(w)  (_XmStringBaseline ((LabG_Font(w)), (LabG__Label(w))))
Packit b099d7
#define LabG_ClassCachePart(w)	\
Packit b099d7
	(((XmLabelGadgetClass)xmLabelGadgetClass)->gadget_class.cache_part)
Packit b099d7
Packit b099d7
#define LabG_IsMenupane(w)	((LabG_MenuType(w) == XmMENU_POPUP) ||	\
Packit b099d7
				 (LabG_MenuType(w) == XmMENU_PULLDOWN))
Packit b099d7
Packit b099d7
#define _XmAssignLabG_MarginHeight_r(cache, val) \
Packit b099d7
		cache->margin_height = val
Packit b099d7
#define _XmAssignLabG_MarginWidth_r(cache, val) \
Packit b099d7
		cache->margin_width = val
Packit b099d7
#define _XmAssignLabG_MarginLeft_r(cache, val) \
Packit b099d7
		cache->margin_left = val
Packit b099d7
#define _XmAssignLabG_MarginRight_r(cache, val) \
Packit b099d7
		cache->margin_right = val
Packit b099d7
#define _XmAssignLabG_MarginTop_r(cache, val) \
Packit b099d7
		cache->margin_top = val
Packit b099d7
#define _XmAssignLabG_MarginBottom_r(cache, val) \
Packit b099d7
		cache->margin_bottom = val
Packit b099d7
Packit b099d7
extern void _XmQualifyLabelLocalCache(XmLabelGCacheObjPart *, XmLabelGadget);
Packit b099d7
extern void _XmReCacheLabG_r(XmLabelGCacheObjPart *, XmLabelGadget);
Packit b099d7
Packit b099d7
#ifdef __cplusplus
Packit b099d7
}  /* Close scope of 'extern "C"' declaration which encloses file. */
Packit b099d7
#endif
Packit b099d7
Packit b099d7
#endif /* _XmLabelGP_h */
Packit b099d7
/* DON'T ADD ANYTHING AFTER THIS #endif */