зеркало из https://github.com/mozilla/gecko-dev.git
263 строки
8.9 KiB
C
263 строки
8.9 KiB
C
/* -*- Mode: C; tab-width: 4; 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.
|
|
*/
|
|
|
|
|
|
/*
|
|
* Layer-specific data structures and declarations for HTML layout library.
|
|
*/
|
|
#ifndef _LAYLAYER_H
|
|
#define _LAYLAYER_H
|
|
|
|
#define LO_IGNORE_TAG_MARKER 0xFFFF
|
|
|
|
typedef struct lo_Block lo_Block; /* Forward declaration */
|
|
|
|
/*
|
|
* This struct represents the layout side of a layer created with
|
|
* a <(I)LAYER> tag. It holds onto the contents of the layer (in a cell)
|
|
* along with lists of elements that are part of the layer's
|
|
* "document".
|
|
*/
|
|
struct lo_LayerDocState
|
|
{
|
|
int32 id;
|
|
LO_CellStruct *cell; /* Contents of layer */
|
|
int32 height; /* Value of layer's HEIGHT attribute, or zero */
|
|
|
|
PRPackedBool is_constructed_layer; /* Created with JS new operator ? */
|
|
PRPackedBool overrideScrollWidth; /* Only used for _DOCUMENT layer */
|
|
PRPackedBool overrideScrollHeight;
|
|
int32 contentWidth; /* Dimensions of content, not including
|
|
child layers. */
|
|
int32 contentHeight;
|
|
|
|
XP_Rect viewRect; /* Non-scrolling clip rectangle */
|
|
|
|
CL_Layer *layer;
|
|
void *mocha_object;
|
|
lo_DocLists *doc_lists; /* Layout element lists, e.g. embeds, forms */
|
|
lo_Block *temp_block; /* Data used only during HTML layer layout */
|
|
};
|
|
|
|
struct lo_LayerStack {
|
|
lo_LayerDocState *layer_state;
|
|
lo_LayerStack *next;
|
|
};
|
|
|
|
/* A layer closure is the piece of layout-specific data that gets
|
|
attached as client-data to a CL_Layer. They come in all different
|
|
flavors, depending on the purpose of the layer. */
|
|
|
|
/* Cheap inheritance: Struct members common to all types of layer closures */
|
|
#define LO_LAYER_CLOSURE_STRUCT_MEMBERS \
|
|
LO_LayerType type; \
|
|
MWContext *context
|
|
|
|
typedef struct lo_BlinkLayerClosure {
|
|
LO_LAYER_CLOSURE_STRUCT_MEMBERS;
|
|
LO_TextStruct *text; /* The text element that's blinking */
|
|
} lo_BlinkLayerClosure;
|
|
|
|
typedef struct lo_ImageLayerClosure {
|
|
LO_LAYER_CLOSURE_STRUCT_MEMBERS;
|
|
LO_ImageStruct *image; /* The layout image element */
|
|
} lo_ImageLayerClosure;
|
|
|
|
typedef struct lo_CellBGLayerClosure {
|
|
LO_LAYER_CLOSURE_STRUCT_MEMBERS;
|
|
LO_CellStruct *cell; /* The cell that we're the background for */
|
|
} lo_CellBGLayerClosure;
|
|
|
|
typedef struct lo_HTMLBlockClosure {
|
|
LO_LAYER_CLOSURE_STRUCT_MEMBERS;
|
|
int32 x_offset; /* Layout imposed offset for in-flow layers */
|
|
int32 y_offset;
|
|
lo_DocState *state; /* The layout document state */
|
|
lo_LayerDocState *layer_state; /* The layer doc state */
|
|
PRBool is_inflow;
|
|
} lo_HTMLBlockClosure;
|
|
|
|
typedef struct lo_HTMLBodyClosure {
|
|
LO_LAYER_CLOSURE_STRUCT_MEMBERS;
|
|
CL_Layer *layer;
|
|
} lo_HTMLBodyClosure;
|
|
|
|
typedef struct lo_EmbeddedObjectClosure {
|
|
LO_LAYER_CLOSURE_STRUCT_MEMBERS;
|
|
LO_Element *element; /* Plugin, Java applet, or form element */
|
|
PRPackedBool is_windowed;
|
|
} lo_EmbeddedObjectClosure;
|
|
|
|
/* This struct belongs to the main container layer for a group of
|
|
related layers, i.e. the layer that is reflected by the <LAYER> or
|
|
<ILAYER> tags. It has child layers that represent the layer's
|
|
background, HTML contents, table cell backdrop layers, etc. */
|
|
typedef struct lo_GroupLayerClosure {
|
|
LO_LAYER_CLOSURE_STRUCT_MEMBERS;
|
|
int32 x_offset; /* Layout imposed offset for in-flow layers */
|
|
int32 y_offset;
|
|
CL_Layer *content_layer; /* The child content layer */
|
|
CL_Layer *background_layer; /* The child background layer */
|
|
int32 wrap_width; /* Pixel position at which text wraps */
|
|
int clip_expansion_policy;
|
|
PRBool is_inflow;
|
|
lo_LayerDocState *layer_state; /* The layer doc state */
|
|
} lo_GroupLayerClosure;
|
|
|
|
/* A background layer encompasses either the entire canvas (document),
|
|
a single layer, or a single background cell. */
|
|
typedef enum {
|
|
BG_DOCUMENT,
|
|
BG_LAYER,
|
|
BG_CELL
|
|
} lo_BackgroundType;
|
|
|
|
typedef struct lo_BackgroundLayerClosure {
|
|
LO_LAYER_CLOSURE_STRUCT_MEMBERS;
|
|
LO_Color *bg_color;
|
|
LO_ImageStruct *backdrop_image;
|
|
lo_TileMode tile_mode;
|
|
lo_BackgroundType bg_type;
|
|
LO_CellStruct *cell;
|
|
} lo_BackgroundLayerClosure;
|
|
|
|
typedef struct lo_AnyLayerClosure {
|
|
LO_LAYER_CLOSURE_STRUCT_MEMBERS;
|
|
} lo_AnyLayerClosure;
|
|
|
|
typedef union lo_LayerClosure {
|
|
lo_AnyLayerClosure any_closure;
|
|
lo_BlinkLayerClosure blink_closure;
|
|
lo_ImageLayerClosure image_closure;
|
|
lo_CellBGLayerClosure cellbg_closure;
|
|
lo_HTMLBlockClosure block_closure;
|
|
lo_HTMLBodyClosure body_closure;
|
|
lo_GroupLayerClosure group_closure;
|
|
lo_BackgroundLayerClosure background_closure;
|
|
lo_EmbeddedObjectClosure object_closure; /* plugin, java, form */
|
|
} lo_LayerClosure;
|
|
|
|
|
|
extern void
|
|
lo_CreateBlinkLayer (MWContext *context, LO_TextStruct *text,
|
|
CL_Layer *parent);
|
|
extern void
|
|
lo_DestroyBlinkers(MWContext *context);
|
|
extern void
|
|
lo_UpdateBlinkLayers(MWContext *context);
|
|
|
|
extern CL_Layer *
|
|
lo_CreateBlockLayer(MWContext *context,
|
|
char *name,
|
|
PRBool is_inflow,
|
|
int32 x_offset, int32 y_offset,
|
|
int32 wrap_width,
|
|
lo_LayerDocState *layer_state,
|
|
lo_DocState *state);
|
|
extern void
|
|
lo_CreateDefaultLayers(MWContext *context,
|
|
CL_Layer **doc_layer, CL_Layer **body_layer);
|
|
|
|
extern void
|
|
lo_AttachHTMLLayer(MWContext *context, CL_Layer *layer, CL_Layer *parent,
|
|
char *above, char *below, int32 z_order);
|
|
|
|
extern PRBool lo_InsideLayer(lo_DocState *state);
|
|
extern PRBool lo_InsideInflowLayer(lo_DocState *state);
|
|
|
|
extern lo_LayerDocState * lo_NewLayerState(MWContext *context);
|
|
extern void lo_DeleteLayerState(MWContext *context, lo_DocState *state,
|
|
lo_LayerDocState *layer_state);
|
|
extern void lo_AddLineListToLayer(MWContext *, lo_DocState *, LO_Element *);
|
|
|
|
extern CL_Layer *
|
|
lo_CreateCellBackgroundLayer(MWContext *context, LO_CellStruct *cell,
|
|
CL_Layer *parent_layer, int16 table_nesting_level);
|
|
extern CL_Layer *
|
|
lo_CreateEmbedLayer(MWContext *context, CL_Layer *parent,
|
|
int32 x, int32 y, int32 width, int32 height,
|
|
LO_EmbedStruct *embed, lo_DocState *state);
|
|
extern CL_Layer *
|
|
lo_CreateEmbeddedObjectLayer(MWContext *context, lo_DocState *state,
|
|
LO_Element *tptr);
|
|
extern CL_Layer *
|
|
lo_CreateImageLayer (MWContext *context, LO_ImageStruct *text,
|
|
CL_Layer *parent);
|
|
extern void lo_ActivateImageLayer(MWContext *context, LO_ImageStruct *image);
|
|
|
|
extern void
|
|
lo_PushLayerState(lo_TopState *top_state, lo_LayerDocState *layer_state);
|
|
extern lo_LayerDocState *
|
|
lo_PopLayerState(lo_DocState *state);
|
|
extern lo_LayerDocState *
|
|
lo_CurrentLayerState(lo_DocState *state);
|
|
extern void
|
|
lo_DeleteLayerStack(lo_DocState *state);
|
|
|
|
extern int32
|
|
lo_CurrentLayerId(lo_DocState *state);
|
|
extern CL_Layer *
|
|
lo_CurrentLayer(lo_DocState *state);
|
|
extern PRBool
|
|
lo_IsCurrentLayerDynamic(lo_DocState *state);
|
|
extern PRBool
|
|
lo_IsTagInSourcedLayer(lo_DocState *state, PA_Tag *tag);
|
|
extern PRBool
|
|
lo_IsAnyCurrentAncestorSourced(lo_DocState *state);
|
|
extern PRBool
|
|
lo_IsAnyCurrentAncestorDynamic(lo_DocState *state);
|
|
|
|
extern lo_LayerDocState *
|
|
lo_GetLayerState(CL_Layer *layer);
|
|
|
|
extern int32
|
|
lo_GetEnclosingLayerHeight(lo_DocState *state);
|
|
|
|
extern int32
|
|
lo_GetEnclosingLayerWidth(lo_DocState *state);
|
|
|
|
LO_CellStruct *
|
|
lo_GetCellFromLayer(MWContext *context, CL_Layer *layer);
|
|
|
|
extern void
|
|
lo_OffsetInflowLayer(CL_Layer *layer, int32 dx, int32 dy);
|
|
|
|
extern void
|
|
lo_BlockLayerTag(MWContext *context, lo_DocState *state, PA_Tag *tag);
|
|
extern void
|
|
lo_UnblockLayerTag(lo_DocState *state);
|
|
extern void
|
|
lo_FinishLayerLayout(MWContext *context, lo_DocState *state, int mocha_event);
|
|
|
|
extern void
|
|
lo_GetLayerXYShift(CL_Layer *layer, int32 *xp, int32 *yp);
|
|
|
|
extern void
|
|
lo_DestroyLayers(MWContext *context);
|
|
|
|
extern lo_LayerDocState *
|
|
lo_append_to_layer_array(MWContext *context, lo_TopState *top_state,
|
|
lo_DocState *state,
|
|
lo_LayerDocState *layer_state);
|
|
|
|
extern void
|
|
lo_SetLayerBackdropTileMode(CL_Layer *layer, lo_TileMode tile_mode);
|
|
extern void lo_EndLayerTag(MWContext *, lo_DocState *, PA_Tag *tag);
|
|
|
|
#endif /* _LAYLAYER_H */
|