4 * Copyright (c) 2013-2014 project bchan
6 * This software is provided 'as-is', without any express or implied
7 * warranty. In no event will the authors be held liable for any damages
8 * arising from the use of this software.
10 * Permission is granted to anyone to use this software for any purpose,
11 * including commercial applications, and to alter it and redistribute it
12 * freely, subject to the following restrictions:
14 * 1. The origin of this software must not be misrepresented; you must not
15 * claim that you wrote the original software. If you use this software
16 * in a product, an acknowledgment in the product documentation would be
17 * appreciated but is not required.
19 * 2. Altered source versions must be plainly marked as such, and must not be
20 * misrepresented as being the original software.
22 * 3. This notice may not be removed or altered from any source
30 #include "cssmetric.h"
31 #include <coll/treebase.h>
33 #ifndef __CSSRENDERING_BOX_H__
34 #define __CSSRENDERING_BOX_H__
36 /* Functionality name: cssrendering */
37 /* Detail name: textfragment */
38 struct cssrendering_textfragment_t_ {
42 typedef struct cssrendering_textfragment_t_ cssrendering_textfragment_t;
44 /* Functionality name: cssrendering */
45 /* Detail name: box */
46 /* Data structure identifier: type */
47 enum CSSRENDERING_BOX_TYPE_ {
48 CSSRENDEREING_BOX_TYPE_BLOCK,
49 CSSRENDEREING_BOX_TYPE_LINE,
50 CSSRENDEREING_BOX_TYPE_ANONYMOUS,
52 typedef enum CSSRENDERING_BOX_TYPE_ CSSRENDERING_BOX_TYPE;
54 /* Functionality name: cssrendering */
55 /* Detail name: basebox */
56 struct cssrendering_basebox_t_ {
58 CSSRENDERING_BOX_TYPE type;
59 cssmetric_rectangle_t content_edge;
62 typedef struct cssrendering_basebox_t_ cssrendering_basebox_t;
64 /* Functionality name: cssrendering */
65 /* Detail name: linebox */
66 struct cssrendering_linebox_t_ {
67 cssrendering_basebox_t base;
68 cssrendering_textfragment_t text;
70 typedef struct cssrendering_linebox_t_ cssrendering_linebox_t;
72 /* Functionality name: cssrendering */
73 /* Detail name: anonymousbox */
74 struct cssrendering_anonymousbox_t_ {
75 cssrendering_basebox_t base;
77 typedef struct cssrendering_anonymousbox_t_ cssrendering_anonymousbox_t;
79 /* Functionality name: cssrendering */
80 /* Detail name: blockbox */
81 struct cssrendering_blockbox_t_ {
82 cssrendering_basebox_t base;
83 cssmetric_rectangle_t view;
85 typedef struct cssrendering_blockbox_t_ cssrendering_blockbox_t;
87 /* Functionality name: cssrendering */
88 /* Detail name: drawtraversal */
89 struct cssrendering_drawtraversal_t_ {
90 treebase_preordertraversal_t base;
91 cssmetric_point_t origin;
92 cssmetric_rectangle_t draw;
94 typedef struct cssrendering_drawtraversal_t_ cssrendering_drawtraversal_t;
96 /* Functionality name: cssrendering */
97 /* Detail name: drawtraversal */
98 /* Data structure identifier: result */
99 struct cssrendering_drawtraversal_result_ {
101 CSSRENDERING_DRAWTRAVERSAL_RESULTTYPE_TEXT,
102 CSSRENDERING_DRAWTRAVERSAL_RESULTTYPE_BLOCK,
106 cssmetric_rectangle_t content_edge;
107 cssrendering_textfragment_t *fragment;
111 cssmetric_rectangle_t content_edge;
116 typedef struct cssrendering_drawtraversal_result_ cssrendering_drawtraversal_result;
118 /* Functionality name: cssrendering */
119 /* Detail name: hittraversal */
120 struct cssrendering_hittraversal_t_ {
121 treebase_postordertraversal_t base;
122 cssmetric_point_t origin;
123 cssmetric_rectangle_t draw;
125 typedef struct cssrendering_hittraversal_t_ cssrendering_hittraversal_t;
127 /* Functionality name: cssrendering */
128 /* Detail name: hittraversal */
129 /* Data structure identifier: result */
130 struct cssrendering_hittraversal_result_ {
132 CSSRENDERING_HITTRAVERSAL_RESULTTYPE_BLOCK,
133 CSSRENDERING_HITTRAVERSAL_RESULTTYPE_LINE,
137 cssmetric_rectangle_t content_edge;
142 typedef struct cssrendering_hittraversal_result_ cssrendering_hittraversal_result;
144 IMPORT VOID cssrendering_linebox_initialize(cssrendering_linebox_t *box);
145 IMPORT VOID cssrendering_linebox_finalize(cssrendering_linebox_t *box);
146 IMPORT cssrendering_linebox_t* cssrendering_linebox_getnextsibling(cssrendering_linebox_t *box);
147 IMPORT VOID cssrendering_linebox_setuserdata(cssrendering_linebox_t *box, VP data);
149 IMPORT VOID cssrendering_anonymousbox_initialize(cssrendering_anonymousbox_t *box);
150 IMPORT VOID cssrendering_anonymousbox_finalize(cssrendering_anonymousbox_t *box);
151 IMPORT VOID cssrendering_anonymousbox_appendchild(cssrendering_anonymousbox_t *box, cssrendering_linebox_t *child);
152 IMPORT W cssrendering_anonymousbox_insertbefore(cssrendering_anonymousbox_t *box, cssrendering_linebox_t *child, cssrendering_linebox_t *ref);
153 IMPORT W cssrendering_anonymousbox_removechild(cssrendering_anonymousbox_t *box, cssrendering_linebox_t *child);
154 IMPORT cssrendering_linebox_t* cssrendering_anonymousbox_getfirstchild(cssrendering_anonymousbox_t *box);
155 IMPORT VOID cssrendering_anonymousbox_setuserdata(cssrendering_anonymousbox_t *box, VP data);
157 IMPORT VOID cssrendering_blockbox_initialize(cssrendering_blockbox_t *box);
158 IMPORT VOID cssrendering_blockbox_finalize(cssrendering_blockbox_t *box);
159 IMPORT VOID cssrendering_blockbox_appendanonymouschild(cssrendering_blockbox_t *box, cssrendering_anonymousbox_t *child);
160 IMPORT VOID cssrendering_blockbox_appendblockchild(cssrendering_blockbox_t *box, cssrendering_blockbox_t *child);
161 IMPORT VOID cssrendering_blockbox_setuserdata(cssrendering_blockbox_t *box, VP data);
163 IMPORT VOID cssrendering_drawtraversal_initialize(cssrendering_drawtraversal_t *traversal, cssrendering_blockbox_t *root, cssmetric_rectangle_t draw);
164 IMPORT VOID cssrendering_drawtraversal_finalize(cssrendering_drawtraversal_t *traversal);
165 IMPORT Bool cssrendering_drawtraversal_next(cssrendering_drawtraversal_t *traversal, cssrendering_drawtraversal_result *result);
167 IMPORT VOID cssrendering_hittraversal_initialize(cssrendering_hittraversal_t *traversal, cssrendering_blockbox_t *root, cssmetric_rectangle_t draw);
168 IMPORT VOID cssrendering_hittraversal_finalize(cssrendering_hittraversal_t *traversal);
169 IMPORT Bool cssrendering_hittraversal_next(cssrendering_hittraversal_t *traversal, cssrendering_hittraversal_result *result);