home *** CD-ROM | disk | FTP | other *** search
- /* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*-
- *
- * The contents of this file are subject to the Netscape Public License
- * Version 1.0 (the "NPL"); you may not use this file except in
- * compliance with the NPL. You may obtain a copy of the NPL at
- * http://www.mozilla.org/NPL/
- *
- * Software distributed under the NPL is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
- * for the specific language governing rights and limitations under the
- * NPL.
- *
- * The Initial Developer of this code under the NPL is Netscape
- * Communications Corporation. Portions created by Netscape are
- * Copyright (C) 1998 Netscape Communications Corporation. All Rights
- * Reserved.
- */
-
-
- /******************
- * Structures used by the layout engine which will be passed
- * on to the front end in the front-end to layout interface
- * functions.
- *
- * All the major element structures have an entry
- * called FE_Data. This is to be used by the front end to
- * store front-end specific data that the layout ill pass
- * back to it later.
- ******************/
- #ifndef _LayoutElements_
- #define _LayoutElements_
-
-
- #include "xp_core.h"
- #include "xp_mem.h"
- #include "xp_rect.h"
- #include "cl_types.h"
- #include "ntypes.h"
- #include "edttypes.h"
- #include "il_types.h"
-
- /*
- * Colors - some might say that some of this should be user-customizable.
- */
-
- #define LO_DEFAULT_FG_RED 0
- #define LO_DEFAULT_FG_GREEN 0
- #define LO_DEFAULT_FG_BLUE 0
-
- #define LO_DEFAULT_BG_RED 192
- #define LO_DEFAULT_BG_GREEN 192
- #define LO_DEFAULT_BG_BLUE 192
-
- #define LO_UNVISITED_ANCHOR_RED 0
- #define LO_UNVISITED_ANCHOR_GREEN 0
- #define LO_UNVISITED_ANCHOR_BLUE 238
-
- #define LO_VISITED_ANCHOR_RED 85
- #define LO_VISITED_ANCHOR_GREEN 26
- #define LO_VISITED_ANCHOR_BLUE 139
-
- #define LO_SELECTED_ANCHOR_RED 255
- #define LO_SELECTED_ANCHOR_GREEN 0
- #define LO_SELECTED_ANCHOR_BLUE 0
-
- /*
- * Color enumeration for getting/setting defaults
- */
- #define LO_COLOR_BG 0
- #define LO_COLOR_FG 1
- #define LO_COLOR_LINK 2
- #define LO_COLOR_VLINK 3
- #define LO_COLOR_ALINK 4
-
- #define LO_NCOLORS 5
-
-
- /*
- * Values for scrolling grid cells to control scrollbars
- * AUTO means only use them if needed.
- */
- #define LO_SCROLL_NO 0
- #define LO_SCROLL_YES 1
- #define LO_SCROLL_AUTO 2
- #define LO_SCROLL_NEVER 3
-
- /*
- * Relative font sizes that the user can tweak from the FE
- */
- #define XP_SMALL 1
- #define XP_MEDIUM 2
- #define XP_LARGE 3
-
- /* --------------------------------------------------------------------------
- * Layout bit flags for text and bullet types
- */
- #define LO_UNKNOWN -1
- #define LO_NONE 0
- #define LO_TEXT 1
- #define LO_LINEFEED 2
- #define LO_HRULE 3
- #define LO_IMAGE 4
- #define LO_BULLET 5
- #define LO_FORM_ELE 6
- #define LO_SUBDOC 7
- #define LO_TABLE 8
- #define LO_CELL 9
- #define LO_EMBED 10
- #define LO_EDGE 11
- #define LO_JAVA 12
- #define LO_SCRIPT 13
- #define LO_OBJECT 14
- #define LO_PARAGRAPH 15
- #define LO_CENTER 16
- #define LO_MULTICOLUMN 17
- #define LO_FLOAT 18
- #define LO_TEXTBLOCK 19
- #define LO_LIST 20
- #define LO_DESCTITLE 21
- #define LO_DESCTEXT 22
- #define LO_BLOCKQUOTE 23
- #define LO_LAYER 24
- #define LO_HEADING 25
- #define LO_SPAN 26
- #define LO_DIV 27
- #define LO_SPACER 28
-
- #define LO_FONT_NORMAL 0x0000
- #define LO_FONT_BOLD 0x0001
- #define LO_FONT_ITALIC 0x0002
- #define LO_FONT_FIXED 0x0004
-
- #define LO_ATTR_ANCHOR 0x0008
- #define LO_ATTR_UNDERLINE 0x0010
- #define LO_ATTR_STRIKEOUT 0x0020
- #define LO_ATTR_BLINK 0x0040
- #define LO_ATTR_ISMAP 0x0080
- #define LO_ATTR_ISFORM 0x0100
- #define LO_ATTR_DISPLAYED 0x0200
- #define LO_ATTR_BACKDROP 0x0400
- #define LO_ATTR_STICKY 0x0800
- #define LO_ATTR_INTERNAL_IMAGE 0x1000
- #define LO_ATTR_MOCHA_IMAGE 0x2000 /* Image loaded at behest of JavaScript */
- #define LO_ATTR_ON_IMAGE_LIST 0x4000 /* Image on top_state->image_list */
- #define LO_ATTR_CELL_BACKDROP 0x8000
- #define LO_ATTR_SPELL 0x00010000
- #define LO_ATTR_INLINEINPUT 0x00020000
- #define LO_ATTR_INLINEINPUTTHICK 0x00040000
- #define LO_ATTR_INLINEINPUTDOTTED 0x00080000
- #define LO_ATTR_LAYER_BACKDROP 0x00100000
-
- /*
- * Different bullet types. The front end should only ever see
- * bullets of type BULLET_ROUND and BULLET_SQUARE
- */
- #define BULLET_NONE 0
- #define BULLET_BASIC 1
- #define BULLET_NUM 2
- #define BULLET_NUM_L_ROMAN 3
- #define BULLET_NUM_S_ROMAN 4
- #define BULLET_ALPHA_L 5
- #define BULLET_ALPHA_S 6
- #define BULLET_ROUND 7
- #define BULLET_SQUARE 8
- #define BULLET_MQUOTE 9
- /* A bullet type of WORDBREAK in a LO_TEXT element tells the relayout code to
- skip that text element. */
- #define WORDBREAK 10
-
- /*
- * Different border types.
- */
- #define BORDER_NONE 0
- #define BORDER_DOTTED 1
- #define BORDER_DASHED 2
- #define BORDER_SOLID 3
- #define BORDER_DOUBLE 4
- #define BORDER_GROOVE 5
- #define BORDER_RIDGE 6
- #define BORDER_INSET 7
- #define BORDER_OUTSET 8
-
- /* Values for flag in LO_AnchorData */
- #define ANCHOR_SUPPRESS_FEEDBACK 1
-
- /*
- * Generic union of all the possible element structure types.
- * Defined at end of file.
- */
- union LO_Element_struct;
-
- /*
- * Anchors can be targeted to named windows now, so anchor data is
- * more than just a URL, it is a URL, and a possible target window
- * name.
- */
- struct LO_AnchorData_struct {
- PA_Block anchor; /* really a (char *) */
- PA_Block target; /* really a (char *) */
- PA_Block alt; /* really a (char *) */
- #ifdef MOCHA
- LO_Element *element; /* Needed for mocha reflection
- of layout position. */
- CL_Layer *layer; /* Layer containing anchor */
- struct JSObject *mocha_object;
- XP_Bool event_handler_present; /*Indicates whether there's a JS handler */
- #endif
- uint8 flags; /* Indicates whether to suppress visual feedback */
- double prevalue; /* <A HREF="http://gagan/PrefetchingThoughts.html" PRE=0.5> */
- };
-
- /*
- * Basic RGB triplet
- */
- struct LO_Color_struct {
- uint8 red, green, blue;
- };
-
- /*
- * Contains initialization parameters for new layers. Exported here
- * so that mocha can set these on resize.
- */
- /* Possible values for clip_policy */
- #define LO_AUTO_EXPAND_NONE 0x00
- #define LO_AUTO_EXPAND_CLIP_BOTTOM 0x01
- #define LO_AUTO_EXPAND_CLIP_RIGHT 0x02
- #define LO_AUTO_EXPAND_CLIP_TOP 0x04
- #define LO_AUTO_EXPAND_CLIP_LEFT 0x08
- #define LO_AUTO_EXPAND_CLIP (LO_AUTO_EXPAND_CLIP_LEFT | \
- LO_AUTO_EXPAND_CLIP_RIGHT | \
- LO_AUTO_EXPAND_CLIP_TOP | \
- LO_AUTO_EXPAND_CLIP_BOTTOM)
-
- typedef struct LO_BlockInitializeStruct_struct {
- XP_Bool has_left;
- int32 left;
- XP_Bool has_top;
- int32 top;
- XP_Bool has_width;
- int32 width;
- XP_Bool has_height;
- int32 height;
- char *name;
- char *id;
- char *above;
- char *below;
- XP_Bool has_zindex;
- int32 zindex;
- char *visibility;
- char *bgcolor;
- XP_Bool is_style_bgcolor;
- char *bgimage;
- char *src;
- XP_Rect *clip;
- int clip_expansion_policy;
- char *overflow;
- PA_Tag *tag;
- PA_Tag *ss_tag;
- } LO_BlockInitializeStruct;
-
- /*
- * Attributes of the text we are currently drawing in.
- *
- * if font weight is specified then the "bold" fontmask attribute
- * should be ignored
- *
- * if font face is specified then the "fixed" fontmask attribute
- * should be ignored
- */
- struct LO_TextAttr_struct {
- int16 size;
- int32 fontmask; /* bold, italic, fixed */
- LO_Color fg, bg;
- Bool no_background; /* unused, text on image? */
- int32 attrmask; /* anchor, underline, strikeout, blink(gag) */
- char *font_face;
- double point_size; /* 1.0pt through 72.0pt and above */
- uint16 font_weight; /* 100, 200, ... 900 */
- void *FE_Data; /* For the front end to store font IDs */
- struct LO_TextAttr_struct *next; /* to chain in hash table */
- int16 charset;
- };
-
- /*
- * Information about the current text segment as rendered
- * by the front end that the layout engine can use to place
- * the text segment.
- */
- struct LO_TextInfo_struct {
- intn max_width;
- int16 ascent, descent;
- int16 lbearing, rbearing;
- };
-
-
- /*
- * Bit flags for the ele_attrmask.
- */
- #define LO_ELE_BREAKABLE 0x0001
- #define LO_ELE_SECURE 0x0002
- #define LO_ELE_SELECTED 0x0004
- #define LO_ELE_BREAKING 0x0008
- #define LO_ELE_FLOATING 0x0010
- #define LO_ELE_SHADED 0x0020
- #define LO_ELE_DELAY_CENTER 0x0040
- #define LO_ELE_DELAY_RIGHT 0x0080
- #define LO_ELE_DELAY_JUSTIFY 0x00c0
- #define LO_ELE_DELAY_ALIGNED 0x00c0
- #define LO_ELE_INVISIBLE 0x0100 /* Invisible form, applet or embed; Not from tag attributes */
- #define LO_ELE_HIDDEN 0x0200 /* Element occupies no screen real-estate */
- #define LO_ELE_DRAWN 0x0400 /* Indicates that the element has been drawn at least once before */
- #define LO_ELE_STREAM_STARTED 0x0800
- /* Special selection signal for Composer
- * Used for visual feedback during dragNdrop of table cells
- * (used for cells that will replaced)
- * and also for the non-focus cells when > 1 cells are selected
- * and the cell properties are being edited
- */
- #define LO_ELE_SELECTED_SPECIAL 0x1000
- #ifdef DOM
- #define LO_ELE_IN_SPAN 0x2000
- #endif /* DOM */
-
- /*
- * This structure heads up a group of text elements. It contains the actual text buffer
- * and all the word breaking information.
- */
- typedef struct LO_TextBlock_struct {
- /* the base layout struct */
- int16 type;
- int16 x_offset;
- int32 ele_id;
- int32 x, y;
- int32 y_offset;
- int32 width, height;
- int32 line_height;
- LO_Element *next;
- LO_Element *prev;
- ED_Element *edit_element;
- int32 edit_offset;
-
- /* textblock specific */
- LO_TextAttr * text_attr;
- LO_AnchorData * anchor_href;
- uint16 ele_attrmask; /* breakable, secure, selected, etc. */
- uint16 format_mode;
-
- LO_TextStruct * startTextElement;
- LO_TextStruct * endTextElement;
-
- uint8 * text_buffer;
- uint32 buffer_length;
- uint32 buffer_write_index;
- uint32 last_buffer_write_index;
- uint32 buffer_read_index;
- uint32 last_line_break;
-
- uint32 * break_table;
- uint32 break_length;
- uint32 break_write_index;
- uint32 break_read_index;
- uint32 last_break_offset;
- uint32 multibyte_index;
- uint32 multibyte_length;
-
- LO_TextStruct * old_break;
- uint32 old_break_pos;
- uint32 old_break_width;
-
- uint32 totalWidth;
- uint32 totalChars;
- uint8 break_pending;
- uint8 last_char_is_whitespace;
-
- int16 ascent; /* font information for relayout */
- int16 descent;
- } LO_TextBlock;
-
-
- /*
- * This is the structure that the layout module will
- * pass to the front-end and ask the front end to render
- * this text segment in the x,y location specified.
- * The selected flag in combination with the text_attr
- * structure will tell the front-end how to render the text.
- */
- struct LO_TextStruct_struct {
- int16 type;
- int16 x_offset;
- int32 ele_id;
- int32 x, y;
- int32 y_offset;
- int32 width, height;
- int32 line_height;
- LO_Element *next;
- LO_Element *prev;
- ED_Element *edit_element;
- int32 edit_offset;
-
- void *FE_Data;
- #if defined(XP_WIN)
- union {
- PA_Block text; /* lock to a (char *) */
- char *pText;
- };
- #else
- PA_Block text; /* lock to a (char *) */
- #endif
- uint16 block_offset; /* offset to this line in the parent text block */
- uint16 doc_width; /* doc width that this line was layed out into */
- LO_AnchorData *anchor_href;
- LO_TextAttr *text_attr;
- uint16 ele_attrmask; /* breakable, secure, selected, etc. */
- int16 text_len;
- int16 sel_start;
- int16 sel_end;
- intn bullet_type; /* set to MQUOTE in lo_make_quote_text, and other things in lo_PlaceBulletStr. */
- };
-
-
-
- /*****************
- * Similar to the structures above, these are the structures
- * used to manage image elements between the layout and the
- * front-end.
- ****************/
-
- /*
- * Current status of a displayed image.
- * ImageData (above) can be reused for a single
- * image displayed multiple times, but ImageAttr is
- * unique to a particular instance of a displayed image.
- */
- struct LO_ImageAttr_struct {
- int32 attrmask; /* anchor, delayed, ismap */
- intn alignment;
- int32 layer_id;
- intn form_id;
- char *usemap_name; /* Use named client-side map if here */
- void *usemap_ptr; /* private, used by layout only! */
- intn submit_x; /* for form, last click coord */
- intn submit_y; /* for form, last click coord */
- };
-
-
- /* Suppression of feedback such as the drawing of the delayed icon, temporary
- border and alt text when an image is coming in, and the drawing of keyboard
- navigation feedback. */
- typedef enum {
- LO_SUPPRESS_UNDEFINED,
- LO_SUPPRESS,
- LO_DONT_SUPPRESS
- } lo_SuppressMode;
-
- /*
- * This is the structure that the layout module will
- * pass to the front-end and ask the front end to render
- * this image at the x,y location specified.
- * The selected flag in combination with the image_attr
- * structure will tell the front-end how to render the image.
- * alt is alternate text to display if the image is not to
- * be displayed.
- */
- struct LO_ImageStruct_struct {
- int16 type;
- int16 x_offset;
- int32 ele_id;
- int32 x, y;
- int32 y_offset;
- int32 width, height;
- int32 line_height;
- LO_Element *next;
- LO_Element *prev;
- ED_Element *edit_element;
- int32 edit_offset;
-
- int32 layer_id;
-
- int32 percent_width; /* For relayout */
- int32 percent_height; /* For relayout */
-
- #ifdef MOCHA
- struct JSObject *mocha_object;
- #endif
- CL_Layer *layer;
- XP_Rect valid_rect;
- IL_ImageReq *image_req; /* Image library representation. */
- IL_ImageReq *lowres_image_req; /* Handle on lowres image while
- highres image is coming in. */
- uint8 is_icon; /* Is this an image or an icon? */
- uint16 icon_number; /* If this is an icon, the icon number. */
- PA_Block alt;
- LO_AnchorData *anchor_href;
- PA_Block image_url;
- PA_Block lowres_image_url;
- LO_ImageAttr *image_attr;
- LO_TextAttr *text_attr;
- int32 border_width;
- int32 border_vert_space;
- int32 border_horiz_space;
- uint16 ele_attrmask; /* floating, secure, selected, etc. */
- uint16 image_status;
- uint8 is_transparent;
- lo_SuppressMode suppress_mode; /* For temp icon, temp border, etc. */
- int16 alt_len;
- int16 sel_start;
- int16 sel_end;
- intn seq_num;
- PRPackedBool pending_mocha_event;
- LO_ImageStruct *next_image; /* next image in list for this document */
- };
-
- /* Tiling mode for implementing CSS's background-repeat property */
- typedef enum {
- /* The code depends on specific values for this enum - don't change them. */
- LO_TILE_BOTH = 0, /* Tile in both X and Y direction */
- LO_TILE_HORIZ = 1, /* Tile horizontally only */
- LO_TILE_VERT = 2, /* Tile vertically only */
- LO_NO_TILE = 3 /* Don't tile */
- } lo_TileMode;
-
- /* An (optionally) tiled backdrop image, optionally on top of a solid color */
- typedef struct {
- LO_Color *bg_color; /* Solid color, or NULL, if transparent */
- char *url; /* String URL or NULL, if no backdrop image */
- lo_TileMode tile_mode; /* CSS tiling mode for backdrop image */
- } lo_Backdrop;
-
- struct LO_SubDocStruct_struct {
- int16 type;
- int16 x_offset;
- int32 ele_id;
- int32 x, y;
- int32 y_offset;
- int32 width, height;
- int32 line_height;
- LO_Element *next;
- LO_Element *prev;
- ED_Element *edit_element;
- int32 edit_offset;
-
- void *FE_Data;
- void *state; /* Hack-o-rama to opaque the lo_DocState type */
- lo_Backdrop backdrop; /* To carry over into CellStruct */
- LO_AnchorData *anchor_href;
- LO_TextAttr *text_attr;
- int32 alignment;
- int32 vert_alignment;
- int32 horiz_alignment;
- int32 border_width;
- int32 border_vert_space;
- int32 border_horiz_space;
- uint16 ele_attrmask; /* floating, secure, selected, etc. */
- int16 sel_start;
- int16 sel_end;
- };
-
-
- /*
- * This is the structure that the layout module will
- * pass to the front-end and ask the front end to render
- * this form element at the x,y location specified.
- * The widget_data field holds state data for this form
- * element, such as the current text in a text entry area.
- */
- #define FORM_TYPE_NONE 0
- #define FORM_TYPE_TEXT 1
- #define FORM_TYPE_RADIO 2
- #define FORM_TYPE_CHECKBOX 3
- #define FORM_TYPE_HIDDEN 4
- #define FORM_TYPE_SUBMIT 5
- #define FORM_TYPE_RESET 6
- #define FORM_TYPE_PASSWORD 7
- #define FORM_TYPE_BUTTON 8
- #define FORM_TYPE_JOT 9
- #define FORM_TYPE_SELECT_ONE 10
- #define FORM_TYPE_SELECT_MULT 11
- #define FORM_TYPE_TEXTAREA 12
- #define FORM_TYPE_ISINDEX 13
- #define FORM_TYPE_IMAGE 14
- #define FORM_TYPE_FILE 15
- #define FORM_TYPE_KEYGEN 16
- #define FORM_TYPE_READONLY 17
- #define FORM_TYPE_OBJECT 18
-
- #define FORM_METHOD_GET 0
- #define FORM_METHOD_POST 1
-
- #define TEXTAREA_WRAP_OFF 0
- #define TEXTAREA_WRAP_SOFT 1
- #define TEXTAREA_WRAP_HARD 2
-
- #define INPUT_TYPE_ENCODING_NORMAL 0
- #define INPUT_TYPE_ENCODING_MACBIN 1
-
-
-
- /*
- * Union of all different form element data structures
- */
- union LO_FormElementData_struct;
-
- /*
- * This is the element_data structure for elements whose
- * element_type = FORM_TYPE_SELECT_ONE, FORM_TYPE_SELECT_MULT.
- */
-
- /*
- * nesting deeper and deeper, harder and harder, go, go, oh, OH, OHHHHH!!
- * Sorry, got carried away there.
- */
- struct lo_FormElementOptionData_struct {
- PA_Block text_value;
- PA_Block value;
- Bool def_selected;
- Bool selected;
- };
-
-
- struct lo_FormElementSelectData_struct {
- int32 type;
- void *FE_Data;
- PA_Block name;
- int32 size;
- Bool disabled;
- Bool multiple;
- Bool options_valid;
- int32 option_cnt;
- PA_Block options; /* really a (lo_FormElementOptionData *) */
- PA_Tag *saved_tag; /* mocha weazels need for threading */
- };
-
- /*
- * This is the element_data structure for elements whose
- * element_type = FORM_TYPE_TEXT, FORM_TYPE_PASSWORD, FORM_TYPE_FILE.
- */
- struct lo_FormElementTextData_struct {
- int32 type;
- void *FE_Data;
- PA_Block name;
- PA_Block default_text;
- Bool disabled;
- Bool readonly;
- PA_Block current_text;
- int32 size;
- int32 max_size;
- int32 encoding;
- };
-
-
- /*
- * This is the element_data structure for elements whose
- * element_type = FORM_TYPE_TEXTAREA.
- */
- struct lo_FormElementTextareaData_struct {
- int32 type;
- void *FE_Data;
- PA_Block name;
- PA_Block default_text;
- Bool disabled;
- Bool readonly;
- PA_Block current_text;
- int32 rows;
- int32 cols;
- uint8 auto_wrap;
- PA_Tag *saved_tag; /* mocha weazels need for threading */
- };
-
-
- /*
- * This is the element_data structure for elements whose
- * element_type = FORM_TYPE_HIDDEN, FORM_TYPE_SUBMIT, FORM_TYPE_RESET,
- * FORM_TYPE_BUTTON, FORM_TYPE_READONLY.
- */
- struct lo_FormElementMinimalData_struct {
- int32 type;
- void *FE_Data;
- PA_Block name;
- PA_Block value;
- Bool disabled;
- };
-
-
- /*
- * This is the element_data structure for elements whose
- * element_type = FORM_TYPE_RADIO, FORM_TYPE_CHECKBOX.
- */
- struct lo_FormElementToggleData_struct {
- int32 type;
- void *FE_Data;
- PA_Block name;
- PA_Block value;
- Bool disabled;
- Bool default_toggle;
- Bool toggled;
- };
-
-
- /*
- * This is the element_data structure for elements whose
- * element_type = FORM_TYPE_OBJECT.
- */
- struct lo_FormElementObjectData_struct {
- int32 type;
- void *FE_Data;
- PA_Block name;
- LO_JavaAppStruct *object;
- };
-
-
- /*
- * This is the element_data structure for elements whose
- * element_type = FORM_TYPE_KEYGEN.
- */
- struct lo_FormElementKeygenData_struct {
- int32 type;
- PA_Block name;
- PA_Block challenge;
- PA_Block key_type;
- PA_Block pqg; /* DSA only */
- char *value_str;
- PRBool dialog_done;
- };
-
-
- union LO_FormElementData_struct {
- int32 type;
- lo_FormElementTextData ele_text;
- lo_FormElementTextareaData ele_textarea;
- lo_FormElementMinimalData ele_minimal;
- lo_FormElementToggleData ele_toggle;
- lo_FormElementObjectData ele_object;
- lo_FormElementSelectData ele_select;
- lo_FormElementKeygenData ele_keygen;
- };
-
-
- struct LO_FormSubmitData_struct {
- PA_Block action;
- PA_Block encoding;
- PA_Block window_target;
- int32 method;
- int32 value_cnt;
- PA_Block name_array;
- PA_Block value_array;
- PA_Block type_array;
- PA_Block encoding_array;
- };
-
-
- struct LO_FormElementStruct_struct {
- int16 type;
- int16 x_offset;
- int32 ele_id;
- int32 x, y;
- int32 y_offset;
- int32 width, height;
- int32 line_height;
- LO_Element *next;
- LO_Element *prev;
- ED_Element *edit_element;
- int32 edit_offset;
-
- int32 layer_id;
- #ifdef MOCHA
- struct JSObject *mocha_object;
- XP_Bool event_handler_present; /*Indicates whether there's a JS handler */
- #endif
-
- int16 border_vert_space;
- int16 border_horiz_space;
- int32 element_index;
- LO_FormElementData *element_data;
- LO_TextAttr *text_attr;
- int32 baseline;
- uint16 ele_attrmask; /* secure, selected, etc. */
- int16 form_id;
- int16 sel_start;
- int16 sel_end;
- CL_Layer *layer;
- };
-
-
- /*
- * This is the structure that the layout module will
- * pass to the front-end and ask the front end to render
- * a linefeed at the x,y location specified.
- * Linefeeds are rendered as just a filled rectangle.
- * Height should be the height of the tallest element
- * on the line.
- */
-
- #define LO_LINEFEED_BREAK_SOFT 0
- #define LO_LINEFEED_BREAK_HARD 1
- #define LO_LINEFEED_BREAK_PARAGRAPH 2
-
- #define LO_CLEAR_NONE 0
- #define LO_CLEAR_TO_LEFT 1
- #define LO_CLEAR_TO_RIGHT 2
- #define LO_CLEAR_TO_ALL 3
- #define LO_CLEAR_TO_BOTH 4
-
- struct LO_LinefeedStruct_struct {
- int16 type;
- int16 x_offset;
- int32 ele_id;
- int32 x, y;
- int32 y_offset;
- int32 width, height;
- int32 line_height;
- LO_Element *next;
- LO_Element *prev;
- ED_Element *edit_element;
- int32 edit_offset;
-
- void *FE_Data;
- LO_AnchorData *anchor_href;
- LO_TextAttr *text_attr;
- int32 baseline;
- uint16 ele_attrmask; /* breaking, secure, selected, etc. */
- int16 sel_start;
- int16 sel_end;
- uint8 break_type; /* is this an end-of-paragraph or a break? */
- uint8 clear_type; /* the clear="" attribute */
- };
-
-
- struct LO_HorizRuleStruct_struct {
- int16 type;
- int16 x_offset;
- int32 ele_id;
- int32 x, y;
- int32 y_offset;
- int32 width, height;
- int32 line_height;
- LO_Element *next;
- LO_Element *prev;
- ED_Element *edit_element;
- int32 edit_offset;
-
- int32 end_x, end_y;
- void *FE_Data;
- uint16 ele_attrmask; /* shaded, secure, selected, etc. */
- int16 alignment;
- int16 thickness; /* 1 - 100 */
- int16 sel_start;
- int16 sel_end;
-
- int32 percent_width; /* needed for relayout. */
- int32 width_in_initial_layout; /* needed for relayout. */
- };
-
- struct LO_BulletStruct_struct {
- int16 type;
- int16 x_offset;
- int32 ele_id;
- int32 x, y;
- int32 y_offset;
- int32 width, height;
- int32 line_height;
- LO_Element *next;
- LO_Element *prev;
- ED_Element *edit_element;
- int32 edit_offset;
-
- void *FE_Data;
- int32 bullet_type;
- int32 bullet_size;
- LO_TextAttr *text_attr;
- uint16 ele_attrmask; /* secure, selected, etc. */
- int16 level;
- int16 sel_start;
- int16 sel_end;
- };
-
-
- struct LO_TableStruct_struct {
- int16 type;
- int16 x_offset;
- int32 ele_id;
- int32 x, y;
- int32 y_offset;
- int32 width, height;
- int32 line_height;
- LO_Element *next;
- LO_Element *prev;
- ED_Element *edit_element;
- int32 edit_offset;
-
- void *FE_Data;
- LO_AnchorData *anchor_href;
- int32 expected_y;
- int32 alignment;
- LO_Color border_color;
- int32 border_style;
- int32 border_width;
- int32 border_top_width;
- int32 border_right_width;
- int32 border_bottom_width;
- int32 border_left_width;
- int32 border_vert_space;
- int32 border_horiz_space;
- uint16 ele_attrmask; /* floating, secure, selected, etc. */
- int16 sel_start;
- int16 sel_end;
- int32 inter_cell_space; /*cmanske: CELLSPACING value - used when drawing table selection feedback */
- void *table; /* Actually a lo_TableRec *. Added for relayout */
- };
-
- struct LO_CellStruct_struct {
- int16 type;
- int16 x_offset;
- int32 ele_id;
- int32 x, y;
- int32 y_offset;
- int32 width, height;
- int32 line_height;
- LO_Element *next;
- LO_Element *prev;
- ED_Element *edit_element;
- int32 edit_offset;
-
- void *FE_Data;
- LO_Element *cell_list;
- LO_Element *cell_list_end;
- LO_Element *cell_float_list;
- lo_Backdrop backdrop;
- int32 border_width;
- int32 border_vert_space;
- int32 border_horiz_space;
- uint16 ele_attrmask; /* secure, selected, etc. */
- int16 sel_start;
- int16 sel_end;
- int32 inter_cell_space; /*cmanske: CELLSPACING value - used when drawing cell selection feedback */
- CL_Layer *cell_inflow_layer; /* Non-NULL if this cell
- exists to encapsulate
- an in-flow layer (ILAYER) */
- CL_Layer *cell_bg_layer; /* BGCOLOR/BACKGROUND for cell */
- void *table_cell; /* An lo_TableCell *. For use during relayout without reload. */
- void *table_row; /* An lo_TableRow *. Parent row state struct */
- void *table; /* An lo_TableRec *. Parent table state struct */
- Bool isCaption; /* Needed for relayout without reload */
- };
-
-
- struct LO_EmbedStruct_struct {
- int16 type;
- int16 x_offset;
- int32 ele_id;
- int32 x, y;
- int32 y_offset;
- int32 width, height;
- int32 line_height;
- LO_Element *next;
- LO_Element *prev;
- ED_Element *edit_element;
- int32 edit_offset;
-
- void * FE_Data;
- void *session_data;
- PA_Block embed_src;
- int32 attribute_cnt;
- char **attribute_list;
- char **value_list;
- int32 alignment;
- int32 border_width;
- int32 border_vert_space;
- int32 border_horiz_space;
- uint16 ele_attrmask; /* floating, secure, selected, etc. */
- int32 embed_index; /* Unique ID within this doc */
- struct LO_EmbedStruct_struct *nextEmbed;
- #ifdef MOCHA
- struct JSObject *mocha_object;
- #endif
- PA_Tag *tag;
- CL_Layer *layer;
-
- int32 percent_width; /* needed for relayout. */
- int32 percent_height; /* needed for relayout. */
- };
-
- #define LO_JAVA_SELECTOR_APPLET 0
- #define LO_JAVA_SELECTOR_OBJECT_JAVA 1
- #define LO_JAVA_SELECTOR_OBJECT_JAVAPROGRAM 2
- #define LO_JAVA_SELECTOR_OBJECT_JAVABEAN 3
-
- struct LO_JavaAppStruct_struct {
- int16 type;
- int16 x_offset;
- int32 ele_id;
- int32 x, y;
- int32 y_offset;
- int32 width, height;
- int32 line_height;
- LO_Element *next;
- LO_Element *prev;
- ED_Element *edit_element;
- int32 edit_offset;
-
- void * FE_Data;
- void *session_data;
- PA_Block base_url;
- PA_Block attr_code;
- PA_Block attr_codebase;
- PA_Block attr_archive;
- PA_Block attr_name;
- int32 param_cnt;
- char **param_names;
- char **param_values;
- int32 alignment;
- int32 border_width;
- int32 border_vert_space;
- int32 border_horiz_space;
- uint16 ele_attrmask; /* floating, secure, selected, etc. */
- int32 embed_index; /* Unique ID within this doc */
- Bool may_script;
- /* linked list thread for applets in the current document.
- * should be "prev" since they're in reverse order but who's
- * counting? */
- struct LO_JavaAppStruct_struct *nextApplet;
- #ifdef MOCHA
- struct JSObject *mocha_object;
- #endif
- PA_Tag *tag;
- CL_Layer *layer;
- /* selector_type indicates whether the tag was an
- * APPLET tag or OBJECT tag, and if it was an OBJECT tag,
- * whether the protocol selector in CLASSID was "java:",
- * "javaprogram:", or "javabean:".
- */
- int32 selector_type;
-
- int32 percent_width; /* For relayout */
- int32 percent_height; /* For relayout */
- };
-
-
- struct LO_EdgeStruct_struct {
- int16 type;
- int16 x_offset;
- int32 ele_id;
- int32 x, y;
- int32 y_offset;
- int32 width, height;
- int32 line_height;
- LO_Element *next;
- LO_Element *prev;
-
- void * FE_Data;
- void *lo_edge_info;
- LO_Color *bg_color;
- int16 size;
- Bool visible;
- Bool movable;
- Bool is_vertical;
- int32 left_top_bound;
- int32 right_bottom_bound;
- };
-
- struct LO_Any_struct {
- int16 type;
- int16 x_offset;
- int32 ele_id;
- int32 x, y;
- int32 y_offset;
- int32 width, height;
- int32 line_height;
- LO_Element *next;
- LO_Element *prev;
- ED_Element *edit_element;
- int32 edit_offset;
- };
-
- /* some DocState mutating elements. */
- typedef struct LO_CenterStruct_struct {
- LO_Any lo_any;
-
- /* nothing really to center elements */
- Bool is_end;
- } LO_CenterStruct;
-
- typedef struct LO_MulticolumnStruct_struct {
- LO_Any lo_any;
-
- Bool is_end;
- PA_Tag *tag;
- void *multicol; /* Pointer to lo_MultiCol struct */
- } LO_MulticolumnStruct;
-
- typedef struct LO_SpacerStruct_struct {
- LO_Any lo_any;
-
- int32 size;
- int8 type;
- int32 alignment;
- Bool floating;
- Bool is_percent_width;
- int32 width;
- Bool is_percent_height;
- int32 height;
- PA_Tag *tag;
- } LO_SpacerStruct;
-
- typedef struct LO_NoBreakStruct_struct {
- LO_Any lo_any;
-
- /* nothing really to nobreak elements */
- Bool is_end;
- } LO_NoBreakStruct;
-
- typedef struct LO_ParagraphStruct_struct {
- LO_Any lo_any;
-
- Bool is_end;
- intn blank_lines;
-
- /* only used in the close element */
- Bool implicit_end;
-
- /* only used in the open element */
- Bool alignment_set;
- int32 alignment;
- Bool has_top_ss_margin;
- Bool has_bottom_ss_margin;
- } LO_ParagraphStruct;
-
- typedef struct LO_FloatStruct_struct {
- LO_Any lo_any;
-
- LO_Element *float_ele;
- } LO_FloatStruct;
-
- typedef struct LO_ListStruct_struct {
- LO_Any lo_any;
-
- Bool is_end;
-
- PA_Tag *tag;
- int32 bullet_type;
- int32 bullet_start;
- int32 quote_type;
- Bool compact;
-
- } LO_ListStruct;
-
- typedef struct LO_DescTitle_struct {
- LO_Any lo_any;
- } LO_DescTitleStruct;
-
- typedef struct LO_DescText_struct {
- LO_Any lo_any;
- } LO_DescTextStruct;
-
- typedef struct LO_BlockQuote_struct {
- LO_Any lo_any;
-
- Bool is_end;
- int8 quote_type;
- PA_Tag *tag;
-
- } LO_BlockQuoteStruct;
-
- typedef struct LO_Layer_struct {
- LO_Any lo_any;
-
- Bool is_end;
- LO_BlockInitializeStruct *initParams;
- } LO_LayerStruct;
-
- typedef struct LO_Heading_struct {
- LO_Any lo_any;
-
- Bool is_end;
- int32 alignment;
- } LO_HeadingStruct;
-
- typedef struct LO_Span_struct {
- LO_Any lo_any;
-
- Bool is_end;
- /* should probably keep some stuff in here... perhaps
- the tag, so we can look up the inline style. */
- } LO_SpanStruct;
-
- typedef struct LO_Div_struct {
- LO_Any lo_any;
-
- Bool is_end;
- /* should probably keep some stuff in here... perhaps
- the tag, so we can look up the inline style. */
- } LO_DivStruct;
-
- union LO_Element_struct {
- int16 type;
- LO_Any lo_any;
- LO_TextStruct lo_text;
- LO_TextBlock lo_textBlock;
- LO_ImageStruct lo_image;
- LO_SubDocStruct lo_subdoc;
- LO_FormElementStruct lo_form;
- LO_LinefeedStruct lo_linefeed;
- LO_HorizRuleStruct lo_hrule;
- LO_BulletStruct lo_bullet;
- LO_TableStruct lo_table;
- LO_CellStruct lo_cell;
- LO_EmbedStruct lo_embed;
- LO_EdgeStruct lo_edge;
- LO_JavaAppStruct lo_java;
-
- /* These next elements do nothing but mutate the doc state. */
- LO_CenterStruct lo_center;
- LO_FloatStruct lo_float;
- LO_ParagraphStruct lo_paragraph;
- LO_MulticolumnStruct lo_multicolumn;
- LO_NoBreakStruct lo_nobreak;
- LO_ListStruct lo_list;
- LO_DescTitleStruct lo_desctitle;
- LO_DescTextStruct lo_desctext;
- LO_BlockQuoteStruct lo_blockquote;
- LO_LayerStruct lo_layer;
- LO_HeadingStruct lo_heading;
- LO_SpanStruct lo_span;
- LO_DivStruct lo_div;
- LO_SpacerStruct lo_spacer;
- };
-
- struct LO_ObjectStruct_struct {
- LO_Element lo_element;
- void* stream_closure;
- };
-
- /* #ifndef NO_TAB_NAVIGATION */
- #define tabFocusListMax 8
- struct LO_tabFocus_struct {
- LO_Element *pElement;
- int32 mapAreaIndex; /* 0 means no focus, start with index 1. */
- LO_AnchorData *pAnchor;
- };
- /* NO_TAB_NAVIGATION */
-
- struct LO_Position_struct {
- LO_Element* element; /* The element */
- int32 position; /* The position within the element. */
- };
-
- /* begin always <= end. Both begin and end are included in
- * the selected region. (i.e. it's closed. Half-open would
- * be better, since then we could also express insertion
- * points.)
- */
-
- struct LO_Selection_struct {
- LO_Position begin;
- LO_Position end;
- };
-
- /* Hit test results */
-
- #define LO_HIT_UNKNOWN 0
- #define LO_HIT_LINE 1
- #define LO_HIT_ELEMENT 2
-
- #define LO_HIT_LINE_REGION_BEFORE 0
- #define LO_HIT_LINE_REGION_AFTER 1
-
- #define LO_HIT_ELEMENT_REGION_BEFORE 0
- #define LO_HIT_ELEMENT_REGION_MIDDLE 1
- #define LO_HIT_ELEMENT_REGION_AFTER 2
-
- struct LO_HitLineResult_struct {
- int16 type; /* LO_HIT_LINE */
- int16 region; /* LO_HIT_LINE_POSITION_XXX */
- LO_Selection selection; /* The line */
- };
-
- struct LO_HitElementResult_struct {
- int16 type; /* LO_HIT_ELEMENT */
- int16 region; /* LO_HIT_ELEMENT_POSITION_XXX */
- LO_Position position; /* The element that was hit. */
-
- };
-
- union LO_HitResult_struct {
- int16 type;
- LO_HitLineResult lo_hitLine;
- LO_HitElementResult lo_hitElement;
- };
-
- /* Logical navigation chunks */
-
- #define LO_NA_CHARACTER 0
- #define LO_NA_WORD 1
- #define LO_NA_LINEEDGE 2
- #define LO_NA_DOCUMENT 3
-
- /* It's unclear if we shouldn't figure out how to move these
- declarations and defines into layout-private header files. */
- typedef enum LO_LayerType_enum {
- LO_BLINK_LAYER,
- LO_IMAGE_LAYER,
- LO_HTML_BLOCK_LAYER, /* Contents of <LAYER> tag, not including bg */
- LO_HTML_BODY_LAYER, /* Contents of <BODY> tag, not including bg */
- LO_HTML_BACKGROUND_LAYER, /* Background for <BODY> or <LAYER> */
- LO_GROUP_LAYER, /* Parent with child background and content layers */
- LO_EMBEDDED_OBJECT_LAYER /* Form, applet, plugin */
- } LO_LayerType;
-
- #define LO_DOCUMENT_LAYER_NAME "_DOCUMENT"
- #define LO_BACKGROUND_LAYER_NAME "_BACKGROUND"
- #define LO_BODY_LAYER_NAME "_BODY"
- #define LO_BLINK_GROUP_NAME "_BLINKGROUP"
- #define LO_CONTENT_LAYER_NAME "_CONTENT"
- #define LO_EMBED_LAYER_NAME "_EMBED"
-
- #define LO_DOCUMENT_LAYER_ID 0
-
- #endif /* _LayoutElements_ */
-