OSDN Git Service

153493e613def644dc9ca2125ac3ea2f2fb3a362
[bbk/bchanf.git] / src / css / cssrendering_box.h
1 /*
2  * cssrendering_box.h
3  *
4  * Copyright (c) 2013-2014 project bchan
5  *
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.
9  *
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:
13  *
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.
18  *
19  * 2. Altered source versions must be plainly marked as such, and must not be
20  *    misrepresented as being the original software.
21  *
22  * 3. This notice may not be removed or altered from any source
23  *    distribution.
24  *
25  */
26
27 #include    <basic.h>
28 #include    <btron/dp.h>
29
30 #include        "cssmetric.h"
31 #include        <coll/treebase.h>
32
33 #ifndef __CSSRENDERING_BOX_H__
34 #define __CSSRENDERING_BOX_H__
35
36 /* Functionality name: cssrendering */
37 /* Detail name: textfragment */
38 struct cssrendering_textfragment_t_ {
39         TC *str;
40         W len;
41 };
42 typedef struct cssrendering_textfragment_t_ cssrendering_textfragment_t;
43
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,
51 }; 
52 typedef enum CSSRENDERING_BOX_TYPE_ CSSRENDERING_BOX_TYPE;
53
54 /* Functionality name: cssrendering */
55 /* Detail name: basebox */
56 struct cssrendering_basebox_t_ {
57         treebase_node_t base;
58         CSSRENDERING_BOX_TYPE type;
59         cssmetric_rectangle_t content_edge;
60         VP userdata;
61 };
62 typedef struct cssrendering_basebox_t_ cssrendering_basebox_t;
63
64 /* Functionality name: cssrendering */
65 /* Detail name: linebox */
66 struct cssrendering_linebox_t_ {
67         cssrendering_basebox_t base;
68         cssrendering_textfragment_t text;
69 };
70 typedef struct cssrendering_linebox_t_ cssrendering_linebox_t;
71
72 /* Functionality name: cssrendering */
73 /* Detail name: anonymousbox */
74 struct cssrendering_anonymousbox_t_ {
75         cssrendering_basebox_t base;
76 };
77 typedef struct cssrendering_anonymousbox_t_ cssrendering_anonymousbox_t;
78
79 /* Functionality name: cssrendering */
80 /* Detail name: blockbox */
81 struct cssrendering_blockbox_t_ {
82         cssrendering_basebox_t base;
83         cssmetric_rectangle_t view;
84 };
85 typedef struct cssrendering_blockbox_t_ cssrendering_blockbox_t;
86
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;
93 };
94 typedef struct cssrendering_drawtraversal_t_ cssrendering_drawtraversal_t;
95
96 /* Functionality name: cssrendering */
97 /* Detail name: drawtraversal */
98 /* Data structure identifier: result */
99 struct cssrendering_drawtraversal_result_ {
100         enum {
101                 CSSRENDERING_DRAWTRAVERSAL_RESULTTYPE_TEXT,
102                 CSSRENDERING_DRAWTRAVERSAL_RESULTTYPE_BLOCK,
103         } type;
104         union {
105                 struct {
106                         cssmetric_rectangle_t content_edge;
107                         cssrendering_textfragment_t *fragment;
108                         VP nodedata;
109                 } text;
110                 struct {
111                         cssmetric_rectangle_t content_edge;
112                         VP nodedata;
113                 } block;
114         } data;
115 };
116 typedef struct cssrendering_drawtraversal_result_ cssrendering_drawtraversal_result;
117
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;
124 };
125 typedef struct cssrendering_hittraversal_t_ cssrendering_hittraversal_t;
126
127 /* Functionality name: cssrendering */
128 /* Detail name: hittraversal */
129 /* Data structure identifier: result */
130 struct cssrendering_hittraversal_result_ {
131         enum {
132                 CSSRENDERING_HITTRAVERSAL_RESULTTYPE_BLOCK,
133                 CSSRENDERING_HITTRAVERSAL_RESULTTYPE_LINE,
134         } type;
135         union {
136                 struct {
137                         cssmetric_rectangle_t content_edge;
138                         VP nodedata;
139                 } line;
140         } data;
141 };
142 typedef struct cssrendering_hittraversal_result_ cssrendering_hittraversal_result;
143
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);
148
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);
156
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);
162
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);
166
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);
170
171 #endif