From 3261805fee19e346b4d1f84b23816daa1628764a Mon Sep 17 00:00:00 2001 From: lecoanet Date: Wed, 16 Apr 2003 09:49:22 +0000 Subject: Update from the Windows port and general cleanup/restructure --- generic/Item.h | 401 ++++++++++++++++++++++++++++++++++----------------------- 1 file changed, 240 insertions(+), 161 deletions(-) (limited to 'generic/Item.h') diff --git a/generic/Item.h b/generic/Item.h index b44604c..3c89560 100644 --- a/generic/Item.h +++ b/generic/Item.h @@ -38,99 +38,176 @@ #include "Field.h" #include +#include -#define DEFAULT_TRACK_PRIORITY 5 -#define DEFAULT_WAY_POINT_PRIORITY 4 -#define DEFAULT_TABULAR_PRIORITY 3 -#define DEFAULT_RECTANGLE_PRIORITY 2 -#define DEFAULT_CURVE_PRIORITY 2 -#define DEFAULT_BEZIER_PRIORITY 2 -#define DEFAULT_TRIANGLES_PRIORITY 2 -#define DEFAULT_ARC_PRIORITY 2 -#define DEFAULT_RETICLE_PRIORITY 2 -#define DEFAULT_MAP_PRIORITY 1 -#define DEFAULT_GROUP_PRIORITY 6 -#define DEFAULT_ICON_PRIORITY 2 -#define DEFAULT_TEXT_PRIORITY 2 -#define DEFAULT_WINDOW_PRIORITY 0 /* N/A */ -#define DEFAULT_MOSAIC_PRIORITY 0 - -#define DEFAULT_MARKER_SIZE 0 -#define DEFAULT_VISIBLE_HISTORY_SIZE 6 -#define DEFAULT_MANAGED_HISTORY_SIZE 6 -#define DEFAULT_SPEED_VECTOR_LENGTH 3 -#define DEFAULT_RETICLE_STEP_SIZE 80 -#define DEFAULT_RETICLE_PERIOD 5 -#define DEFAULT_LABEL_ANGLE 20 -#define DEFAULT_LABEL_DISTANCE 50 -#define DEFAULT_LINE_WIDTH 1 -#define DEFAULT_TILE_SIZE 1 -#define DEFAULT_ROW_COUNT 1 -#define DEFAULT_COLUMN_COUNT 1 - -#define DEFAULT_LABEL_PREFERRED_ANGLE 0 -#define DEFAULT_CONVERGENCE_STYLE 0 +/* + * Types and constants for attribute processing. + */ +typedef struct _ZnAttrConfig { + int type; + char *name; + Tk_Uid uid; + int offset; + int bool_bit; + int flags; + ZnBool read_only; +} ZnAttrConfig; + +/* + * When adding new type in the following enum + * do not forget to update attribute_type_strings + * in Item.c. + */ +#define ZN_CONFIG_END 0 +#define ZN_CONFIG_BOOL 1 +#define ZN_CONFIG_BITMAP 2 +#define ZN_CONFIG_BITMAP_LIST 3 +#define ZN_CONFIG_STRING 4 +#define ZN_CONFIG_FONT 5 +#define ZN_CONFIG_EDGE_LIST 6 +#define ZN_CONFIG_RELIEF 7 +#define ZN_CONFIG_DIM 8 +#define ZN_CONFIG_PRI 9 +#define ZN_CONFIG_ALIGNMENT 10 +#define ZN_CONFIG_AUTO_ALIGNMENT 11 +#define ZN_CONFIG_LINE_END 12 +#define ZN_CONFIG_LABEL_FORMAT 13 +#define ZN_CONFIG_LINE_STYLE 14 +#define ZN_CONFIG_LINE_SHAPE 15 +#define ZN_CONFIG_ITEM 16 +#define ZN_CONFIG_ANGLE 17 +#define ZN_CONFIG_INT 18 +#define ZN_CONFIG_UINT 19 +#define ZN_CONFIG_POINT 20 +#define ZN_CONFIG_ANCHOR 21 +#define ZN_CONFIG_TAG_LIST 22 +#define ZN_CONFIG_MAP_INFO 23 +#define ZN_CONFIG_IMAGE 24 +#define ZN_CONFIG_LEADER_ANCHORS 25 +#define ZN_CONFIG_JOIN_STYLE 26 +#define ZN_CONFIG_CAP_STYLE 27 +#define ZN_CONFIG_GRADIENT 28 +#define ZN_CONFIG_GRADIENT_LIST 29 +#define ZN_CONFIG_WINDOW 30 +#define ZN_CONFIG_ALPHA 31 +#define ZN_CONFIG_FILL_RULE 32 + +#define ZN_DRAW_FLAG 1 << 0 +#define ZN_COORDS_FLAG 1 << 1 +#define ZN_TRANSFO_FLAG 1 << 2 +#define ZN_REPICK_FLAG 1 << 3 +#define ZN_BORDER_FLAG 1 << 4 +#define ZN_CLFC_FLAG 1 << 5 /* Clear Label Format Cache. */ +#define ZN_IMAGE_FLAG 1 << 6 /* Update image pointer. */ +#define ZN_VIS_FLAG 1 << 7 /* Visibility has changed. */ +#define ZN_MOVED_FLAG 1 << 8 /* Item has moved. */ +#define ZN_ITEM_FLAG 1 << 9 /* Signal a change in an item type attribute. */ +#define ZN_MAP_INFO_FLAG 1 << 10 /* Update mapinfo pointer. */ +#define ZN_LAYOUT_FLAG 1 << 10 /* A layout need update. */ +#define ZN_POLAR_FLAG 1 << 11 /* Signal a cartesian to polar change. */ +#define ZN_CARTESIAN_FLAG 1 << 12 /* Signal a polar to cartesian change. */ +#define ZN_TILE_FLAG 1 << 13 /* Update tile pointer. */ +#define ZN_WINDOW_FLAG 1 << 14 /* Signal a change in a window type attribute. */ + + +/* + * This constant marks a non existant item +*/ +#define ZN_NO_ITEM NULL + +/* + * Constants for item parts. The item indexable parts (named fields) are coded + * as positive or null integers. The item specific parts (not indexable) are + * coded as negatives beginning at -2 up to -9 which is the current limit. The + * -1 value is reserved to indicate no part. + */ +#define ZnPartToBit(part) (1 << (ABS(part)-2)) +#define ZN_NO_PART -1 + +/* + * Some flags macros. + */ +#define ISSET(var, mask) ((var) & (mask)) +#define ISCLEAR(var, mask) (((var) & (mask)) == 0) +#define SET(var,mask) ((var) |= (mask)) +#define CLEAR(var, mask) ((var) &= ~(mask)) +#define ASSIGN(var, mask, bool) ((bool) ? SET((var), (mask)) : CLEAR((var), (mask))) /* * Item flags values. */ -#define VISIBLE_BIT 1 -#define SENSITIVE_BIT 2 -#define ATOMIC_BIT 4 -#define UPDATE_DEPENDENT_BIT 16 -#define COMPOSE_SCALE_BIT 32 -#define COMPOSE_ROTATION_BIT 64 -#define COMPOSE_ALPHA_BIT 128 +#define ZN_VISIBLE_BIT (1<<0) +#define ZN_SENSITIVE_BIT (1<<1) +#define ZN_UPDATE_DEPENDENT_BIT (1<<2) +#define ZN_COMPOSE_SCALE_BIT (1<<3) +#define ZN_COMPOSE_ROTATION_BIT (1<<4) +#define ZN_COMPOSE_ALPHA_BIT (1<<5) +/* + * Must be kept one greater than the last flag shift count. + */ +#define ZN_PRIVATE_FLAGS_OFFSET 6 -struct _WidgetInfo; +/* + * Operator constants for the coord method. + */ +#define ZN_COORDS_READ 0 +#define ZN_COORDS_READ_ALL 1 +#define ZN_COORDS_REPLACE 2 +#define ZN_COORDS_REPLACE_ALL 3 +#define ZN_COORDS_ADD 4 +#define ZN_COORDS_ADD_LAST 5 +#define ZN_COORDS_REMOVE 6 + + +struct _ZnWInfo; struct _ZnTransfo; /* * Item record header -- */ -typedef struct _ItemStruct { +typedef struct _ZnItemStruct { /* Private data */ - int id; + long id; ZnList tags; - struct _WidgetInfo *wi; /* The widget this item is on */ - struct _ItemClassStruct *class; /* item class */ - struct _ItemStruct *previous; /* previous item in group list */ - struct _ItemStruct *next; /* next item in group list */ + struct _ZnWInfo *wi; /* The widget this item is on */ + struct _ZnItemClassStruct *class; /* item class */ + struct _ZnItemStruct *previous; /* previous item in group list */ + struct _ZnItemStruct *next; /* next item in group list */ ZnBBox item_bounding_box; /* device item bounding box */ /* Common attributes */ unsigned short flags; unsigned short part_sensitive; /* Currently limited to 16 parts per item */ short inv_flags; - struct _ItemStruct *parent; + struct _ZnItemStruct *parent; int priority; struct _ZnTransfo *transfo; - struct _ItemStruct *connected_item; /* Item this item is connected to */ -#ifdef GLX + struct _ZnItemStruct *connected_item; /* Item this item is connected to */ +#ifdef GL #ifdef GL_LIST GLuint gl_list; /* Display list storing the item graphics */ #endif #endif -} ItemStruct, *Item; +} ZnItemStruct, *ZnItem; -typedef struct _ToAreaStruct { +typedef struct _ZnToAreaStruct { Tk_Uid tag_uid; ZnBool enclosed; - Item in_group; + ZnItem in_group; ZnBool report; ZnBool recursive; ZnBBox *area; } ZnToAreaStruct, *ZnToArea; -typedef struct _PickStruct { +typedef struct _ZnPickStruct { int aperture; - Item in_group; - Item start_item; + ZnItem in_group; + ZnItem start_item; ZnBool recursive; ZnPoint *point; - Item a_item; + ZnItem a_item; int a_part; } ZnPickStruct, *ZnPick; @@ -138,72 +215,75 @@ typedef struct _PickStruct { /* * Item class record -- */ -typedef int (*ItemInitMethod)(Item item, int *argc, Tcl_Obj *CONST *args[]); -typedef int (*ItemConfigureMethod)(Item item, int argc, Tcl_Obj *CONST args[], - int *flags); -typedef int (*ItemQueryMethod)(Item item, int argc, Tcl_Obj *CONST args[]); -typedef void (*ItemCloneMethod)(Item item); -typedef void (*ItemDestroyMethod)(Item item); -typedef void (*ItemDrawMethod)(Item item); -typedef void (*ItemRenderMethod)(Item item); -typedef void (*ItemComputeCoordinatesMethod)(Item item, ZnBool force); -typedef int (*ItemToAreaMethod)(Item item, ZnToArea ta); -typedef double (*ItemPickMethod)(Item item, ZnPick ps); -typedef ZnBool (*ItemIsSensitiveMethod)(Item item, int part); -typedef struct _FieldSetStruct* (*ItemGetFieldSetMethod)(Item item); -typedef int (*ItemContourMethod)(Item item, int cmd, int index, ZnPoly *poly); -typedef void (*ItemPickVertexMethod)(Item item, ZnPoint *p, int *contour, - int *vertex, int *o_vertex); -typedef void (*ItemGetAnchorMethod)(Item item, ZnAnchor anchor, ZnPoint *p); -typedef ZnBool (*ItemGetClipVerticesMethod)(Item item, ZnTriStrip *tristrip); -typedef ZnBool (*ItemGetContoursMethod)(Item item, ZnPoly *poly); -typedef int (*ItemCoordsMethod)(Item item, int contour, int index, int cmd, - ZnPoint **points, char **controls, int *num_points); -typedef void (*ItemInsertCharsMethod)(Item item, int field, int *index, - char *chars); -typedef void (*ItemDeleteCharsMethod)(Item item, int field, int *first, - int *last); -typedef void (*ItemCursorMethod)(Item item, int field, int index); -typedef int (*ItemIndexMethod)(Item item, int field, Tcl_Obj *index_spec, - int *index); -typedef int (*ItemPartMethod)(Item item, Tcl_Obj **part_spec, int *part); -typedef int (*ItemSelectionMethod)(Item item, int field, int offset, - char *chars, int max_chars); -typedef void (*ItemPostScriptMethod)(Item item, PostScriptInfo ps_info); - -typedef struct _ItemClassStruct { - int size; - int num_parts; /* 0 if no special parts, else +typedef int (*ZnItemInitMethod)(ZnItem item, int *argc, Tcl_Obj *CONST *args[]); +typedef int (*ZnItemConfigureMethod)(ZnItem item, int argc, Tcl_Obj *CONST args[], + int *flags); +typedef int (*ZnItemQueryMethod)(ZnItem item, int argc, Tcl_Obj *CONST args[]); +typedef void (*ZnItemCloneMethod)(ZnItem item); +typedef void (*ZnItemDestroyMethod)(ZnItem item); +typedef void (*ZnItemDrawMethod)(ZnItem item); +typedef void (*ZnItemRenderMethod)(ZnItem item); +typedef void (*ZnItemComputeCoordinatesMethod)(ZnItem item, ZnBool force); +typedef int (*ZnItemToAreaMethod)(ZnItem item, ZnToArea ta); +typedef ZnReal (*ZnItemPickMethod)(ZnItem item, ZnPick ps); +typedef ZnBool (*ZnItemIsSensitiveMethod)(ZnItem item, int part); +typedef struct _ZnFieldSetStruct* (*ZnItemGetFieldSetMethod)(ZnItem item); +typedef int (*ZnItemContourMethod)(ZnItem item, int cmd, int index, ZnPoly *poly); +typedef void (*ZnItemPickVertexMethod)(ZnItem item, ZnPoint *p, int *contour, + int *vertex, int *o_vertex); +typedef void (*ZnItemGetAnchorMethod)(ZnItem item, Tk_Anchor anchor, ZnPoint *p); +typedef ZnBool (*ZnItemGetClipVerticesMethod)(ZnItem item, ZnTriStrip *tristrip); +typedef ZnBool (*ZnItemGetContoursMethod)(ZnItem item, ZnPoly *poly); +typedef int (*ZnItemCoordsMethod)(ZnItem item, int contour, int index, int cmd, + ZnPoint **points, char **controls, unsigned int *num_points); +typedef void (*ZnItemInsertCharsMethod)(ZnItem item, int field, int *index, + char *chars); +typedef void (*ZnItemDeleteCharsMethod)(ZnItem item, int field, int *first, + int *last); +typedef void (*ZnItemCursorMethod)(ZnItem item, int field, int index); +typedef int (*ZnItemIndexMethod)(ZnItem item, int field, Tcl_Obj *index_spec, + int *index); +typedef int (*ZnItemPartMethod)(ZnItem item, Tcl_Obj **part_spec, int *part); +typedef int (*ZnItemSelectionMethod)(ZnItem item, int field, int offset, + char *chars, int max_chars); +typedef void (*ZnItemPostScriptMethod)(ZnItem item, ZnPostScriptInfo ps_info); + + +typedef void *ZnItemClassId; + +typedef struct _ZnItemClassStruct { + unsigned int size; + unsigned int num_parts; /* 0 if no special parts, else * gives how many parts exist. */ ZnBool has_anchors; /* 1 if anchors are supported */ char *name; ZnAttrConfig *attr_desc; - ItemInitMethod Init; - ItemCloneMethod Clone; - ItemDestroyMethod Destroy; - ItemConfigureMethod Configure; - ItemQueryMethod Query; - ItemGetFieldSetMethod GetFieldSet; - ItemGetAnchorMethod GetAnchor; - ItemGetClipVerticesMethod GetClipVertices; - ItemGetContoursMethod GetContours; - ItemCoordsMethod Coords; - ItemInsertCharsMethod InsertChars; - ItemDeleteCharsMethod DeleteChars; - ItemCursorMethod Cursor; - ItemIndexMethod Index; - ItemPartMethod Part; - ItemSelectionMethod Selection; - ItemContourMethod Contour; - ItemComputeCoordinatesMethod ComputeCoordinates; - ItemToAreaMethod ToArea; - ItemDrawMethod Draw; - ItemRenderMethod Render; - ItemIsSensitiveMethod IsSensitive; - ItemPickMethod Pick; - ItemPickVertexMethod PickVertex; - ItemPostScriptMethod PostScript; -} ItemClassStruct, *ItemClass; + ZnItemInitMethod Init; + ZnItemCloneMethod Clone; + ZnItemDestroyMethod Destroy; + ZnItemConfigureMethod Configure; + ZnItemQueryMethod Query; + ZnItemGetFieldSetMethod GetFieldSet; + ZnItemGetAnchorMethod GetAnchor; + ZnItemGetClipVerticesMethod GetClipVertices; + ZnItemGetContoursMethod GetContours; + ZnItemCoordsMethod Coords; + ZnItemInsertCharsMethod InsertChars; + ZnItemDeleteCharsMethod DeleteChars; + ZnItemCursorMethod Cursor; + ZnItemIndexMethod Index; + ZnItemPartMethod Part; + ZnItemSelectionMethod Selection; + ZnItemContourMethod Contour; + ZnItemComputeCoordinatesMethod ComputeCoordinates; + ZnItemToAreaMethod ToArea; + ZnItemDrawMethod Draw; + ZnItemRenderMethod Render; + ZnItemIsSensitiveMethod IsSensitive; + ZnItemPickMethod Pick; + ZnItemPickVertexMethod PickVertex; + ZnItemPostScriptMethod PostScript; +} ZnItemClassStruct, *ZnItemClass; /* @@ -213,73 +293,72 @@ typedef struct _ItemClassStruct { * ********************************************************************************** */ -extern struct _ITEM { - Item (*CloneItem)(Item model); - void (*DestroyItem)(Item item); - int (*ConfigureItem)(Item item, int field, int argc, Tcl_Obj *CONST args[], +extern struct _ZnITEM { + ZnItem (*CloneItem)(ZnItem model); + void (*DestroyItem)(ZnItem item); + int (*ConfigureItem)(ZnItem item, int field, int argc, Tcl_Obj *CONST args[], ZnBool init); - int (*QueryItem)(Item item, int field, int argc, Tcl_Obj *CONST args[]); - void (*InsertItem)(Item item, Item group, Item mark_item, ZnBool before); - void (*UpdateItemPriority)(Item item, Item mark_item, ZnBool before); - void (*UpdateItemDependency)(Item item, Item old_connection); - void (*ExtractItem)(Item item); - void (*SetId)(Item item); - void (*FreeId)(Item item); - void (*AddTag)(Item item, Tk_Uid tag); - void (*RemoveTag)(Item item, Tk_Uid tag); - void (*FreeTags)(Item item); - ZnBool (*HasTag)(Item item, Tk_Uid tag); - void (*ResetTransfo)(Item item); - void (*SetTransfo)(Item item, struct _ZnTransfo *t); - void (*TranslateItem)(Item item, ZnReal tx, ZnReal ty); - void (*ScaleItem)(Item item, ZnReal sx, ZnReal sy); - void (*RotateItem)(Item item, ZnReal angle, ZnPoint *p); - void (*Invalidate)(Item item, int reason); - void (*InvalidateItems)(Item group, ItemClass item_class); - void (*GetItemTransform)(Item item, struct _ZnTransfo *t); -} ITEM; + int (*QueryItem)(ZnItem item, int field, int argc, Tcl_Obj *CONST args[]); + void (*InsertItem)(ZnItem item, ZnItem group, ZnItem mark_item, ZnBool before); + void (*UpdateItemPriority)(ZnItem item, ZnItem mark_item, ZnBool before); + void (*UpdateItemDependency)(ZnItem item, ZnItem old_connection); + void (*ExtractItem)(ZnItem item); + void (*SetId)(ZnItem item); + void (*FreeId)(ZnItem item); + void (*AddTag)(ZnItem item, Tk_Uid tag); + void (*RemoveTag)(ZnItem item, Tk_Uid tag); + void (*FreeTags)(ZnItem item); + ZnBool (*HasTag)(ZnItem item, Tk_Uid tag); + void (*ResetTransfo)(ZnItem item); + void (*SetTransfo)(ZnItem item, struct _ZnTransfo *t); + void (*TranslateItem)(ZnItem item, ZnReal tx, ZnReal ty); + void (*ScaleItem)(ZnItem item, ZnReal sx, ZnReal sy); + void (*RotateItem)(ZnItem item, ZnReal angle, ZnPoint *p); + void (*Invalidate)(ZnItem item, int reason); + void (*InvalidateItems)(ZnItem group, ZnItemClass item_class); + void (*GetItemTransform)(ZnItem item, struct _ZnTransfo *t); +} ZnITEM; /* ********************************************************************************** * - * Methods defined in item.c useful for writing items. + * Methods defined in Item.c useful for writing items. * ********************************************************************************** */ void ZnItemInit(); -Item ZnCreateItem(struct _WidgetInfo *wi, ItemClass item_class, +ZnItem ZnCreateItem(struct _ZnWInfo *wi, ZnItemClass item_class, int *argc, Tcl_Obj *CONST *args[]); -void ZnAddItemClass(ItemClass class); -ItemClass ZnLookupItemClass(char *class_name); +void ZnAddItemClass(ZnItemClass class); +ZnItemClass ZnLookupItemClass(char *class_name); ZnList ZnItemClassList(); -int ZnConfigureAttributes(struct _WidgetInfo *wi, void *record, +int ZnConfigureAttributes(struct _ZnWInfo *wi, void *record, ZnAttrConfig *attr_desc, int argc, Tcl_Obj *CONST args[], int *flags); -int ZnAttributesInfo(struct _WidgetInfo *wi, void *record, +int ZnAttributesInfo(struct _ZnWInfo *wi, void *record, ZnAttrConfig *attr_desc, int argc, Tcl_Obj *CONST args[]); -int ZnQueryAttribute(struct _WidgetInfo *wi, void *record, ZnAttrConfig *attr_desc, +int ZnQueryAttribute(struct _ZnWInfo *wi, void *record, ZnAttrConfig *attr_desc, Tcl_Obj *attr_name); -void ZnInitTransformStack(struct _WidgetInfo *wi); -void ZnFreeTransformStack(struct _WidgetInfo *wi); -void ZnResetTransformStack(struct _WidgetInfo *wi); -void ZnPushTransform(struct _WidgetInfo *wi, struct _ZnTransfo *transfo, +void ZnInitTransformStack(struct _ZnWInfo *wi); +void ZnFreeTransformStack(struct _ZnWInfo *wi); +void ZnResetTransformStack(struct _ZnWInfo *wi); +void ZnPushTransform(struct _ZnWInfo *wi, struct _ZnTransfo *transfo, ZnBool compose_scale, ZnBool compose_rot); -void ZnPopTransform(struct _WidgetInfo *wi); -void ZnInitClipStack(struct _WidgetInfo *wi); -void ZnFreeClipStack(struct _WidgetInfo *wi); -void ZnResetClipStack(struct _WidgetInfo *wi); -void ZnPushClip(struct _WidgetInfo *wi, ZnTriStrip *tristrip, ZnBool simple, +void ZnPopTransform(struct _ZnWInfo *wi); +void ZnInitClipStack(struct _ZnWInfo *wi); +void ZnFreeClipStack(struct _ZnWInfo *wi); +void ZnResetClipStack(struct _ZnWInfo *wi); +void ZnPushClip(struct _ZnWInfo *wi, ZnTriStrip *tristrip, ZnBool simple, ZnBool set_gc); -void ZnPopClip(struct _WidgetInfo *wi, ZnBool set_gc); -ZnBool ZnCurrentClip(struct _WidgetInfo *wi, Region *reg, ZnBBox **clip_box, +void ZnPopClip(struct _ZnWInfo *wi, ZnBool set_gc); +ZnBool ZnCurrentClip(struct _ZnWInfo *wi, TkRegion *reg, ZnBBox **clip_box, ZnBool *simple); extern ZnItemClassId ZnArc; extern ZnItemClassId ZnMap; extern ZnItemClassId ZnTabular; -extern ZnItemClassId ZnMosaic; extern ZnItemClassId ZnCurve; extern ZnItemClassId ZnBezier; extern ZnItemClassId ZnTriangles; @@ -290,7 +369,7 @@ extern ZnItemClassId ZnWayPoint; extern ZnItemClassId ZnGroup; extern ZnItemClassId ZnIcon; extern ZnItemClassId ZnText; -extern ZnItemClassId ZnWind; +extern ZnItemClassId ZnWindow; #endif /* _Item_h */ -- cgit v1.1