Blame lib/Xm/TextFP.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
/* $TOG: TextFP.h /main/17 1997/03/04 17:00:01 dbl $ */
Packit b099d7
/* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */
Packit b099d7
#ifndef _XmTextFP_h
Packit b099d7
#define _XmTextFP_h
Packit b099d7
Packit b099d7
#include <Xm/PrimitiveP.h>
Packit b099d7
#include <Xm/TextF.h>
Packit b099d7
#ifdef USE_XFT
Packit b099d7
#include <X11/Xft/Xft.h>
Packit b099d7
#endif
Packit b099d7
Packit b099d7
#ifdef __cplusplus
Packit b099d7
extern "C" {
Packit b099d7
#endif
Packit b099d7
Packit b099d7
/*
Packit b099d7
 * Defines for different cursors
Packit b099d7
 */
Packit b099d7
Packit b099d7
#define IBEAM_WIDTH	3
Packit b099d7
#define CARET_WIDTH	9
Packit b099d7
#define CARET_HEIGHT	5
Packit b099d7
Packit b099d7
/*
Packit b099d7
 * Here is the Text Field Widget class structure.
Packit b099d7
 */
Packit b099d7
Packit b099d7
typedef struct _XmTextFieldClassPart {
Packit b099d7
  XtPointer extension;		/* Pointer to extension record. */
Packit b099d7
} XmTextFieldClassPart;
Packit b099d7
Packit b099d7
typedef struct _XmTextFieldClassRec {
Packit b099d7
  CoreClassPart core_class;  /* Not RectObjClassPart so I can reference
Packit b099d7
				  core_class s */
Packit b099d7
  XmPrimitiveClassPart primitive_class;
Packit b099d7
  XmTextFieldClassPart text_class;
Packit b099d7
} XmTextFieldClassRec;
Packit b099d7
Packit b099d7
externalref XmTextFieldClassRec xmTextFieldClassRec;
Packit b099d7
Packit b099d7
/*
Packit b099d7
 * On the spot support.
Packit b099d7
 */
Packit b099d7
typedef struct _OnTheSpotData {
Packit b099d7
  XmTextPosition start;
Packit b099d7
  XmTextPosition end;
Packit b099d7
  XmTextPosition cursor;
Packit b099d7
  int over_len;
Packit b099d7
  int over_maxlen;
Packit b099d7
  char *over_str;
Packit b099d7
  int under_preedit;
Packit b099d7
  Boolean under_verify_preedit;
Packit b099d7
  Boolean verify_commit;
Packit b099d7
  int pad;
Packit b099d7
} OnTheSpotDataRec, *OnTheSpotData;
Packit b099d7
Packit b099d7
/*
Packit b099d7
 * Here is the Text Field Widget instance structures.
Packit b099d7
 */
Packit b099d7
Packit b099d7
typedef struct _XmTextFieldPart {
Packit b099d7
    XtCallbackList activate_callback;	       /* Command activate callback */
Packit b099d7
    XtCallbackList focus_callback;             /* Verify gain focus callback */
Packit b099d7
    XtCallbackList losing_focus_callback;      /* Verify losing focus 
Packit b099d7
						  callback */
Packit b099d7
    XtCallbackList modify_verify_callback;     /* Verify value to change 
Packit b099d7
						  callback */
Packit b099d7
    XtCallbackList wcs_modify_verify_callback; /* Verify value to change 
Packit b099d7
						  callback */
Packit b099d7
    XtCallbackList motion_verify_callback;     /* Verify insert cursor position
Packit b099d7
						  to change callback */
Packit b099d7
    XtCallbackList gain_primary_callback;      /* Gained ownership of Primary
Packit b099d7
						  Selection */
Packit b099d7
    XtCallbackList lose_primary_callback;      /* Lost ownership of Primary
Packit b099d7
						  Selection */
Packit b099d7
    XtCallbackList value_changed_callback;     /* Notify that value has changed
Packit b099d7
						  callback */
Packit b099d7
    char * value;		/* pointer to widget value stored as char * */
Packit b099d7
    wchar_t * wc_value;		/* pointer to widget value stored as 
Packit b099d7
				   wchar_t * */
Packit b099d7
Packit b099d7
    XmFontList font_list;	/* Uses only the font portion of fontlist */
Packit b099d7
#if USE_XFT
Packit b099d7
    XtPointer font;	        /* font retrieved from the fontlist */
Packit b099d7
#else
Packit b099d7
    XFontStruct *font;	        /* font retrieved from the fontlist */
Packit b099d7
#endif
Packit b099d7
    XmTextScanType *selection_array; /* Description of what to cycle
Packit b099d7
					through on selections */
Packit b099d7
    _XmHighlightData highlight;      /* Info on the highlighting regions. */
Packit b099d7
Packit b099d7
    GC gc;			/* Normal GC for drawing text and cursor */
Packit b099d7
    GC image_gc;		/* Image GC for drawing text cursor*/
Packit b099d7
    GC save_gc;                 /* GC for saving/restoring under IBeam */
Packit b099d7
Packit b099d7
    Pixmap ibeam_off;		/* pixmap for area under the IBeam */
Packit b099d7
    Pixmap add_mode_cursor;	/* The add mode cursor pixmap */
Packit b099d7
    Pixmap cursor;		/* The ibeam cursor stencil */
Packit b099d7
    Pixmap putback;		/* AVAILABLE: was in 1.1 but not really used */
Packit b099d7
    Pixmap stipple_tile;	/* The tile pattern for the stippled I-beam */
Packit b099d7
    Pixmap image_clip;		/* AVAILABLE: was in 1.2 but not used now */
Packit b099d7
Packit b099d7
    XmTextPosition cursor_position;  /* Character location of the insert 
Packit b099d7
					cursor */
Packit b099d7
    XmTextPosition new_h_offset;     /* AVAILABLE: was in 1.1 but not used */
Packit b099d7
    XmTextPosition h_offset;  	     /* The x position of the first character
Packit b099d7
					(relative to left edge of widget) */
Packit b099d7
    XmTextPosition orig_left;        /* Left primary selection prior to 
Packit b099d7
					extend */
Packit b099d7
    XmTextPosition orig_right;       /* Right primary selection prior to
Packit b099d7
					extend */
Packit b099d7
    XmTextPosition prim_pos_left;    /* Left primary selection position */
Packit b099d7
    XmTextPosition prim_pos_right;   /* Right primary selection position */
Packit b099d7
    XmTextPosition prim_anchor;	     /* Primary selection pivot point */
Packit b099d7
Packit b099d7
    XmTextPosition sec_pos_left;     /* Left secondary selection position */
Packit b099d7
    XmTextPosition sec_pos_right;    /* Right secondary selection position */
Packit b099d7
    XmTextPosition sec_anchor;	     /* Secondary selection pivot point */
Packit b099d7
Packit b099d7
    XmTextPosition stuff_pos;	/* Position to stuff the primary selection */
Packit b099d7
Packit b099d7
    Position select_pos_x;      /* x position for timer-based scrolling */
Packit b099d7
Packit b099d7
    Time prim_time;             /* Timestamp of primary selection */
Packit b099d7
    Time dest_time;             /* Timestamp of destination selection */
Packit b099d7
    Time sec_time;              /* Timestamp of secondary selection */
Packit b099d7
    Time last_time;             /* Time of last selection event */
Packit b099d7
Packit b099d7
    XtIntervalId timer_id;	/* Blinking cursor timer */
Packit b099d7
    XtIntervalId select_id;     /* Timer based scrolling identifier */
Packit b099d7
Packit b099d7
    int blink_rate;		/* Rate of blinking text cursor in msec */
Packit b099d7
    int selection_array_count;  /* Selection array count */
Packit b099d7
    int threshold;		/* Selection threshold */
Packit b099d7
    int size_allocd;		/* Size allocated for value string */
Packit b099d7
    int string_length;          /* The number of characters in the string 
Packit b099d7
				   (including the trailing NULL) */
Packit b099d7
    int cursor_height;		/* Save cursor dimensions */
Packit b099d7
    int cursor_width;		/* Save cursor dimensions */
Packit b099d7
    int sarray_index;		/* Index into selection array */
Packit b099d7
    int max_length;		/* Maximum number of character that can be
Packit b099d7
				   inserted into the text field widget */
Packit b099d7
Packit b099d7
    int max_char_size;          /* Max bytes per character in cur locale */
Packit b099d7
    short columns;		/* The number of characters in the width */
Packit b099d7
Packit b099d7
    Dimension margin_width;	/* Height between text borders and text */
Packit b099d7
    Dimension margin_height;	/* Width between text borders and text */
Packit b099d7
    Dimension average_char_width;   /* Average character width based on font */
Packit b099d7
    Dimension margin_top;       /* Height between text borders and top of 
Packit b099d7
				   text */
Packit b099d7
    Dimension margin_bottom;    /* Height between text borders and bottom of 
Packit b099d7
				   text */
Packit b099d7
    Dimension font_ascent;      /* Ascent of font or fontset used by widget */
Packit b099d7
    Dimension font_descent;     /* Descent of font or fontset used by widget */
Packit b099d7
Packit b099d7
    Boolean resize_width;	/* Allows the widget to grow horizontally
Packit b099d7
				   when borders are reached */
Packit b099d7
    Boolean pending_delete;	/* Delete primary selection on insert when
Packit b099d7
				   set to True */
Packit b099d7
    Boolean editable;		/* Sets editablility of text */
Packit b099d7
    Boolean verify_bell;        /* Determines if bell is sounded when verify
Packit b099d7
				   callback returns doit - False */
Packit b099d7
    Boolean cursor_position_visible; /* Sets visibility of insert cursor */
Packit b099d7
Packit b099d7
    Boolean traversed;          /* Flag used with losing focus verification to
Packit b099d7
                                   indicate a traversal key pressed event */
Packit b099d7
    Boolean add_mode;		/* Add mode for cursor movement */
Packit b099d7
    Boolean has_focus;		/* Flag that indicates whether the widget
Packit b099d7
			           has input focus */
Packit b099d7
    Boolean blink_on;		/* State of Blinking insert cursor */
Packit b099d7
    short int cursor_on;	/* Indicates whether the cursor is visible */
Packit b099d7
    Boolean refresh_ibeam_off;	/* Indicates whether the area under IBeam needs
Packit b099d7
				   to be re-captured */
Packit b099d7
    Boolean have_inverted_image_gc;  /* fg/bg of image gc have been swapped */
Packit b099d7
    Boolean has_primary;	/* Indicates that is has the
Packit b099d7
				   primary selection */
Packit b099d7
    Boolean has_secondary;	/* Indicates that is has the
Packit b099d7
				   secondary selection */
Packit b099d7
    Boolean has_destination;	/* Indicates that is has the
Packit b099d7
				   destination selection */
Packit b099d7
    Boolean sec_drag;           /* Indicates a secondary drag was made */ 
Packit b099d7
    Boolean selection_move;	/* Indicates that the action requires a
Packit b099d7
				   secondary move (i.e. copy & cut) */
Packit b099d7
    Boolean pending_off;	/* indicates pending delete state */
Packit b099d7
    Boolean fontlist_created;   /* Indicates that the text field widget created
Packit b099d7
				   it's own fontlist */
Packit b099d7
    Boolean has_rect;		/* currently has clipping rectangle */
Packit b099d7
    Boolean do_drop;		/* Indicates that the widget the recieved the
Packit b099d7
				   button release, did not have a previous
Packit b099d7
                                   button press, so it is o.k. to request
Packit b099d7
				   the MOTIF_DROP selection. */
Packit b099d7
    Boolean cancel;		/* Cancels selection actions when true */
Packit b099d7
    Boolean extending;		/* Indicates extending primary selection */
Packit b099d7
    Boolean sec_extending;      /* Indicates extending secondary selection */
Packit b099d7
    Boolean changed_visible;    /* Indicates whether the dest_visible flag
Packit b099d7
                                   is in a temporary changed state */
Packit b099d7
    Boolean have_fontset;       /* The widgets font is a fontset, not a 
Packit b099d7
				   fontstruct... use R5 draw routines */
Packit b099d7
    Boolean in_setvalues;	/* used to disable unnecessary redisplays */
Packit b099d7
    Boolean do_resize;		/* used to prevent inappropriate resizes */
Packit b099d7
    Boolean redisplay;		/* used to set redisplay flag in setvalues */
Packit b099d7
    Boolean overstrike;		/* overstrike mode for character input */
Packit b099d7
    Boolean sel_start;		/* overstrike mode for character input */
Packit b099d7
    XtPointer extension;	/* Pointer to extension record. */
Packit b099d7
Packit b099d7
    XtCallbackList  destination_callback;   /* Selection destination cb */
Packit b099d7
    Boolean selection_link;	/* Indicates that the action requires a
Packit b099d7
				   link */
Packit b099d7
    /* New for 2.0 */
Packit b099d7
    Boolean take_primary;	/* Indicates that is has to take the
Packit b099d7
				   primary selection */
Packit b099d7
    GC cursor_gc;               /* 1-bit depth GC for creating the I-beam 
Packit b099d7
				   stipples (normal & add mode) */
Packit b099d7
    XtIntervalId drag_id;       /* timer to start btn1 drag */
Packit b099d7
    _XmTextActionRec *transfer_action;  /* to keep track of delayed action */
Packit b099d7
    /* Boolean rt_save; */  		/* used for MT work */
Packit b099d7
    OnTheSpotData onthespot;    /* data for on-the-spot im support */
Packit b099d7
Packit b099d7
    Boolean check_set_render_table; /* used for MT safe work */
Packit b099d7
    Boolean programmatic_highlights;	/* XmTextFieldSetHighlight called */
Packit b099d7
#ifdef USE_XFT
Packit b099d7
    Boolean use_xft;
Packit b099d7
#endif
Packit b099d7
} XmTextFieldPart;
Packit b099d7
Packit b099d7
typedef struct _XmTextFieldRec {
Packit b099d7
    CorePart core;
Packit b099d7
    XmPrimitivePart primitive;
Packit b099d7
    XmTextFieldPart text;
Packit b099d7
} XmTextFieldRec;
Packit b099d7
Packit b099d7
Packit b099d7
/****************
Packit b099d7
 *
Packit b099d7
 * Macros for the uncached data
Packit b099d7
 *
Packit b099d7
 ****************/
Packit b099d7
Packit b099d7
#define TextF_ActivateCallback(tfg)	\
Packit b099d7
	(((XmTextFieldWidget)(tfg)) -> text.activate_callback)
Packit b099d7
#define TextF_LosingFocusCallback(tfg)	\
Packit b099d7
	(((XmTextFieldWidget)(tfg)) -> text.losing_focus_callback)
Packit b099d7
#define TextF_FocusCallback(tfg)	\
Packit b099d7
	(((XmTextFieldWidget)(tfg)) -> text.focus_callback)
Packit b099d7
#define TextF_ModifyVerifyCallback(tfg)	\
Packit b099d7
	(((XmTextFieldWidget)(tfg)) -> text.modify_verify_callback)
Packit b099d7
#define TextF_ModifyVerifyCallbackWcs(tfg) \
Packit b099d7
	(((XmTextFieldWidget)(tfg)) -> text.wcs_modify_verify_callback)
Packit b099d7
#define TextF_MotionVerifyCallback(tfg)	\
Packit b099d7
	(((XmTextFieldWidget)(tfg)) -> text.motion_verify_callback)
Packit b099d7
#define TextF_ValueChangedCallback(tfg)	\
Packit b099d7
	(((XmTextFieldWidget)(tfg)) -> text.value_changed_callback)
Packit b099d7
#define TextF_Value(tfg)		\
Packit b099d7
	(((XmTextFieldWidget)(tfg)) -> text.value)
Packit b099d7
#define TextF_WcValue(tfg)		\
Packit b099d7
	(((XmTextFieldWidget)(tfg)) -> text.wc_value)
Packit b099d7
#define TextF_MarginHeight(tfg)		\
Packit b099d7
	(((XmTextFieldWidget)(tfg)) -> text.margin_height)
Packit b099d7
#define TextF_MarginWidth(tfg)		\
Packit b099d7
	(((XmTextFieldWidget)(tfg)) -> text.margin_width)
Packit b099d7
#define TextF_CursorPosition(tfg)	\
Packit b099d7
	(((XmTextFieldWidget)(tfg)) -> text.cursor_position)
Packit b099d7
#define TextF_Columns(tfg)		\
Packit b099d7
	(((XmTextFieldWidget)(tfg)) -> text.columns)
Packit b099d7
#define TextF_MaxLength(tfg)		\
Packit b099d7
	(((XmTextFieldWidget)(tfg)) -> text.max_length)
Packit b099d7
#define TextF_BlinkRate(tfg)		\
Packit b099d7
	(((XmTextFieldWidget)(tfg)) -> text.blink_rate)
Packit b099d7
#define TextF_FontList(tfg)		\
Packit b099d7
	(((XmTextFieldWidget)(tfg)) -> text.font_list)
Packit b099d7
#define TextF_Font(tfg)			\
Packit b099d7
	((XFontStruct*)(((XmTextFieldWidget)(tfg)) -> text.font))
Packit b099d7
#define TextF_FontAscent(tfg)		\
Packit b099d7
	(((XmTextFieldWidget)(tfg)) -> text.font_ascent)
Packit b099d7
#define TextF_FontDescent(tfg)		\
Packit b099d7
	(((XmTextFieldWidget)(tfg)) -> text.font_descent)
Packit b099d7
#define TextF_SelectionArray(tfg)	\
Packit b099d7
	(((XmTextFieldWidget)(tfg)) -> text.selection_array)
Packit b099d7
#define TextF_SelectionArrayCount(tfg)	\
Packit b099d7
	(((XmTextFieldWidget)(tfg)) -> text.selection_array_count)
Packit b099d7
#define TextF_ResizeWidth(tfg)		\
Packit b099d7
	(((XmTextFieldWidget)(tfg)) -> text.resize_width)
Packit b099d7
#define TextF_PendingDelete(tfg)	\
Packit b099d7
	(((XmTextFieldWidget)(tfg)) -> text.pending_delete)
Packit b099d7
#define TextF_Editable(tfg)		\
Packit b099d7
	(((XmTextFieldWidget)(tfg)) -> text.editable)
Packit b099d7
#define TextF_CursorPositionVisible(tfg) \
Packit b099d7
	(((XmTextFieldWidget)(tfg)) -> text.cursor_position_visible)
Packit b099d7
#define TextF_Threshold(tfg)		\
Packit b099d7
	(((XmTextFieldWidget)(tfg)) -> text.threshold)
Packit b099d7
#define TextF_UseFontSet(tfg)		\
Packit b099d7
	(((XmTextFieldWidget)(tfg)) -> text.have_fontset)
Packit b099d7
#ifdef USE_XFT
Packit b099d7
#define TextF_UseXft(tfg)		\
Packit b099d7
	(((XmTextFieldWidget)(tfg)) -> text.use_xft)
Packit b099d7
#define	TextF_XftFont(tfg)		\
Packit b099d7
	((XftFont*)(((XmTextFieldWidget)(tfg)) -> text.font))
Packit b099d7
#endif
Packit b099d7
Packit b099d7
/*
Packit b099d7
 * On the spot support.
Packit b099d7
 */
Packit b099d7
#define PreStart(tfg)                           (((XmTextFieldWidget)(tfg)) -> \
Packit b099d7
                                           text.onthespot->start)
Packit b099d7
#define PreEnd(tfg)                             (((XmTextFieldWidget)(tfg)) -> \
Packit b099d7
                                           text.onthespot->end)
Packit b099d7
#define PreCursor(tfg)                          (((XmTextFieldWidget)(tfg)) -> \
Packit b099d7
                                           text.onthespot->cursor)
Packit b099d7
#define FUnderVerifyPreedit(tfg)	  	(((XmTextFieldWidget)(tfg)) -> \
Packit b099d7
					 text.onthespot->under_verify_preedit)
Packit b099d7
#define FVerifyCommitNeeded(tfg)		(((XmTextFieldWidget)(tfg)) -> \
Packit b099d7
					 text.onthespot->verify_commit)
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 /* _XmTextFieldWidgetP_h */