root/trunk/import/htmlayout/capi.d

Revision 18, 96.4 kB (checked in by bobef, 4 years ago)

Updated HTMLayout wrapper to 0.7 (3.2.2.13)

Line 
1 module htmlayout.capi;
2
3 import tango.sys.win32.Types;
4 import tango.text.convert.Utf;
5 import tango.stdc.stringz;
6 import Int=tango.text.convert.Integer;
7 import Float=tango.text.convert.Float;
8 import tango.stdc.stdlib,tango.stdc.string,tango.stdc.stddef;
9
10 extern(Windows):
11 /////// update 3.2.2.5
12
13 alias HDC HPLATFORMGFX;
14
15 struct graphin_graphics;
16 struct graphin_image;
17
18 alias graphin_graphics* HGFX;
19 alias graphin_image* HIMG;
20
21 alias double REAL;
22
23 alias REAL POS;              // position
24 alias REAL DIM;              // dimension
25 alias REAL ANGLE;            // angle (radians)
26 alias uint COLOR;       // color
27
28 struct COLOR_STOP
29 {
30     static HColorStop* opCall(COLOR clr,float off)
31     {
32         auto ret=new COLOR_STOP;
33         ret.color=clr;
34         ret.offset=off;
35         return ret;
36     }
37
38     COLOR color;
39     float offset; // 0.0 ... 1.0
40 }
41
42 alias COLOR_STOP HColorStop;
43
44 enum GRAPHIN_RESULT
45 {
46     GRAPHIN_PANIC = -1, // e.g. not enough memory
47     GRAPHIN_OK = 0,
48     GRAPHIN_BAD_PARAM = 1,  // bad parameter
49     GRAPHIN_FAILURE = 2,        // operation failed, e.g. restore() without save()
50     GRAPHIN_NOTSUPPORTED = 3 // the platform does not support requested feature
51 }
52
53 alias GRAPHIN_RESULT.GRAPHIN_PANIC GRAPHIN_PANIC;
54 alias GRAPHIN_RESULT.GRAPHIN_OK GRAPHIN_OK;
55 alias GRAPHIN_RESULT.GRAPHIN_BAD_PARAM GRAPHIN_BAD_PARAM;
56 alias GRAPHIN_RESULT.GRAPHIN_FAILURE GRAPHIN_FAILURE;
57 alias GRAPHIN_RESULT.GRAPHIN_NOTSUPPORTED GRAPHIN_NOTSUPPORTED;
58
59 enum DRAW_PATH_MODE
60 {
61     FILL_ONLY,
62     STROKE_ONLY,
63     FILL_AND_STROKE,
64     FILL_BY_LINE_COLOR
65 }
66
67 alias DRAW_PATH_MODE.FILL_ONLY FILL_ONLY;
68 alias DRAW_PATH_MODE.STROKE_ONLY STROKE_ONLY;
69 alias DRAW_PATH_MODE.FILL_AND_STROKE FILL_AND_STROKE;
70 alias DRAW_PATH_MODE.FILL_BY_LINE_COLOR FILL_BY_LINE_COLOR;
71
72 enum TEXT_ALIGNMENT
73 {
74     TEXT_ALIGN_TOP,
75     TEXT_ALIGN_BOTTOM,
76     TEXT_ALIGN_CENTER,
77     TEXT_ALIGN_BASELINE,
78     TEXT_ALIGN_RIGHT = TEXT_ALIGN_TOP,
79     TEXT_ALIGN_LEFT = TEXT_ALIGN_BOTTOM
80 }
81
82 alias TEXT_ALIGNMENT.TEXT_ALIGN_TOP TEXT_ALIGN_TOP;
83 alias TEXT_ALIGNMENT.TEXT_ALIGN_BOTTOM TEXT_ALIGN_BOTTOM;
84 alias TEXT_ALIGNMENT.TEXT_ALIGN_CENTER TEXT_ALIGN_CENTER;
85 alias TEXT_ALIGNMENT.TEXT_ALIGN_BASELINE TEXT_ALIGN_BASELINE;
86 alias TEXT_ALIGNMENT.TEXT_ALIGN_RIGHT TEXT_ALIGN_RIGHT;
87 alias TEXT_ALIGNMENT.TEXT_ALIGN_LEFT TEXT_ALIGN_LEFT;
88
89 enum LINE_JOIN_TYPE
90 {
91     JOIN_MITER = 0,
92     JOIN_MITER_REVERT = 1,
93     JOIN_ROUND = 2,
94     JOIN_BEVEL = 3,
95     JOIN_MITER_ROUND = 4,
96 }
97
98 alias LINE_JOIN_TYPE.JOIN_MITER JOIN_MITER;
99 alias LINE_JOIN_TYPE.JOIN_MITER_REVERT JOIN_MITER_REVERT;
100 alias LINE_JOIN_TYPE.JOIN_ROUND JOIN_ROUND;
101 alias LINE_JOIN_TYPE.JOIN_BEVEL JOIN_BEVEL;
102 alias LINE_JOIN_TYPE.JOIN_MITER_ROUND JOIN_MITER_ROUND;
103
104 enum LINE_CAP_TYPE
105 {
106     LINE_CAP_BUTT = 0,
107     LINE_CAP_SQUARE = 1,
108     LINE_CAP_ROUND = 2,
109 }
110
111 alias LINE_CAP_TYPE.LINE_CAP_BUTT LINE_CAP_BUTT;
112 alias LINE_CAP_TYPE.LINE_CAP_SQUARE LINE_CAP_SQUARE;
113 alias LINE_CAP_TYPE.LINE_CAP_ROUND LINE_CAP_ROUND;
114
115 alias BOOL /*GRAPHIN_CALLC*/ function(LPVOID prm, LPBYTE data, UINT data_length) image_write_function;
116
117 struct Graphin
118 {
119 // image primitives
120 extern(Windows):
121
122     GRAPHIN_RESULT
123                 function ( UINT width, UINT height, HIMG* poutImg ) imageCreate;
124
125     GRAPHIN_RESULT
126                 function ( HIMG himg ) imageRelease;
127
128     GRAPHIN_RESULT
129                 function ( HIMG himg,
130                          BYTE** data,
131                          UINT* width,
132                          UINT* height,
133                          INT* stride,
134                          UINT* pixel_format) imageGetInfo;
135
136     GRAPHIN_RESULT
137                 function ( HIMG himg ) imageClear;
138
139     GRAPHIN_RESULT
140                 function ( HPLATFORMGFX dst, INT dst_x, INT dst_y,
141                                         HIMG src, INT src_x, INT src_y,
142                                         INT width, INT height, BOOL blend ) imageBlit;
143
144     GRAPHIN_RESULT
145                 function ( BYTE* bytes, UINT num_bytes, HIMG* pout_img ) imageLoad; // load png/jpeg/etc. image from stream of bytes
146
147     GRAPHIN_RESULT
148                 function ( HIMG himg,
149                     image_write_function pfn, void* prm, /* function and its param passed "as is" */
150                     UINT bpp /*24,32 if alpha needed*/,
151                     UINT type /* 0 - png, 1 - jpg*/,
152                     UINT quality /* only for jpeg, 10 - 100 */ ) imageSave;
153
154
155     // SECTION: graphics primitives and drawing operations
156
157     // create color value
158     COLOR
159                 function (UINT red, UINT green, UINT blue, UINT transparency /*= 0*/) RGBT;
160     // Note: transparent color (no-color value) is rgba(?, ?, ?, 0xff);
161
162     GRAPHIN_RESULT
163                 function (HIMG img, HGFX* pout_gfx ) gCreate;
164
165     GRAPHIN_RESULT
166                 function (HGFX gfx) gRelease;
167
168 // Draws line from x1,y1 to x2,y2 using current lineColor and lineGradient.
169     GRAPHIN_RESULT
170                 function ( HGFX hgfx, POS x1, POS y1, POS x2, POS y2 ) gLine;
171
172 // Draws triangle using current lineColor/lineGradient and fillColor/fillGradient.
173     GRAPHIN_RESULT
174                 function ( HGFX hgfx, POS x1, POS y1, POS x2, POS y2, POS x3, POS y3 ) gTriangle;
175
176 // Draws rectangle using current lineColor/lineGradient and fillColor/fillGradient with (optional) rounded corners.
177     GRAPHIN_RESULT
178                 function ( HGFX hgfx, POS x1, POS y1, POS x2, POS y2 ) gRectangle;
179
180 // Draws rounded rectangle using current lineColor/lineGradient and fillColor/fillGradient with (optional) rounded corners.
181     GRAPHIN_RESULT
182                 function ( HGFX hgfx, POS x1, POS y1, POS x2, POS y2, DIM* radii8 /*DIM[8] - four rx/ry pairs */) gRoundedRectangle;
183
184 // Draws circle or ellipse using current lineColor/lineGradient and fillColor/fillGradient.
185     GRAPHIN_RESULT
186                 function ( HGFX hgfx, POS x, POS y, POS rx, POS ry ) gEllipse;
187
188 // Draws closed arc using current lineColor/lineGradient and fillColor/fillGradient.
189     GRAPHIN_RESULT
190                 function ( HGFX hgfx, POS x, POS y, POS rx, POS ry, ANGLE start, ANGLE sweep ) gArc;
191
192 // Draws star.
193     GRAPHIN_RESULT
194                 function ( HGFX hgfx, POS x, POS y, POS r1, POS r2, ANGLE start, UINT rays ) gStar;
195
196 // Closed polygon.
197     GRAPHIN_RESULT
198                 function ( HGFX hgfx, POS* xy, UINT num_points ) gPolygon;
199
200     // Polyline.
201     GRAPHIN_RESULT
202                 function ( HGFX hgfx, POS* xy, UINT num_points ) gPolyline;
203
204 // SECTION: Path operations
205
206     GRAPHIN_RESULT
207                 function ( HGFX hgfx ) gOpenPath;
208
209     GRAPHIN_RESULT
210                 function ( HGFX hgfx, POS x, POS y, BOOL relative ) gMoveTo;
211
212     GRAPHIN_RESULT
213                 function ( HGFX hgfx, POS x, POS y, BOOL relative ) gLineTo;
214
215     GRAPHIN_RESULT
216                 function ( HGFX hgfx, POS x, BOOL relative ) gHLineTo;
217
218     GRAPHIN_RESULT
219                 function ( HGFX hgfx, POS y, BOOL relative ) gVLineTo;
220
221     GRAPHIN_RESULT
222                 function ( HGFX hgfx, POS x, POS y, ANGLE angle, POS rx, POS ry, BOOL is_large_arc, BOOL sweep_flag, BOOL relative ) gArcTo;
223
224     GRAPHIN_RESULT
225                 function ( HGFX hgfx, POS x, POS y, POS rx, POS ry, BOOL clockwise ) gEllipseTo;
226
227     GRAPHIN_RESULT
228                 function ( HGFX hgfx, POS xc, POS yc, POS x, POS y, BOOL relative ) gQuadraticCurveTo;
229
230     GRAPHIN_RESULT
231                 function ( HGFX hgfx, POS xc1, POS yc1, POS xc2, POS yc2, POS x, POS y, BOOL relative ) gBezierCurveTo;
232
233     GRAPHIN_RESULT
234                 function ( HGFX hgfx ) gClosePath;
235
236     GRAPHIN_RESULT
237                 function ( HGFX hgfx, DRAW_PATH_MODE dpm ) gDrawPath;
238
239 // end of path opearations
240
241 // SECTION: affine tranformations:
242
243     GRAPHIN_RESULT
244                 function ( HGFX hgfx, ANGLE radians, POS* cx /*= 0*/, POS* cy /*= 0*/ ) gRotate;
245
246     GRAPHIN_RESULT
247                 function ( HGFX hgfx, POS cx, POS cy ) gTranslate;
248
249     GRAPHIN_RESULT
250                 function ( HGFX hgfx, double x, double y ) gScale;
251
252     GRAPHIN_RESULT
253                 function ( HGFX hgfx, double dx, double dy ) gSkew;
254
255     // all above in one shot
256     GRAPHIN_RESULT
257                 function ( HGFX hgfx, POS m11, POS m12, POS m21, POS m22, POS dx, POS dy ) gTransform;
258
259 // end of affine tranformations.
260
261 // SECTION: state save/restore
262
263     GRAPHIN_RESULT
264                 function ( HGFX hgfx ) gStateSave;
265
266     GRAPHIN_RESULT
267                 function ( HGFX hgfx ) gStateRestore;
268
269 // end of state save/restore
270
271 // SECTION: drawing attributes
272
273     // set line width for subsequent drawings.
274     GRAPHIN_RESULT
275                 function ( HGFX hgfx, DIM width ) gLineWidth;
276
277     GRAPHIN_RESULT
278                 function ( HGFX hgfx, LINE_JOIN_TYPE type ) gLineJoin;
279
280     GRAPHIN_RESULT
281                 function ( HGFX hgfx, LINE_CAP_TYPE type) gLineCap;
282
283     //GRAPHIN_RESULT GRAPHIN_CALL
284     //      (*gNoLine ( HGFX hgfx ) { gLineWidth(hgfx,0.0); }
285
286     // color for solid lines/strokes
287     GRAPHIN_RESULT
288                 function ( HGFX hgfx, COLOR c) gLineColor;
289
290     // color for solid fills
291     GRAPHIN_RESULT
292                 function ( HGFX hgfx, COLOR color ) gFillColor;
293
294 //inline void
295 //          graphics_no_fill ( HGFX hgfx ) { graphics_fill_color(hgfx, graphics_rgbt(0,0,0,0xFF)); }
296
297     // setup parameters of linear gradient of lines.
298     GRAPHIN_RESULT
299                 function ( HGFX hgfx, POS x1, POS y1, POS x2, POS y2, COLOR_STOP* stops, UINT nstops ) gLineGradientLinear;
300
301     // setup parameters of linear gradient of fills.
302     GRAPHIN_RESULT
303                 function ( HGFX hgfx, POS x1, POS y1, POS x2, POS y2, COLOR_STOP* stops, UINT nstops ) gFillGradientLinear;
304
305     // setup parameters of line gradient radial fills.
306     GRAPHIN_RESULT
307                 function ( HGFX hgfx, POS x, POS y, DIM r, COLOR_STOP* stops, UINT nstops ) gLineGradientRadial;
308
309     // setup parameters of gradient radial fills.
310     GRAPHIN_RESULT
311                 function ( HGFX hgfx, POS x, POS y, DIM r, COLOR_STOP* stops, UINT nstops ) gFillGradientRadial;
312
313     GRAPHIN_RESULT
314                 function ( HGFX hgfx, BOOL even_odd /* false - fill_non_zero */ ) gFillMode;
315
316 // SECTION: text
317
318     // define font attributes for all subsequent text operations.
319     GRAPHIN_RESULT
320                 function ( HGFX hgfx, char* name, DIM size, BOOL bold/* = false*/, BOOL italic/* = false*/, ANGLE angle /*= 0*/) gSetFont;
321
322     // draw text at x,y with text alignment
323     GRAPHIN_RESULT
324                 function ( HGFX hgfx, POS x, POS y, wchar_t* text, UINT text_length) gText;
325
326     // calculates width of the text string
327     GRAPHIN_RESULT
328                 function ( HGFX hgfx, wchar_t* text, UINT text_length, DIM* out_width) gTextWidth;
329
330     // returns height and ascent of the font.
331     GRAPHIN_RESULT
332                 function ( HGFX hgfx, DIM* out_height, DIM* out_ascent ) gFontMetrics;
333
334
335     // calculates width of the text string
336     GRAPHIN_RESULT
337                 function ( HGFX hgfx, TEXT_ALIGNMENT x, TEXT_ALIGNMENT y) gTextAlignment;
338
339     // SECTION: image rendering
340
341     // draws img onto the graphics surface with current transformation applied (scale, rotation).
342     GRAPHIN_RESULT
343                 function ( HGFX hgfx, HIMG himg, POS x, POS y,
344                                                             DIM* w /*= 0*/, DIM* h /*= 0*/, UINT* ix /*= 0*/, UINT* iy /*= 0*/, UINT* iw /*= 0*/, UINT* ih /*= 0*/ ) gDrawImage;
345
346     // blits image bits onto underlying pixel buffer. no affine transformations.
347     GRAPHIN_RESULT
348                 function ( HGFX hgfx, HIMG himg, POS x, POS y, UINT* ix /*= 0*/, UINT* iy /*= 0*/, UINT* iw /*= 0*/, UINT* ih /*= 0*/ ) gBlitImage;
349
350     // blends image bits with bits of the buffer. no affine transformations.
351     GRAPHIN_RESULT
352                 function ( HGFX hgfx, HIMG himg, POS x, POS y, UINT opacity /*= 0xff*/, UINT* ix /*= 0*/, UINT* iy /*= 0*/, UINT* iw /*= 0*/, UINT* ih /*= 0*/ ) gBlendImage;
353
354     // SECTION: coordinate space
355
356     GRAPHIN_RESULT
357                 function ( HGFX hgfx, POS* inout_x, POS* inout_y) gWorldToScreen;
358
359     //inline GRAPHIN_RESULT
360     //          graphics_world_to_screen ( HGFX hgfx, POS* length)
361     //{
362     //   return graphics_world_to_screen ( hgfx, length, 0);
363     //}
364
365     GRAPHIN_RESULT
366                 function ( HGFX hgfx, POS* inout_x, POS* inout_y) gScreenToWorld;
367
368     //inline GRAPHIN_RESULT
369     //          graphics_screen_to_world ( HGFX hgfx, POS* length)
370     //{
371     //   return graphics_screen_to_world (hgfx, length, 0);
372     //}
373
374 // SECTION: clipping
375
376     GRAPHIN_RESULT
377                 function ( HGFX hgfx, POS x1, POS y1, POS x2, POS y2) gSetClipBox;
378
379     GRAPHIN_RESULT
380                 function ( HGFX hgfx, POS* x1, POS* y1, POS* x2, POS* y2) gGetClipBox;
381
382     GRAPHIN_RESULT
383                 function ( HGFX hgfx, POS x, POS y, BOOL* yes) gPointInClipBox;
384
385     GRAPHIN_RESULT
386                 function ( HGFX hgfx, POS x1, POS y1, POS x2, POS y2, BOOL* yes) gRectInClipBox;
387
388 }
389
390 alias Graphin* PGraphin;
391
392 /** Get Graphin API
393  *
394  *  returns ptr to Graphin API functions.
395  *  See: htmlayout_graphin.h
396  *
397  **/
398
399 alias PGraphin function() HTMLayoutGetGraphin_t;
400 HTMLayoutGetGraphin_t HTMLayoutGetGraphin;
401
402 /** Render DOM element on the image
403  * \param[in] himg \b HIMG, image where to render the element.
404  * \param[in] where \b POINT, location where to render, image coordinates.
405  * \param[in] what \b HELEMENT, element to render.
406  * \param[in] how \b UINT, flags.
407  **/
408
409 // ATTN: HTMLayoutRenderElement is not implemented yet.
410 alias GRAPHIN_RESULT function(HIMG himg, POINT where, HELEMENT what, UINT how) HTMLayoutRenderElement_t;
411 HTMLayoutRenderElement_t HTMLayoutRenderElement;
412
413 /////// update 3.2.2.4
414
415 alias UINT function( LPCWSTR text, UINT textLength, UINT mode, JSON_VALUE *pVal ) HTMLayoutParseValue_t;
416 HTMLayoutParseValue_t HTMLayoutParseValue;
417
418 /////// update 3.2.2.1
419
420 enum HTMLAYOUT_SCROLL_FLAGS
421 {
422     SCROLL_TO_TOP = 0x01,
423     SCROLL_SMOOTH = 0x10,
424 };
425
426 alias HTMLAYOUT_SCROLL_FLAGS.SCROLL_TO_TOP SCROLL_TO_TOP;
427 alias HTMLAYOUT_SCROLL_FLAGS.SCROLL_SMOOTH SCROLL_SMOOTH;
428
429 alias HLDOM_RESULT function(HELEMENT he, UINT /*HTMLAYOUT_SCROLL_FLAGS*/ flags) HTMLayoutScrollToView_t;
430 HTMLayoutScrollToView_t HTMLayoutScrollToView;
431
432 /////// update 3.2.1.14
433
434 alias void function( HTMLayoutElementExpando* pexp, HELEMENT he ) ExpandoRelease;
435
436 struct HTMLayoutElementExpando
437 {
438     ExpandoRelease finalizer; // can be either NULL or valid pointer to function
439 }
440
441 alias HLDOM_RESULT function( HELEMENT he, HTMLayoutElementExpando* pExpando ) HTMLayoutElementSetExpando_t;
442 HTMLayoutElementSetExpando_t HTMLayoutElementSetExpando;
443 alias HLDOM_RESULT function( HELEMENT he, HTMLayoutElementExpando** ppExpando ) HTMLayoutElementGetExpando_t;
444 HTMLayoutElementGetExpando_t HTMLayoutElementGetExpando;
445
446
447 ////////////////////////////////////////////////////////////////////////////// behaviors
448
449 enum EVENT_GROUPS
450 {
451     HANDLE_INITIALIZATION = 0x0000,      /** attached/detached */
452     HANDLE_MOUSE = 0x0001,                          /** mouse events */
453     HANDLE_KEY = 0x0002,                                /** key events */   
454     HANDLE_FOCUS = 0x0004,                          /** focus events, if this flag is set it also means that element it attached to is focusable */
455     HANDLE_SCROLL = 0x0008,                      /** scroll events */
456     HANDLE_TIMER = 0x0010,                          /** timer event */
457     HANDLE_SIZE = 0x0020,                            /** size changed event */
458     HANDLE_DRAW = 0x0040,                            /** drawing request (event) */
459     HANDLE_DATA_ARRIVED = 0x080,                /** requested data () has been delivered */
460     HANDLE_BEHAVIOR_EVENT = 0x0100,      /** secondary, synthetic events:
461                                         BUTTON_CLICK, HYPERLINK_CLICK, etc.,
462                                         a.k.a. notifications from intrinsic behaviors */
463     HANDLE_METHOD_CALL = 0x0200,                /** behavior specific methods */
464    
465     HANDLE_ALL = 0x03FF,                                /** all of them */
466
467     DISABLE_INITIALIZATION = 0x80000000 /** disable INITIALIZATION events to be sent.
468                                             normally engine sends
469                                             BEHAVIOR_DETACH / BEHAVIOR_ATTACH events unconditionally,
470                                             this flag allows to disable this behavior
471                                         */
472 };
473
474 alias EVENT_GROUPS.HANDLE_INITIALIZATION HANDLE_INITIALIZATION;
475 alias EVENT_GROUPS.HANDLE_MOUSE HANDLE_MOUSE;
476 alias EVENT_GROUPS.HANDLE_KEY HANDLE_KEY;
477 alias EVENT_GROUPS.HANDLE_FOCUS HANDLE_FOCUS;
478 alias EVENT_GROUPS.HANDLE_SCROLL HANDLE_SCROLL;
479 alias EVENT_GROUPS.HANDLE_TIMER HANDLE_TIMER;
480 alias EVENT_GROUPS.HANDLE_SIZE HANDLE_SIZE;
481 alias EVENT_GROUPS.HANDLE_DRAW HANDLE_DRAW;
482 alias EVENT_GROUPS.HANDLE_DATA_ARRIVED HANDLE_DATA_ARRIVED;
483 alias EVENT_GROUPS.HANDLE_BEHAVIOR_EVENT HANDLE_BEHAVIOR_EVENT;
484 alias EVENT_GROUPS.HANDLE_METHOD_CALL HANDLE_METHOD_CALL;
485 alias EVENT_GROUPS.HANDLE_ALL HANDLE_ALL;
486 alias EVENT_GROUPS.DISABLE_INITIALIZATION DISABLE_INITIALIZATION;
487
488 enum PHASE_MASK
489 {
490     BUBBLING = 0,               // bubbling (emersion) phase
491     SINKING = 0x08000,  // capture (immersion) phase, this flag is or'ed with EVENTS codes below
492     HANDLED = 0x10000    // event already processed.
493    
494 // see: http://www.w3.org/TR/xml-events/Overview.html#s_intro
495 };
496
497 alias PHASE_MASK.BUBBLING BUBBLING;
498 alias PHASE_MASK.SINKING    SINKING ;
499 alias PHASE_MASK.HANDLED    HANDLED ;
500
501 enum MOUSE_BUTTONS
502 {
503     MAIN_MOUSE_BUTTON = 1, //aka left button
504     PROP_MOUSE_BUTTON = 2, //aka right button
505     MIDDLE_MOUSE_BUTTON = 4,
506 };
507
508 alias MOUSE_BUTTONS.MAIN_MOUSE_BUTTON MAIN_MOUSE_BUTTON;
509 alias MOUSE_BUTTONS.PROP_MOUSE_BUTTON PROP_MOUSE_BUTTON;
510 alias MOUSE_BUTTONS.MIDDLE_MOUSE_BUTTON MIDDLE_MOUSE_BUTTON;
511
512 enum KEYBOARD_STATES
513 {
514     CONTROL_KEY_PRESSED = 0x1,
515     SHIFT_KEY_PRESSED = 0x2,
516     ALT_KEY_PRESSED = 0x4
517 };
518
519 alias KEYBOARD_STATES.CONTROL_KEY_PRESSED CONTROL_KEY_PRESSED;
520 alias KEYBOARD_STATES.SHIFT_KEY_PRESSED SHIFT_KEY_PRESSED;
521 alias KEYBOARD_STATES.ALT_KEY_PRESSED ALT_KEY_PRESSED;
522
523 enum INITIALIZATION_EVENTS
524 {
525     BEHAVIOR_DETACH = 0,
526     BEHAVIOR_ATTACH = 1
527 };
528
529 alias INITIALIZATION_EVENTS.BEHAVIOR_DETACH BEHAVIOR_DETACH;
530 alias INITIALIZATION_EVENTS.BEHAVIOR_ATTACH BEHAVIOR_ATTACH;
531
532 struct INITIALIZATION_PARAMS
533 {
534     UINT cmd; // INITIALIZATION_EVENTS
535 };
536
537 enum DRAGGING_TYPE
538 {
539     NO_DRAGGING,
540     DRAGGING_MOVE,
541     DRAGGING_COPY,
542 }
543
544 alias DRAGGING_TYPE.NO_DRAGGING NO_DRAGGING;
545 alias DRAGGING_TYPE.DRAGGING_MOVE DRAGGING_MOVE;
546 alias DRAGGING_TYPE.DRAGGING_COPY DRAGGING_COPY;
547
548 enum MOUSE_EVENTS
549 {
550     MOUSE_ENTER = 0,
551     MOUSE_LEAVE,
552     MOUSE_MOVE,
553     MOUSE_UP,
554     MOUSE_DOWN,
555     MOUSE_DCLICK,
556     MOUSE_WHEEL,
557     MOUSE_TICK, // mouse pressed ticks
558     MOUSE_IDLE, // mouse stay idle for some time
559
560     DROP        = 9,   // item dropped, target is that dropped item
561     DRAG_ENTER  = 0xA, // drag arrived to the target element that is one of current drop targets. 
562     DRAG_LEAVE  = 0xB, // drag left one of current drop targets. target is the drop target element. 
563
564     DRAGGING = 0x100, // This flag is 'ORed' with MOUSE_ENTER..MOUSE_DOWN codes if dragging operation is in effect.
565                         // In this case
566 };
567
568 alias MOUSE_EVENTS.MOUSE_ENTER MOUSE_ENTER;
569 alias MOUSE_EVENTS.MOUSE_LEAVE MOUSE_LEAVE;
570 alias MOUSE_EVENTS.MOUSE_MOVE MOUSE_MOVE;
571 alias MOUSE_EVENTS.MOUSE_UP MOUSE_UP;
572 alias MOUSE_EVENTS.MOUSE_DOWN MOUSE_DOWN;
573 alias MOUSE_EVENTS.MOUSE_DCLICK MOUSE_DCLICK;
574 alias MOUSE_EVENTS.MOUSE_WHEEL MOUSE_WHEEL;
575 alias MOUSE_EVENTS.MOUSE_TICK MOUSE_TICK;
576 alias MOUSE_EVENTS.MOUSE_IDLE MOUSE_IDLE;
577 alias MOUSE_EVENTS.DROP DROP;
578 alias MOUSE_EVENTS.DRAG_ENTER DRAG_ENTER;
579 alias MOUSE_EVENTS.DRAG_LEAVE DRAG_LEAVE;
580 alias MOUSE_EVENTS.DRAGGING DRAGGING;
581
582 struct MOUSE_PARAMS
583 {
584     UINT        cmd;            // MOUSE_EVENTS
585     HELEMENT    target;          // target element
586     POINT       pos;            // position of cursor, element relative
587     POINT       pos_document; // position of cursor, document root relative
588     UINT        button_state; // MOUSE_BUTTONS or MOUSE_WHEEL_DELTA
589     UINT        alt_state;      // KEYBOARD_STATES
590     UINT        cursor_type;    // CURSOR_TYPE to set, see CURSOR_TYPE
591     BOOL        is_on_icon;  // mouse is over icon (foreground-image, foreground-repeat:no-repeat)
592
593     HELEMENT    dragging;     // element that is being dragged over, this field is not NULL if (cmd & DRAGGING) != 0
594     UINT        dragging_mode;// see DRAGGING_TYPE.
595 };
596
597 enum CURSOR_TYPE
598 {
599     CURSOR_ARROW, //0
600     CURSOR_IBEAM, //1
601     CURSOR_WAIT,    //2
602     CURSOR_CROSS, //3
603     CURSOR_UPARROW, //4
604     CURSOR_SIZENWSE, //5
605     CURSOR_SIZENESW, //6
606     CURSOR_SIZEWE,   //7
607     CURSOR_SIZENS,   //8
608     CURSOR_SIZEALL, //9
609     CURSOR_NO,           //10
610     CURSOR_APPSTARTING, //11
611     CURSOR_HELP,                //12
612     CURSOR_HAND,                //13
613     CURSOR_DRAG_MOVE,    //14
614     CURSOR_DRAG_COPY,    //15
615 };
616
617 alias CURSOR_TYPE.CURSOR_ARROW CURSOR_ARROW;
618 alias CURSOR_TYPE.CURSOR_IBEAM CURSOR_IBEAM;
619 alias CURSOR_TYPE.CURSOR_WAIT CURSOR_WAIT;
620 alias CURSOR_TYPE.CURSOR_CROSS CURSOR_CROSS;
621 alias CURSOR_TYPE.CURSOR_UPARROW CURSOR_UPARROW;
622 alias CURSOR_TYPE.CURSOR_SIZENWSE CURSOR_SIZENWSE;
623 alias CURSOR_TYPE.CURSOR_SIZENESW CURSOR_SIZENESW;
624 alias CURSOR_TYPE.CURSOR_SIZEWE CURSOR_SIZEWE;
625 alias CURSOR_TYPE.CURSOR_SIZENS CURSOR_SIZENS;
626 alias CURSOR_TYPE.CURSOR_SIZEALL CURSOR_SIZEALL;
627 alias CURSOR_TYPE.CURSOR_NO CURSOR_NO;
628 alias CURSOR_TYPE.CURSOR_APPSTARTING CURSOR_APPSTARTING;
629 alias CURSOR_TYPE.CURSOR_HELP CURSOR_HELP;
630 alias CURSOR_TYPE.CURSOR_HAND CURSOR_HAND;
631 alias CURSOR_TYPE.CURSOR_DRAG_MOVE CURSOR_DRAG_MOVE;
632 alias CURSOR_TYPE.CURSOR_DRAG_COPY CURSOR_DRAG_COPY;
633
634 enum KEY_EVENTS
635 {
636     KEY_DOWN = 0,
637     KEY_UP,
638     KEY_CHAR
639 };
640
641 alias KEY_EVENTS.KEY_DOWN KEY_DOWN;
642 alias KEY_EVENTS.KEY_UP KEY_UP;
643 alias KEY_EVENTS.KEY_CHAR KEY_CHAR;
644
645 struct KEY_PARAMS
646 {
647     UINT            cmd;                    // KEY_EVENTS
648     HELEMENT    target;          // target element
649     UINT            key_code;        // key scan code, or character unicode for KEY_CHAR
650     UINT            alt_state;      // KEYBOARD_STATES   
651 };
652
653 enum FOCUS_EVENTS
654 {
655     FOCUS_LOST = 0,
656     FOCUS_GOT = 1,
657 };
658
659 alias FOCUS_EVENTS.FOCUS_LOST FOCUS_LOST;
660 alias FOCUS_EVENTS.FOCUS_GOT FOCUS_GOT;
661
662 struct FOCUS_PARAMS
663 {
664     UINT            cmd;                        // FOCUS_EVENTS
665     HELEMENT    target;              // target element, for FOCUS_LOST it is a handle of new focus element
666                             //      and for FOCUS_GOT it is a handle of old focus element, can be NULL
667     BOOL            by_mouse_click; // TRUE if focus is being set by mouse click
668     BOOL            cancel;              // in FOCUS_LOST phase setting this field to TRUE will cancel transfer focus from old element to the new one.
669 };
670
671 enum SCROLL_EVENTS
672 {
673     SCROLL_HOME = 0,
674     SCROLL_END,
675     SCROLL_STEP_PLUS,
676     SCROLL_STEP_MINUS,
677     SCROLL_PAGE_PLUS,
678     SCROLL_PAGE_MINUS,
679     SCROLL_POS
680 };
681
682 alias SCROLL_EVENTS.SCROLL_HOME SCROLL_HOME;
683 alias SCROLL_EVENTS.SCROLL_END SCROLL_END;
684 alias SCROLL_EVENTS.SCROLL_STEP_PLUS SCROLL_STEP_PLUS;
685 alias SCROLL_EVENTS.SCROLL_STEP_MINUS SCROLL_STEP_MINUS;
686 alias SCROLL_EVENTS.SCROLL_PAGE_PLUS SCROLL_PAGE_PLUS;
687 alias SCROLL_EVENTS.SCROLL_PAGE_MINUS SCROLL_PAGE_MINUS;
688 alias SCROLL_EVENTS.SCROLL_POS SCROLL_POS;
689
690 struct SCROLL_PARAMS
691 {
692     UINT            cmd;                    // SCROLL_EVENTS
693     HELEMENT    target;          // target element
694     INT          pos;                   // scroll position if SCROLL_POS
695     BOOL            vertical;        // TRUE if from vertical scrollbar
696 };
697
698
699 enum DRAW_EVENTS
700 {
701     DRAW_BACKGROUND = 0,
702     DRAW_CONTENT = 1,
703     DRAW_FOREGROUND = 2,
704 };
705
706 alias DRAW_EVENTS.DRAW_BACKGROUND DRAW_BACKGROUND;
707 alias DRAW_EVENTS.DRAW_CONTENT DRAW_CONTENT;
708 alias DRAW_EVENTS.DRAW_FOREGROUND DRAW_FOREGROUND;
709
710 struct DRAW_PARAMS
711 {
712     UINT            cmd;                    // DRAW_EVENTS
713     HDC          hdc;                   // hdc to paint on
714     RECT            area;                // element area to paint, 
715     UINT            reserved;        //  for DRAW_BACKGROUND/DRAW_FOREGROUND - it is a border box
716                             //   for DRAW_CONTENT - it is a content box
717 };
718 // Use ::GetTextColor(hdc) to get current text color of the element
719
720 enum BEHAVIOR_EVENTS
721 {
722     BUTTON_CLICK = 0,                           // click on button
723     BUTTON_PRESS = 1,                           // mouse down or key down in button
724     BUTTON_STATE_CHANGED = 2,           // checkbox/radio/slider changed its state/value
725     EDIT_VALUE_CHANGING = 3,             // before text change
726     EDIT_VALUE_CHANGED = 4,             // after text change
727     SELECT_SELECTION_CHANGED = 5,   // selection in <select> changed
728     SELECT_STATE_CHANGED = 6,           // node in select expanded/collapsed, heTarget is the node
729
730     POPUP_REQUEST    = 7,                    // request to show popup just received,
731                                  //      here DOM of popup element can be modifed.
732     POPUP_READY      = 8,                    // popup element has been measured and ready to be shown on screen,
733                                  //      here you can use functions like ScrollToView.
734     POPUP_DISMISSED = 9,                     // popup element is closed,
735                                  //      here DOM of popup element can be modifed again - e.g. some items can be removed
736                                  //      to free memory.
737
738     MENU_ITEM_ACTIVE = 0xA,             // menu item activated by mouse hover or by keyboard,
739     MENU_ITEM_CLICK = 0xB,               // menu item click,
740                                  //  BEHAVIOR_EVENT_PARAMS structure layout
741                                  //  BEHAVIOR_EVENT_PARAMS.cmd - MENU_ITEM_CLICK/MENU_ITEM_ACTIVE   
742                                  //  BEHAVIOR_EVENT_PARAMS.heTarget - the menu item, presumably <li> element
743                                  //  BEHAVIOR_EVENT_PARAMS.reason - BY_MOUSE_CLICK | BY_KEY_CLICK
744
745    
746     CONTEXT_MENU_REQUEST = 0x10,     // "right-click", BEHAVIOR_EVENT_PARAMS::he is current popup menu HELEMENT being processed or NULL.
747                                  // application can provide its own HELEMENT here (if it is NULL) or modify current menu element.
748    
749     VISIUAL_STATUS_CHANGED = 0x11, // broadcast notification, sent to all elements of some container being shown or hidden   
750
751
752     // "grey" event codes   - notfications from behaviors from this SDK
753     HYPERLINK_CLICK = 0x80,             // hyperlink click
754     TABLE_HEADER_CLICK,                     // click on some cell in table header,
755                                  //      target = the cell,
756                                  //      reason = index of the cell (column number, 0..n)
757     TABLE_ROW_CLICK,                             // click on data row in the table, target is the row
758                                  //      target = the row,
759                                  //      reason = index of the row (fixed_rows..n)
760     TABLE_ROW_DBL_CLICK,                     // mouse dbl click on data row in the table, target is the row
761                                  //      target = the row,
762                                  //      reason = index of the row (fixed_rows..n)
763
764     ELEMENT_COLLAPSED = 0x90,           // element was collapsed, so far only behavior:tabs is sending these two to the panels
765     ELEMENT_EXPANDED,                           // element was expanded,
766
767     ACTIVATE_CHILD,                             // activate (select) child,
768                                  // used for example by accesskeys behaviors to send activation request, e.g. tab on behavior:tabs.
769
770     DO_SWITCH_TAB = ACTIVATE_CHILD,// command to switch tab programmatically, handled by behavior:tabs
771                                  // use it as HTMLayoutPostEvent(tabsElementOrItsChild, DO_SWITCH_TAB, tabElementToShow, 0);
772
773     INIT_DATA_VIEW,                             // request to virtual grid to initialize its view
774    
775     ROWS_DATA_REQUEST,                       // request from virtual grid to data source behavior to fill data in the table
776                                  // parameters passed throug DATA_ROWS_PARAMS structure.
777
778     UI_STATE_CHANGED,                           // ui state changed, observers shall update their visual states.
779                                                                          // is sent for example by behavior:richtext when caret position/selection has changed.
780
781
782     FIRST_APPLICATION_EVENT_CODE = 0x100
783     // all custom event codes shall be greater
784     // than this number. All codes below this will be used
785     // solely by application - HTMLayout will not intrepret it
786     // and will do just dispatching.
787     // To send event notifications with these codes use
788     // HTMLayoutSend/PostEvent API.
789
790 };
791
792 alias BEHAVIOR_EVENTS.BUTTON_CLICK BUTTON_CLICK;
793 alias BEHAVIOR_EVENTS.BUTTON_PRESS BUTTON_PRESS;
794 alias BEHAVIOR_EVENTS.BUTTON_STATE_CHANGED BUTTON_STATE_CHANGED;
795 alias BEHAVIOR_EVENTS.EDIT_VALUE_CHANGING EDIT_VALUE_CHANGING;
796 alias BEHAVIOR_EVENTS.EDIT_VALUE_CHANGED EDIT_VALUE_CHANGED;
797 alias BEHAVIOR_EVENTS.SELECT_SELECTION_CHANGED SELECT_SELECTION_CHANGED;
798 alias BEHAVIOR_EVENTS.SELECT_STATE_CHANGED SELECT_STATE_CHANGED;
799 alias BEHAVIOR_EVENTS.POPUP_REQUEST POPUP_REQUEST;
800 alias BEHAVIOR_EVENTS.POPUP_READY POPUP_READY;
801 alias BEHAVIOR_EVENTS.POPUP_DISMISSED POPUP_DISMISSED;
802 alias BEHAVIOR_EVENTS.MENU_ITEM_ACTIVE MENU_ITEM_ACTIVE;
803 alias BEHAVIOR_EVENTS.MENU_ITEM_CLICK MENU_ITEM_CLICK;
804 alias BEHAVIOR_EVENTS.CONTEXT_MENU_REQUEST CONTEXT_MENU_REQUEST;
805 alias BEHAVIOR_EVENTS.VISIUAL_STATUS_CHANGED VISIUAL_STATUS_CHANGED;
806 alias BEHAVIOR_EVENTS.HYPERLINK_CLICK HYPERLINK_CLICK;
807 alias BEHAVIOR_EVENTS.TABLE_HEADER_CLICK TABLE_HEADER_CLICK;
808 alias BEHAVIOR_EVENTS.TABLE_ROW_CLICK TABLE_ROW_CLICK;
809 alias BEHAVIOR_EVENTS.TABLE_ROW_DBL_CLICK TABLE_ROW_DBL_CLICK;
810 alias BEHAVIOR_EVENTS.ELEMENT_COLLAPSED ELEMENT_COLLAPSED;
811 alias BEHAVIOR_EVENTS.ELEMENT_EXPANDED ELEMENT_EXPANDED;
812 alias BEHAVIOR_EVENTS.ACTIVATE_CHILD ACTIVATE_CHILD;
813 alias BEHAVIOR_EVENTS.DO_SWITCH_TAB DO_SWITCH_TAB;
814 alias BEHAVIOR_EVENTS.INIT_DATA_VIEW INIT_DATA_VIEW;
815 alias BEHAVIOR_EVENTS.ROWS_DATA_REQUEST ROWS_DATA_REQUEST;
816 alias BEHAVIOR_EVENTS.UI_STATE_CHANGED UI_STATE_CHANGED;
817 alias BEHAVIOR_EVENTS.FIRST_APPLICATION_EVENT_CODE FIRST_APPLICATION_EVENT_CODE;
818
819 enum EVENT_REASON
820 {
821     BY_MOUSE_CLICK = 0,
822     BY_KEY_CLICK = 1,
823     SYNTHESIZED = 2, // synthesized, programmatically generated.
824 };
825
826 alias EVENT_REASON.BY_MOUSE_CLICK BY_MOUSE_CLICK;
827 alias EVENT_REASON.BY_KEY_CLICK BY_KEY_CLICK;
828 alias EVENT_REASON.SYNTHESIZED SYNTHESIZED;
829
830 enum EDIT_CHANGED_REASON
831 {
832     BY_INS_CHAR = 3,    // single char insertion
833     BY_INS_CHARS, // character range insertion, clipboard
834     BY_DEL_CHAR,    // single char deletion
835     BY_DEL_CHARS, // character range deletion (selection)
836 };
837
838 alias EDIT_CHANGED_REASON.BY_INS_CHAR BY_INS_CHAR;
839 alias EDIT_CHANGED_REASON.BY_INS_CHARS BY_INS_CHARS;
840 alias EDIT_CHANGED_REASON.BY_DEL_CHAR BY_DEL_CHAR;
841 alias EDIT_CHANGED_REASON.BY_DEL_CHARS BY_DEL_CHARS;
842
843 struct BEHAVIOR_EVENT_PARAMS
844 {
845     UINT         cmd;               // BEHAVIOR_EVENTS
846     HELEMENT heTarget;   // target element handler
847     HELEMENT he;                 // source element e.g. in SELECTION_CHANGED it is new selected <option>, in MENU_ITEM_CLICK it is menu item (LI) element
848     UINT         reason;         // EVENT_REASON or EDIT_CHANGED_REASON - UI action causing change.
849                          // In case of custom event notifications this may be any
850                          // application specific value.
851 };
852
853 // identifiers of methods currently supported by intrinsic behaviors,
854 // see function HTMLayoutCallMethod
855
856 enum BEHAVIOR_METHOD_IDENTIFIERS
857 {
858     DO_CLICK = 0,
859     GET_TEXT_VALUE = 1,
860     SET_TEXT_VALUE,
861         // p - TEXT_VALUE_PARAMS
862    
863     TEXT_EDIT_GET_SELECTION,
864         // p - TEXT_EDIT_SELECTION_PARAMS
865    
866     TEXT_EDIT_SET_SELECTION,
867         // p - TEXT_EDIT_SELECTION_PARAMS
868    
869     // Replace selection content or insert text at current caret position.
870     // Replaced text will be selected.
871     TEXT_EDIT_REPLACE_SELECTION,
872         // p - TEXT_EDIT_REPLACE_SELECTION_PARAMS
873    
874     // Set value of type="vscrollbar"/"hscrollbar"
875     SCROLL_BAR_GET_VALUE,
876     SCROLL_BAR_SET_VALUE,
877    
878     // get current caret position, it returns rectangle that is relative to origin of the editing element.
879     TEXT_EDIT_GET_CARET_POSITION,
880         // p - TEXT_CARET_POSITION_PARAMS
881    
882     TEXT_EDIT_GET_SELECTION_TEXT, // p - TEXT_SELECTION_PARAMS, OutputStreamProc will receive stream of WCHARs
883     TEXT_EDIT_GET_SELECTION_HTML, // p - TEXT_SELECTION_PARAMS, OutputStreamProc will receive stream of BYTEs - utf8 encoded html fragment.
884
885     XCALL                                            = 0xff, // p - XCALL_PARAMS
886    
887     FIRST_APPLICATION_METHOD_ID = 0x100
888 };
889
890 alias BEHAVIOR_METHOD_IDENTIFIERS.DO_CLICK DO_CLICK;
891 alias BEHAVIOR_METHOD_IDENTIFIERS.GET_TEXT_VALUE GET_TEXT_VALUE;
892 alias BEHAVIOR_METHOD_IDENTIFIERS.SET_TEXT_VALUE SET_TEXT_VALUE;
893 alias BEHAVIOR_METHOD_IDENTIFIERS.TEXT_EDIT_GET_SELECTION TEXT_EDIT_GET_SELECTION;
894 alias BEHAVIOR_METHOD_IDENTIFIERS.TEXT_EDIT_SET_SELECTION TEXT_EDIT_SET_SELECTION;
895 alias BEHAVIOR_METHOD_IDENTIFIERS.TEXT_EDIT_REPLACE_SELECTION TEXT_EDIT_REPLACE_SELECTION;
896 alias BEHAVIOR_METHOD_IDENTIFIERS.SCROLL_BAR_GET_VALUE SCROLL_BAR_GET_VALUE;
897 alias BEHAVIOR_METHOD_IDENTIFIERS.SCROLL_BAR_SET_VALUE SCROLL_BAR_SET_VALUE;
898 alias BEHAVIOR_METHOD_IDENTIFIERS.TEXT_EDIT_GET_CARET_POSITION TEXT_EDIT_GET_CARET_POSITION;
899 alias BEHAVIOR_METHOD_IDENTIFIERS.TEXT_EDIT_GET_SELECTION_TEXT TEXT_EDIT_GET_SELECTION_TEXT;
900 alias BEHAVIOR_METHOD_IDENTIFIERS.TEXT_EDIT_GET_SELECTION_HTML TEXT_EDIT_GET_SELECTION_HTML;
901 alias BEHAVIOR_METHOD_IDENTIFIERS.XCALL XCALL;
902 alias BEHAVIOR_METHOD_IDENTIFIERS.FIRST_APPLICATION_METHOD_ID FIRST_APPLICATION_METHOD_ID;
903
904 struct METHOD_PARAMS
905 {
906     UINT methodID; // see: #BEHAVIOR_METHOD_IDENTIFIERS
907 };
908
909 alias METHOD_PARAMS HMethodParams;
910
911 struct XCALL_PARAMS
912 {
913     METHOD_PARAMS methodparams;
914     LPCSTR  method_name;
915     UINT    argc;
916     JSON_VALUE   *argv;
917     JSON_VALUE   retval;
918
919     METHOD_PARAMS* opCast(){return &methodparams;}
920
921     static XCALL_PARAMS* opCall(char[] name,JSON_VALUE[] params=null)
922     {
923         auto r=new XCALL_PARAMS;
924         r.methodparams.methodID = XCALL;
925         r.method_name=toStringz(name);
926         r.argv=params.ptr;
927         r.argc=params.length;
928         return r;
929     }
930
931     static XCALL_PARAMS* opCall(char[] name,JSON_VALUE *param=null)
932     {
933         auto r=new XCALL_PARAMS;
934         r.methodparams.methodID = XCALL;
935         r.method_name=toStringz(name);
936         r.argv=param;
937         r.argc=1;
938         return r;
939     }
940 };
941
942 alias XCALL_PARAMS HXcall;
943
944 struct TEXT_VALUE_PARAMS
945 {
946     METHOD_PARAMS methodparams;
947     LPCWSTR text;
948     UINT        length;
949
950     METHOD_PARAMS* opCast(){return &methodparams;}
951     char[] toString(){if(length && text) return .toString(text[0..length]); else return null;}
952
953     static TEXT_VALUE_PARAMS* opCall()
954     {
955         auto r=new TEXT_VALUE_PARAMS;
956         r.methodparams.methodID = GET_TEXT_VALUE;
957         return r;
958     }
959
960     static TEXT_VALUE_PARAMS* opCall(char[] text)
961     {
962         auto r=new TEXT_VALUE_PARAMS;
963         r.methodparams.methodID = SET_TEXT_VALUE;
964         if(text.length)
965         {
966             auto str=toString16(text);
967             r.text=str.ptr;
968             r.length=str.length;
969         }
970         return r;
971     }
972 }
973
974 alias TEXT_VALUE_PARAMS HTextValue;
975
976 struct TEXT_EDIT_SELECTION_PARAMS
977 {
978     METHOD_PARAMS methodparams;
979     UINT selection_start;
980     UINT selection_end;
981    
982     METHOD_PARAMS* opCast(){return &methodparams;}
983     UINT start(){return selection_start;}
984     UINT end(){return selection_end;}
985
986     static TEXT_EDIT_SELECTION_PARAMS* opCall()
987     {
988         auto r=new TEXT_EDIT_SELECTION_PARAMS;
989         r.methodparams.methodID = TEXT_EDIT_GET_SELECTION;
990         return r;
991     }
992
993     static TEXT_EDIT_SELECTION_PARAMS* opCall(uint start,uint end)
994     {
995         auto r=new TEXT_EDIT_SELECTION_PARAMS;
996         r.methodparams.methodID = TEXT_EDIT_SET_SELECTION;
997         r.selection_start=start;
998         r.selection_end=end;
999         return r;
1000     }
1001 }
1002
1003 alias TEXT_EDIT_SELECTION_PARAMS HTextEditSelection;
1004
1005 struct TEXT_EDIT_REPLACE_SELECTION_PARAMS
1006 {
1007     METHOD_PARAMS methodparams;
1008     LPCWSTR text;
1009     UINT        text_length;
1010
1011     METHOD_PARAMS* opCast(){return &methodparams;}
1012     char[] toString(){if(text_length && text) return .toString(text[0..text_length]); else return null;}
1013
1014     static TEXT_EDIT_REPLACE_SELECTION_PARAMS* opCall(char[] text)
1015     {
1016         auto r=new TEXT_EDIT_REPLACE_SELECTION_PARAMS;
1017         r.methodparams.methodID = TEXT_EDIT_REPLACE_SELECTION;
1018         if(text.length)
1019         {
1020             auto str=toString16(text);
1021             r.text=str.ptr;
1022             r.text_length=str.length;
1023         }
1024         return r;
1025     }
1026 };
1027
1028 alias TEXT_EDIT_REPLACE_SELECTION_PARAMS HTextEditReplaceSelection;
1029
1030 struct TEXT_CARET_POSITION_PARAMS
1031 {
1032     METHOD_PARAMS methodparams;
1033     INT left;
1034     INT top;
1035     INT width;
1036     INT height;
1037
1038     METHOD_PARAMS* opCast(){return &methodparams;}
1039
1040     static TEXT_CARET_POSITION_PARAMS* opCall()
1041     {
1042         auto r=new TEXT_CARET_POSITION_PARAMS;
1043         r.methodparams.methodID = TEXT_EDIT_GET_CARET_POSITION;
1044         return r;
1045     }
1046 };
1047
1048 alias TEXT_CARET_POSITION_PARAMS HTextCaretPosition;
1049
1050 struct TEXT_SELECTION_PARAMS
1051 {
1052     METHOD_PARAMS methodparams;
1053     OutputStreamProc outs; // output stream
1054
1055     bool html;
1056     char[] string;
1057     wchar[] wstring;
1058
1059     METHOD_PARAMS* opCast(){return &methodparams;}
1060     char[] toString(){if(html) return .toString(wstring); else return string;}
1061
1062     static TEXT_SELECTION_PARAMS* opCall(bool html)
1063     {
1064         auto r=new TEXT_SELECTION_PARAMS;
1065         r.html=html;
1066         r.methodparams.methodID = html? TEXT_EDIT_GET_SELECTION_HTML:TEXT_EDIT_GET_SELECTION_TEXT;
1067         r.outs=&output_stream_proc;
1068         return r;
1069     }
1070
1071     extern(Windows) static BOOL output_stream_proc(TEXT_SELECTION_PARAMS* params, UINT data)
1072     {
1073         if(params.html) params.wstring~=cast(wchar)data;
1074         else params.string~=cast(char)data;
1075         return 1;
1076     }
1077 }
1078
1079 alias TEXT_SELECTION_PARAMS HTextSelection;
1080
1081 alias BOOL function(TEXT_SELECTION_PARAMS* params, UINT data /* BYTE or WCHAR */ ) OutputStreamProc;
1082
1083
1084
1085 struct SCROLLBAR_VALUE_PARAMS
1086 {
1087     METHOD_PARAMS methodparams;
1088     INT      value;
1089     INT      min_value;
1090     INT      max_value;
1091     INT      page_value; // page increment
1092     INT      step_value; // step increment (arrow button click)
1093
1094     METHOD_PARAMS* opCast(){return &methodparams;}
1095     INT pos(){return value;}
1096     INT min(){return min_value;}
1097     INT max(){return max_value;}
1098     INT page(){return page_value;}
1099     INT step(){return step_value;}
1100
1101     static SCROLLBAR_VALUE_PARAMS* opCall()
1102     {
1103         auto r=new SCROLLBAR_VALUE_PARAMS;
1104         r.methodparams.methodID = SCROLL_BAR_GET_VALUE;
1105         return r;
1106     }
1107
1108     static SCROLLBAR_VALUE_PARAMS* opCall(INT value,INT min=0,INT max=0,INT page=0,INT step=0)
1109     {
1110         auto r=new SCROLLBAR_VALUE_PARAMS;
1111         r.methodparams.methodID = SCROLL_BAR_SET_VALUE;
1112         r.value=value;
1113         r.min_value=min;
1114         r.max_value=max;
1115         r.page_value=page;
1116         r.step_value=step;
1117         return r;
1118     }
1119 };
1120
1121 alias SCROLLBAR_VALUE_PARAMS HScrollbarValue;
1122
1123
1124 // see HTMLayoutRequestElementData
1125
1126 struct DATA_ARRIVED_PARAMS
1127 {
1128     HELEMENT  initiator;    // element intiator of HTMLayoutRequestElementData request,
1129     LPCBYTE   data;         // data buffer
1130     UINT      dataSize;     // size of data
1131     UINT      dataType;     // data type passed "as is" from HTMLayoutRequestElementData
1132     UINT      status;       // status = 0 (dataSize == 0) - unknown error.
1133                           // status = 100..505 - http response status, Note: 200 - OK!
1134                           // status > 12000 - wininet error code, see ERROR_INTERNET_*** in wininet.h
1135     LPCWSTR   uri;          // requested url
1136 };
1137
1138
1139 // request to data source to fill the data.
1140 // used by virtual-grid and virtual list
1141 struct DATA_ROWS_PARAMS
1142 {
1143     UINT totalRecords;
1144     UINT firstRecord; // first visible record - 0..totalRecords
1145
1146     UINT firstRowIdx; // idx of the first row in the table,
1147     UINT lastRowIdx;    // idx of the last row in the table.
1148                     // content of these rows has to be updated.
1149 };
1150
1151 ////////////////////////////////////////////////////////////////////////////// notifications
1152
1153 const WM_BEHAVIOR_NOTIFY =(WM_USER + 100);
1154
1155 //---------------------------------------------------------------------
1156 // external behaviors, implemented in /include/behaviors/*.cpp modules
1157 //---------------------------------------------------------------------
1158
1159 const MAX_URL_LENGTH =2048;
1160
1161 // command behavior notification (behavior_command.cpp)
1162 const HLN_COMMAND_CLICK  =(1);
1163 // command behavior is using this to send its "clicks"
1164 struct NMHL_COMMAND_CLICK
1165 {
1166     NMHDR hdr;
1167     WCHAR[MAX_URL_LENGTH] szElementID=void;
1168     HELEMENT he;
1169 };
1170
1171 // hyperlink behavior (behavior_hyperlink.cpp)
1172 const HLN_HYPERLINK          =(2);
1173 // hyperlink behavior is using this to send its "clicks" state
1174
1175 struct NMHL_HYPERLINK
1176 {
1177     enum type { ENTER = 1, LEAVE, CLICK };
1178
1179     NMHDR hdr;
1180     type action;
1181     WCHAR[MAX_URL_LENGTH] szHREF=void;
1182     WCHAR[MAX_URL_LENGTH] szTarget=void;
1183     HELEMENT he;
1184 };
1185
1186 ////////////////////////////////////////////////////////////////////////////// json
1187
1188 class HJson
1189 {
1190     ~this(){mValue.release;}
1191
1192     JSON_VALUE* handle(){return mValue;}
1193     JSON_VALUE* opCast(){return mValue;}
1194
1195     extern(D) char[] toString(){return mValue.toString;} //todo: remove this extern(D)
1196     //JSON_VALUE[] toArray(){return mValue.toArray;}
1197     HJson[] toArray()
1198     {
1199         auto a=mValue.toArray;
1200         HJson[] ret;
1201         ret.length=a.length;
1202         foreach(i,v;a) ret[i]=HJson(&a[i]);
1203         return ret;
1204     }
1205     double toFloat(){return mValue.toFloat;}
1206     long toInt(){return mValue.toInt;}
1207     bool toBool(){return mValue.toBool;}
1208     char[] typename(){return mValue.typename;}
1209     int type(){return mValue.v_type;}
1210
1211     static HJson parse(char[] text,uint mode=0){return HJson(JSON_VALUE.parse(text,mode));}
1212     static HJson opCall(){return HJson(JSON_VALUE());}
1213     static HJson opCall(ubyte[] v){return HJson(JSON_VALUE(v));}
1214     static HJson opCall(char[] v){return HJson(JSON_VALUE(v));}
1215     //static HJson opCall(JSON_VALUE[] v){return HJson(JSON_VALUE(v));}
1216     static HJson opCall(HJson[] v)
1217     {
1218         JSON_VALUE[] vals;
1219         vals.length=v.length;
1220         foreach(i,vv;v) vals[i]=*vv.handle;
1221         return HJson(JSON_VALUE(vals));
1222     }
1223     static HJson opCall(bool v){return HJson(JSON_VALUE(v));}
1224     static HJson opCall(double v){return HJson(JSON_VALUE(v));}
1225     static HJson opCall(__int64 v){return HJson(JSON_VALUE(v));}
1226     static HJson fromAA(K,V)(V[K] v){return HJson(JSON_VALUE.fromAA(v));}
1227     static HJson opCall(JSON_VALUE* value){if(value is null) return null; else return new HJson(value);}
1228
1229 protected:
1230     this(JSON_VALUE* value){if(value is null) throw new Exception("Invalid JSON_VALUE!"); mValue=value;}
1231
1232     JSON_VALUE* mValue;
1233 }
1234
1235 enum VALUETYPE
1236 { 
1237     V_UNDEFINED = 0,    ///< empty
1238     V_BOOL = 1,         ///< bool
1239     V_INT = 2,          ///< int
1240     V_REAL = 3,         ///< double
1241     V_STRING = 4,       ///< string of wchar_t
1242     V_ARRAY = 5,        ///< array of value elements
1243     V_MAP = 6,          ///< map of name/value pairs - simple map
1244     V_BYTES = 7         ///< vector of bytes, a.k.a. blob
1245 };
1246
1247 alias VALUETYPE.V_UNDEFINED V_UNDEFINED;
1248 alias VALUETYPE.V_BOOL V_BOOL;
1249 alias VALUETYPE.V_INT V_INT;
1250 alias VALUETYPE.V_REAL V_REAL;
1251 alias VALUETYPE.V_STRING V_STRING;
1252 alias VALUETYPE.V_ARRAY V_ARRAY;
1253 alias VALUETYPE.V_MAP V_MAP;
1254 alias VALUETYPE.V_BYTES V_BYTES;
1255
1256 private extern(C) alias void function(void*) wiper_t;
1257
1258 align(4) struct HJsonString
1259 {
1260     int refcount;
1261     size_t length;
1262     wiper_t wipe;
1263 }
1264
1265 align(4) struct HJsonArray
1266 {
1267     int refcount;
1268     size_t length;
1269     wiper_t wipe;
1270 }
1271
1272 align(4) struct HJsonMap
1273 {
1274     JSON_VALUE key;
1275     JSON_VALUE val;
1276     HJsonMap* next;
1277     wiper_t wipe;
1278     int refcount;
1279 }
1280
1281 align(4) struct HJsonBytes
1282 {
1283     int refcount;
1284     ubyte* data;
1285     size_t length;    // number of elements used in the buffer
1286     wiper_t wipe;
1287 }
1288
1289 align(4) struct JSON_VALUE
1290 {
1291     VALUETYPE v_type;
1292     union data_slot
1293     {
1294         int i_val;
1295         double r_val;
1296         __int64 l_val;
1297         HJsonString* s_val;
1298         HJsonArray* a_val; // array data
1299         HJsonMap* m_val; // simple map of name/value pairs.
1300         HJsonBytes* b_val; // bytes data
1301     }
1302     data_slot data;
1303
1304     char[] toString()
1305     {
1306         if(v_type==V_STRING)
1307         {
1308             auto str=cast(wchar_t*)(data.s_val+1);
1309             //todo: is this right???
1310             if(data.s_val.length && str[data.s_val.length-1]==0) return .toString(str[0..data.s_val.length-1]);
1311             return .toString(str[0..data.s_val.length]);
1312         }
1313         else if(v_type==V_BYTES) return (cast(char*)(data.b_val+1))[0..data.b_val.length];
1314         else if(v_type==V_UNDEFINED)
1315         {
1316             if(data.l_val!=0) return Int.toString(data.l_val);
1317             else return "undefined";
1318         }
1319         else if(v_type==V_INT) return Int.toString(data.i_val);
1320         else if(v_type==V_BOOL) return data.i_val?"true":"false";
1321         else if(v_type==V_REAL) return Float.toString(data.r_val);
1322         else throw new Exception("Don't know how to convert "~typename~" to string");
1323     }
1324
1325     JSON_VALUE[] toArray()
1326     {
1327         if(v_type==V_ARRAY) return ((cast(JSON_VALUE*)(data.a_val+1))[0..data.a_val.length]);
1328         else throw new Exception("Don't know how to convert "~typename~" to string");
1329     }
1330
1331     double toFloat()
1332     {
1333         if(v_type==V_REAL) return data.r_val;
1334         else if(v_type==V_UNDEFINED && data.l_val!=0) return data.l_val;
1335         else if(v_type==V_INT || v_type==V_BOOL) return data.i_val;
1336         else if(v_type==V_STRING) return Float.toFloat(toString);
1337         else return double.nan;//throw new Exception("Don't know how to convert "~typename~" to float");
1338     }
1339
1340     long toInt()
1341     {
1342         if(v_type==V_UNDEFINED && data.l_val!=0) return data.l_val;
1343         else if(v_type==V_INT || v_type==V_BOOL) return data.i_val;
1344         else if(v_type==V_REAL) return cast(long)data.r_val;
1345         else if(v_type==V_STRING) return Int.toLong(toString);
1346         else throw new Exception("Don't know how to convert "~typename~" to integer");
1347     }
1348
1349     bool toBool()
1350     {
1351         if(v_type==V_UNDEFINED)
1352         {
1353             if(data.l_val!=0) return cast(bool)data.l_val;
1354             else return false;
1355         }
1356         else if(v_type==V_INT || v_type==V_BOOL) return cast(bool)data.i_val;
1357         else if(v_type==V_REAL) return cast(bool)data.r_val;
1358         else if(v_type==V_STRING) return data.s_val.length>0;
1359         else if(v_type==V_BYTES) return data.b_val.length>0;
1360         else throw new Exception("Don't know how to convert "~typename~" to boolean");
1361     }
1362
1363     char[] typename()
1364     {
1365         if(v_type==V_UNDEFINED)
1366         {
1367             if(data.l_val!=0) return "integer";
1368             else return "undefined";
1369         }
1370         else if(v_type==V_BOOL) return "bool";
1371         else if(v_type==V_INT) return "integer";
1372         else if(v_type==V_REAL) return "real";
1373         else if(v_type==V_STRING) return "string";
1374         else if(v_type==V_ARRAY) return "array";
1375         else if(v_type==V_MAP) return "map";
1376         else if(v_type==V_BYTES) return "bytes";
1377         else return null;
1378     }
1379
1380     static JSON_VALUE* parse(char[] text,uint mode=0)
1381     {
1382         auto value=new JSON_VALUE;
1383         auto str16=toString16(text);
1384         if(HTMLayoutParseValue(str16.ptr,str16.length,mode,value)==0)
1385         {
1386             delete value;
1387             return null;
1388         }
1389         return value;
1390     }
1391
1392     static JSON_VALUE* opCall()
1393     {
1394         auto value=new JSON_VALUE;
1395         value.v_type=V_UNDEFINED;
1396         value.data.l_val=0;
1397         return value;
1398     }
1399
1400     static JSON_VALUE* opCall(ubyte[] v)
1401     {
1402         auto value=new JSON_VALUE;
1403         HJsonBytes* r = cast(HJsonBytes*)malloc(HJsonBytes.sizeof + v.length);
1404         r.refcount = 1;
1405         r.length = v.length;
1406         r.wipe = &free;
1407         r.data = cast(ubyte*)(r+1);
1408         value.v_type=V_BYTES;
1409         value.data.b_val=r;
1410         return value;
1411     }
1412
1413     static JSON_VALUE* opCall(char[] v)
1414     {
1415         auto value=new JSON_VALUE;
1416         auto str16=toString16(v);
1417         HJsonString* r = cast(HJsonString*)malloc(HJsonString.sizeof + str16.length*wchar_t.sizeof);
1418         r.refcount = 1;
1419         r.length = str16.length;
1420         r.wipe  = &free;
1421         wcsncpy(cast(wchar_t*)(r + 1),str16.ptr,str16.length);
1422         value.v_type=V_STRING;
1423         value.data.s_val=r;
1424         return value;
1425     }
1426
1427     static JSON_VALUE* opCall(JSON_VALUE[] v)
1428     {
1429         auto value=new JSON_VALUE;
1430         HJsonArray* r = cast(HJsonArray*)malloc(HJsonArray.sizeof + v.length*JSON_VALUE.sizeof);
1431         r.refcount = 1;
1432         r.length = v.length;
1433         r.wipe  = &free;
1434         auto els = cast(JSON_VALUE*)(r+1);
1435         foreach(i,j;v) els[i]=j;
1436         value.data.a_val=r;
1437         value.v_type=V_ARRAY;
1438         return value;
1439     }
1440
1441     static JSON_VALUE* fromAA(K,V)(V[K] v)
1442     {
1443         auto value=new JSON_VALUE;
1444         static if((is(K : char[]) || is(K : int) || is(K : double) || is(K : __int64) || is(K : JSON_VALUE[])) &&
1445         (is(V : char[]) || is(V : int) || is(V : double) || is(V : __int64) || is(V : JSON_VALUE[])))
1446         {
1447             value.v_type=V_MAP;
1448         }
1449         return value;
1450     }
1451
1452     static JSON_VALUE* opCall(bool v)
1453     {
1454         auto value=new JSON_VALUE;
1455         value.v_type=V_BOOL;
1456         value.data.i_val=v;
1457         return value;
1458     }
1459
1460     static JSON_VALUE* opCall(double v)
1461     {
1462         auto value=new JSON_VALUE;
1463         value.v_type=V_REAL;
1464         value.data.r_val=v;
1465         return value;
1466     }
1467
1468     static JSON_VALUE* opCall(__int64 v)
1469     {
1470         auto value=new JSON_VALUE;
1471         if(v<int.min || v>int.max)
1472         {
1473             value.v_type=V_UNDEFINED;
1474             value.data.l_val=v;
1475         }
1476         else
1477         {
1478             value.v_type=V_INT;
1479             value.data.i_val=v;
1480         }
1481         return value;
1482     }
1483
1484     void release()
1485     {
1486         if(v_type==V_STRING)
1487         {
1488              if(--data.s_val.refcount == 0) data.s_val.wipe(data.s_val);
1489         }
1490         else if(v_type==V_BYTES)
1491         {
1492              if(--data.b_val.refcount == 0) data.b_val.wipe(data.b_val);
1493         }
1494         else if(v_type==V_ARRAY)
1495         {
1496             if(--data.a_val.refcount == 0)
1497             {
1498                 auto els = cast(JSON_VALUE*)(data.a_val+1);
1499                 for(size_t i = 0;i<data.a_val.length;++i) els[i].release();
1500                 data.a_val.wipe(data.a_val);
1501             }
1502         }
1503         else if(v_type==V_MAP)
1504         {
1505             if (--data.m_val.refcount == 0)
1506             {
1507                 uint len;
1508                 uint size;
1509                 HJsonMap*[] map;
1510                 auto a=data.m_val;
1511                 while(a)
1512                 {
1513                     if(len==size) map.length=size=size+5;
1514                     map[len++]=a;
1515                     a=a.next;
1516                 }
1517                 for(--len;len>=0;--len) map[len].wipe(map[len]);
1518             }
1519         }
1520         data.l_val=0; v_type=V_UNDEFINED;
1521     }
1522 } 
1523
1524 alias long __int64;
1525
1526 /*struct JSON_VALUE
1527 {
1528     VALUETYPE           v_type;
1529     union data
1530     {
1531         int             i_val;
1532         double          r_val;
1533         __int64         l_val;
1534         void*           s_val;
1535         void*           a_val; // array data
1536         void*           m_val; // simple map of name/value pairs.
1537         void*           b_val; // bytes_data.
1538     }
1539 }*/
1540
1541 ////////////////////////////////////////////////////////////////////////////// dom
1542
1543 alias int HLDOM_RESULT;
1544 alias UINT* LPUINT;
1545 alias BYTE* LPCBYTE;
1546 //alias UINT* UINT_PTR;
1547 //alias INT* INT_PTR;
1548
1549 const HLDOM_OK =0;
1550 const HLDOM_INVALID_HWND =1 ;
1551 const HLDOM_INVALID_HANDLE =2;
1552 const HLDOM_PASSIVE_HANDLE =3;
1553 const HLDOM_INVALID_PARAMETER =4;
1554 const HLDOM_OPERATION_FAILED =5;
1555 const HLDOM_OK_NOT_HANDLED =(-1);
1556
1557 alias LPVOID HELEMENT;
1558
1559 /**DOM range handle.*/
1560 alias LPVOID HRANGE;
1561 struct HPOSITION { HELEMENT he; INT pos; }
1562
1563 enum ELEMENT_AREAS
1564 {
1565     ROOT_RELATIVE = 0x01,            // - or this flag if you want to get HTMLayout window relative coordinates,
1566                                                             //   otherwise it will use nearest windowed container e.g. popup window.
1567     SELF_RELATIVE = 0x02,            // - "or" this flag if you want to get coordinates relative to the origin
1568                                                             //   of element iself.
1569     CONTAINER_RELATIVE = 0x03,  // - position inside immediate container.
1570
1571     CONTENT_BOX = 0x00,  // content (inner) box
1572     PADDING_BOX = 0x10,  // content + paddings
1573     BORDER_BOX  = 0x20,  // content + paddings + border
1574     MARGIN_BOX  = 0x30,  // content + paddings + border + margins
1575    
1576     BACK_IMAGE_AREA = 0x40, // relative to content origin - location of background image (if it set no-repeat)
1577     FORE_IMAGE_AREA = 0x50, // relative to content origin - location of foreground image (if it set no-repeat)
1578
1579     SCROLLABLE_AREA = 0x60,  // scroll_area - scrollable area in content box
1580
1581 };
1582
1583 alias ELEMENT_AREAS.ROOT_RELATIVE ROOT_RELATIVE;
1584 alias ELEMENT_AREAS.SELF_RELATIVE SELF_RELATIVE;
1585 alias ELEMENT_AREAS.CONTAINER_RELATIVE CONTAINER_RELATIVE;
1586 alias ELEMENT_AREAS.CONTENT_BOX CONTENT_BOX;
1587 alias ELEMENT_AREAS.PADDING_BOX PADDING_BOX;
1588 alias ELEMENT_AREAS.BORDER_BOX BORDER_BOX;
1589 alias ELEMENT_AREAS.MARGIN_BOX MARGIN_BOX;
1590 alias ELEMENT_AREAS.BACK_IMAGE_AREA BACK_IMAGE_AREA;
1591 alias ELEMENT_AREAS.FORE_IMAGE_AREA FORE_IMAGE_AREA;
1592 alias ELEMENT_AREAS.SCROLLABLE_AREA SCROLLABLE_AREA;
1593
1594 enum UPDATE_ELEMENT_FLAGS
1595 {
1596     RESET_STYLE_THIS = 0x20,    // reset styles - this may require if you have styles dependent from attributes,
1597     RESET_STYLE_DEEP = 0x10,    // use these flags after SetAttribute then. RESET_STYLE_THIS is faster than RESET_STYLE_DEEP.
1598
1599     MEASURE_INPLACE = 0x0001, // use this flag if you do not expect any dimensional changes - this is faster than REMEASURE
1600     MEASURE_DEEP        = 0x0002, // use this flag if changes of some attributes/content may cause change of dimensions of the element 
1601
1602     REDRAW_NOW = 0x8000,            // invoke UpdateWindow function after applying changes
1603 };
1604
1605 alias UPDATE_ELEMENT_FLAGS.RESET_STYLE_THIS RESET_STYLE_THIS;
1606 alias UPDATE_ELEMENT_FLAGS.RESET_STYLE_DEEP RESET_STYLE_DEEP;
1607 alias UPDATE_ELEMENT_FLAGS.MEASURE_INPLACE MEASURE_INPLACE;
1608 alias UPDATE_ELEMENT_FLAGS.MEASURE_DEEP MEASURE_DEEP;
1609 alias UPDATE_ELEMENT_FLAGS.REDRAW_NOW REDRAW_NOW;
1610
1611
1612 const SIH_REPLACE_CONTENT        =0;
1613 const SIH_INSERT_AT_START        =1;
1614 const SIH_APPEND_AFTER_LAST  =2;
1615
1616 const SOH_REPLACE                        =3;
1617 const SOH_INSERT_BEFORE          =4;
1618 const SOH_INSERT_AFTER              =5;
1619
1620 enum ELEMENT_STATE_BITS
1621 {
1622     STATE_LINK     = 0x0001, // selector :link,    any element having href attribute
1623     STATE_HOVER    = 0x0002, // selector :hover,   element is under the cursor, mouse hover 
1624     STATE_ACTIVE   = 0x0004, // selector :active,  element is activated, e.g. pressed 
1625     STATE_FOCUS    = 0x0008, // selector :focus,   element is in focus 
1626     STATE_VISITED  = 0x0010, // selector :visited, aux flag - not used internally now.
1627     STATE_CURRENT  = 0x0020, // selector :current, current item in collection, e.g. current <option> in <select>
1628     STATE_CHECKED  = 0x0040, // selector :checked, element is checked (or selected), e.g. check box or itme in multiselect
1629     STATE_DISABLED = 0x0080, // selector :disabled, element is disabled, behavior related flag.
1630     STATE_READONLY = 0x0100, // selector :read-only, element is read-only, behavior related flag.
1631     STATE_EXPANDED = 0x0200, // selector :expanded, element is in expanded state - nodes in tree view e.g. <options> in <select>
1632     STATE_COLLAPSED= 0x0400, // selector :collapsed, mutually exclusive with EXPANDED
1633     STATE_INCOMPLETE = 0x0800,      // selector :incomplete, element has images (back/fore/bullet) requested but not delivered.
1634     STATE_ANIMATING  = 0x00001000,  // selector :animating, is currently animating
1635     STATE_FOCUSABLE  = 0x00002000,  // selector :focusable, shall accept focus
1636     STATE_ANCHOR     = 0x00004000,  // selector :anchor, first element in selection (<select miltiple>), STATE_CURRENT is the current.
1637     STATE_SYNTHETIC  = 0x00008000,  // selector :synthetic, synthesized DOM elements - e.g. all missed cells in tables (<td>) are getting this flag
1638     STATE_OWNS_POPUP = 0x00010000,  // selector :owns-popup, anchor(owner) element of visible popup.
1639     STATE_TABFOCUS   = 0x00020000,  // selector :tab-focus, element got focus by tab traversal. engine set it together with :focus.
1640     STATE_EMPTY      = 0x00040000,  // selector :empty - element is empty.
1641     STATE_BUSY       = 0x00080000,  // selector :busy, element is busy. HTMLayoutRequestElementData will set this flag if
1642                                     // external data was requested for the element. When data will be delivered engine will reset this flag on the element.
1643
1644     STATE_DRAG_OVER   = 0x00100000,  // drag over the block that can accept it (so is current drop target). Flag is set for the drop target block. At any given moment of time it can be only one such block.
1645     STATE_DROP_TARGET = 0x00200000,  // active drop target. Multiple elements can have this flag when D&D is active.
1646     STATE_MOVING      = 0x00400000,  // dragging/moving - the flag is set for the moving element (copy of the drag-source).
1647     STATE_COPYING     = 0x00800000,  // dragging/copying - the flag is set for the copying element (copy of the drag-source).
1648     STATE_DRAG_SOURCE = 0x00C00000,  // is set in element that was chosen to drag.
1649
1650     STATE_POPUP      = 0x40000000,    // this element is in popup state and presented to the user - out of flow now
1651     STATE_PRESSED    = 0x04000000,    // pressed - close to active but has wider life span - e.g. in MOUSE_UP it
1652                                       // is still on, so behavior can check it in MOUSE_UP to discover CLICK condition.
1653     STATE_HAS_CHILDREN = 0x02000000,  // has more than one child.   
1654     STATE_HAS_CHILD    = 0x01000000,  // has single child.
1655 }
1656
1657 alias ELEMENT_STATE_BITS.STATE_LINK STATE_LINK;
1658 alias ELEMENT_STATE_BITS.STATE_HOVER STATE_HOVER;
1659 alias ELEMENT_STATE_BITS.STATE_ACTIVE STATE_ACTIVE;
1660 alias ELEMENT_STATE_BITS.STATE_FOCUS STATE_FOCUS;
1661 alias ELEMENT_STATE_BITS.STATE_VISITED STATE_VISITED;
1662 alias ELEMENT_STATE_BITS.STATE_CURRENT STATE_CURRENT;
1663 alias ELEMENT_STATE_BITS.STATE_CHECKED STATE_CHECKED;
1664 alias ELEMENT_STATE_BITS.STATE_DISABLED STATE_DISABLED;
1665 alias ELEMENT_STATE_BITS.STATE_READONLY STATE_READONLY;
1666 alias ELEMENT_STATE_BITS.STATE_EXPANDED STATE_EXPANDED;
1667 alias ELEMENT_STATE_BITS.STATE_COLLAPSED STATE_COLLAPSED;
1668 alias ELEMENT_STATE_BITS.STATE_INCOMPLETE STATE_INCOMPLETE;
1669 alias ELEMENT_STATE_BITS.STATE_ANIMATING STATE_ANIMATING;
1670 alias ELEMENT_STATE_BITS.STATE_FOCUSABLE STATE_FOCUSABLE;
1671 alias ELEMENT_STATE_BITS.STATE_ANCHOR STATE_ANCHOR;
1672 alias ELEMENT_STATE_BITS.STATE_SYNTHETIC STATE_SYNTHETIC;
1673 alias ELEMENT_STATE_BITS.STATE_OWNS_POPUP STATE_OWNS_POPUP;
1674 alias ELEMENT_STATE_BITS.STATE_TABFOCUS STATE_TABFOCUS;
1675 alias ELEMENT_STATE_BITS.STATE_EMPTY STATE_EMPTY;
1676 alias ELEMENT_STATE_BITS.STATE_BUSY STATE_BUSY;
1677 alias ELEMENT_STATE_BITS.STATE_DRAG_OVER STATE_DRAG_OVER;
1678 alias ELEMENT_STATE_BITS.STATE_DROP_TARGET STATE_DROP_TARGET;
1679 alias ELEMENT_STATE_BITS.STATE_MOVING STATE_MOVING;
1680 alias ELEMENT_STATE_BITS.STATE_COPYING STATE_COPYING;
1681 alias ELEMENT_STATE_BITS.STATE_DRAG_SOURCE STATE_DRAG_SOURCE;
1682 alias ELEMENT_STATE_BITS.STATE_POPUP STATE_POPUP;
1683 alias ELEMENT_STATE_BITS.STATE_PRESSED STATE_PRESSED;
1684 alias ELEMENT_STATE_BITS.STATE_HAS_CHILDREN STATE_HAS_CHILDREN;
1685 alias ELEMENT_STATE_BITS.STATE_HAS_CHILD STATE_HAS_CHILD;
1686
1687 enum REQUEST_TYPE
1688 {
1689     GET_ASYNC,  // async GET
1690     POST_ASYNC, // async POST
1691     GET_SYNC,    // synchronous GET
1692     POST_SYNC    // synchronous POST
1693 };
1694
1695 alias REQUEST_TYPE.GET_ASYNC GET_ASYNC;
1696 alias REQUEST_TYPE.POST_ASYNC POST_ASYNC;
1697 alias REQUEST_TYPE.GET_SYNC GET_SYNC;
1698 alias REQUEST_TYPE.POST_SYNC POST_SYNC;
1699
1700 struct REQUEST_PARAM { LPCWSTR name; LPCWSTR value; };
1701
1702 enum CTL_TYPE
1703 {
1704         CTL_NO,                          ///< This dom element has no behavior at all.
1705         CTL_UNKNOWN = 1,            ///< This dom element has behavior but its type is unknown.
1706         CTL_EDIT,                        ///< Single line edit box.
1707         CTL_NUMERIC,                    ///< Numeric input with optional spin buttons.
1708         CTL_BUTTON,                  ///< Command button.
1709         CTL_CHECKBOX,                ///< CheckBox (button).
1710         CTL_RADIO,                      ///< OptionBox (button).
1711         CTL_SELECT_SINGLE,      ///< Single select, ListBox or TreeView.
1712         CTL_SELECT_MULTIPLE,    ///< Multiselectable select, ListBox or TreeView.
1713         CTL_DD_SELECT,              ///< Dropdown single select.
1714         CTL_TEXTAREA,                ///< Multiline TextBox.
1715         CTL_HTMLAREA,                ///< WYSIWYG HTML editor.
1716         CTL_PASSWORD,                ///< Password input element.
1717         CTL_PROGRESS,                ///< Progress element.
1718         CTL_SLIDER,                  ///< Slider input element.
1719         CTL_DECIMAL,                    ///< Decimal number input element.
1720         CTL_CURRENCY,                ///< Currency input element.
1721         CTL_SCROLLBAR,
1722        
1723         CTL_HYPERLINK,
1724        
1725         CTL_MENUBAR,
1726         CTL_MENU,
1727         CTL_MENUBUTTON,
1728
1729         CTL_CALENDAR,
1730         CTL_DATE,
1731         CTL_TIME,
1732        
1733         CTL_FRAME,
1734         CTL_FRAMESET,
1735
1736         CTL_GRAPHICS,
1737         CTL_SPRITE,
1738
1739         CTL_LIST,
1740         CTL_RICHTEXT,
1741         CTL_TOOLTIP,
1742
1743         CTL_HIDDEN,
1744 };
1745
1746 alias CTL_TYPE.CTL_NO CTL_NO;
1747 alias CTL_TYPE.CTL_UNKNOWN  TL_UNKNOWN;
1748 alias CTL_TYPE.CTL_EDIT CTL_EDIT;
1749 alias CTL_TYPE.CTL_NUMERIC CTL_NUMERIC;
1750 alias CTL_TYPE.CTL_BUTTON CTL_BUTTON;
1751 alias CTL_TYPE.CTL_CHECKBOX CTL_CHECKBOX;
1752 alias CTL_TYPE.CTL_RADIO CTL_RADIO;
1753 alias CTL_TYPE.CTL_SELECT_SINGLE CTL_SELECT_SINGLE;
1754 alias CTL_TYPE.CTL_SELECT_MULTIPLE CTL_SELECT_MULTIPLE;
1755 alias CTL_TYPE.CTL_DD_SELECT CTL_DD_SELECT;
1756 alias CTL_TYPE.CTL_TEXTAREA CTL_TEXTAREA;
1757 alias CTL_TYPE.CTL_HTMLAREA CTL_HTMLAREA;
1758 alias CTL_TYPE.CTL_PASSWORD CTL_PASSWORD;
1759 alias CTL_TYPE.CTL_PROGRESS CTL_PROGRESS;
1760 alias CTL_TYPE.CTL_SLIDER CTL_SLIDER;
1761 alias CTL_TYPE.CTL_DECIMAL CTL_DECIMAL;
1762 alias CTL_TYPE.CTL_CURRENCY CTL_CURRENCY;
1763 alias CTL_TYPE.CTL_SCROLLBAR CTL_SCROLLBAR;
1764 alias CTL_TYPE.CTL_HYPERLINK CTL_HYPERLINK;
1765 alias CTL_TYPE.CTL_MENUBAR CTL_MENUBAR;
1766 alias CTL_TYPE.CTL_MENU CTL_MENU;
1767 alias CTL_TYPE.CTL_MENUBUTTON CTL_MENUBUTTON;
1768 alias CTL_TYPE.CTL_CALENDAR CTL_CALENDAR;
1769 alias CTL_TYPE.CTL_DATE CTL_DATE;
1770 alias CTL_TYPE.CTL_TIME CTL_TIME;
1771 alias CTL_TYPE.CTL_FRAME CTL_FRAME;
1772 alias CTL_TYPE.CTL_FRAMESET CTL_FRAMESET;
1773 alias CTL_TYPE.CTL_GRAPHICS CTL_GRAPHICS;
1774 alias CTL_TYPE.CTL_SPRITE CTL_SPRITE;
1775 alias CTL_TYPE.CTL_LIST CTL_LIST;
1776 alias CTL_TYPE.CTL_RICHTEXT CTL_RICHTEXT;
1777 alias CTL_TYPE.CTL_TOOLTIP CTL_TOOLTIP;
1778 alias CTL_TYPE.CTL_HIDDEN CTL_HIDDEN;
1779
1780 struct HTMLayoutCSSRuleDef
1781 {
1782     INT         rule_type;      /**< 0 - css rule,
1783                                                             1 - inline style attribute (selector is text of @style),
1784                                                             2 - element has styles defined by HTMLayoutSetStyleAttribute */
1785     LPCSTR   file_url;       /**< url of the file where this rule is defined */
1786     INT         file_line_no; /**< line number in the file of rule's selector, -1 if unknown */
1787     LPCWSTR selector;        /**< text of selector */
1788 };
1789
1790 enum ADVANCE_TO
1791 {
1792     GO_FIRST = 0,
1793     GO_LAST = 1,
1794     GO_NEXT = 2,
1795     GO_PREV = 3,
1796     GO_NEXT_CHAR    = 4,
1797     GO_PREV_CHAR    = 5,
1798 };
1799
1800 alias ADVANCE_TO.GO_FIRST GO_FIRST;
1801 alias ADVANCE_TO.GO_LAST GO_LAST;
1802 alias ADVANCE_TO.GO_NEXT GO_NEXT;
1803 alias ADVANCE_TO.GO_PREV GO_PREV;
1804 alias ADVANCE_TO.GO_NEXT_CHAR GO_NEXT_CHAR;
1805 alias ADVANCE_TO.GO_PREV_CHAR GO_PREV_CHAR;
1806
1807 alias BOOL function( HELEMENT he, LPVOID param ) HTMLayoutElementCallback;
1808 alias BOOL function(LPVOID tag, HELEMENT he, UINT evtg, LPVOID prms ) ElementEventProc;
1809 alias ElementEventProc LPELEMENT_EVENT_PROC;
1810 alias INT function( HELEMENT he1, HELEMENT he2, LPVOID param ) ELEMENT_COMPARATOR;
1811 alias BOOL function( LPVOID p, HELEMENT he, int pos, int postype, WCHAR code ) HTMLayoutEnumerationCallback;
1812
1813 alias HLDOM_RESULT function (HELEMENT he, LPRECT p_location, UINT areas /*ELEMENT_AREAS*/) HTMLayoutGetElementLocation_t;
1814 HTMLayoutGetElementLocation_t HTMLayoutGetElementLocation;
1815 alias HLDOM_RESULT function (HELEMENT he) HTMLayout_UseElement_t;
1816 HTMLayout_UseElement_t HTMLayout_UseElement;
1817 alias HLDOM_RESULT function (HELEMENT he) HTMLayout_UnuseElement_t;
1818 HTMLayout_UnuseElement_t HTMLayout_UnuseElement;
1819 alias HLDOM_RESULT function (HWND hwnd, HELEMENT *phe) HTMLayoutGetRootElement_t;
1820 HTMLayoutGetRootElement_t HTMLayoutGetRootElement;
1821 alias HLDOM_RESULT function (HWND hwnd, HELEMENT *phe) HTMLayoutGetFocusElement_t;
1822 HTMLayoutGetFocusElement_t HTMLayoutGetFocusElement;
1823 alias HLDOM_RESULT function (HWND hwnd, POINT pt, HELEMENT *phe) HTMLayoutFindElement_t;
1824 HTMLayoutFindElement_t HTMLayoutFindElement;
1825 alias HLDOM_RESULT function (HELEMENT he, UINT *count) HTMLayoutGetChildrenCount_t;
1826 HTMLayoutGetChildrenCount_t HTMLayoutGetChildrenCount;
1827 alias HLDOM_RESULT function (HELEMENT he, UINT n, HELEMENT *phe) HTMLayoutGetNthChild_t;
1828 HTMLayoutGetNthChild_t HTMLayoutGetNthChild;
1829 alias HLDOM_RESULT function (HELEMENT he, HELEMENT *p_parent_he) HTMLayoutGetParentElement_t;
1830 HTMLayoutGetParentElement_t HTMLayoutGetParentElement;
1831 alias HLDOM_RESULT function (HELEMENT he, LPWSTR characters, LPUINT length) HTMLayoutGetElementText_t;
1832 HTMLayoutGetElementText_t HTMLayoutGetElementText;
1833 alias HLDOM_RESULT function (HELEMENT he, LPBYTE *utf8bytes, BOOL outer) HTMLayoutGetElementHtml_t;
1834 HTMLayoutGetElementHtml_t HTMLayoutGetElementHtml;
1835 alias HLDOM_RESULT function (HELEMENT he, LPBYTE *utf8bytes) HTMLayoutGetElementInnerText_t;
1836 HTMLayoutGetElementInnerText_t HTMLayoutGetElementInnerText;
1837 alias HLDOM_RESULT function (HELEMENT he, LPCBYTE utf8bytes, UINT length) HTMLayoutSetElementInnerText_t;
1838 HTMLayoutSetElementInnerText_t HTMLayoutSetElementInnerText;
1839 alias HLDOM_RESULT function (HELEMENT he, LPWSTR *utf16words) HTMLayoutGetElementInnerText16_t;
1840 HTMLayoutGetElementInnerText16_t HTMLayoutGetElementInnerText16;
1841 alias HLDOM_RESULT function (HELEMENT he, LPCWSTR utf16words, UINT length) HTMLayoutSetElementInnerText16_t;
1842 HTMLayoutSetElementInnerText16_t HTMLayoutSetElementInnerText16;
1843 alias HLDOM_RESULT function (HELEMENT he, LPUINT p_count) HTMLayoutGetAttributeCount_t;
1844 HTMLayoutGetAttributeCount_t HTMLayoutGetAttributeCount;
1845 alias HLDOM_RESULT function (HELEMENT he, UINT n, LPCSTR *p_name, LPCWSTR *p_value) HTMLayoutGetNthAttribute_t;
1846 HTMLayoutGetNthAttribute_t HTMLayoutGetNthAttribute;
1847 alias HLDOM_RESULT function (HELEMENT he, LPCSTR name, LPCWSTR *p_value) HTMLayoutGetAttributeByName_t;
1848 HTMLayoutGetAttributeByName_t HTMLayoutGetAttributeByName;
1849 alias HLDOM_RESULT function (HELEMENT he, LPCSTR name, LPCWSTR value) HTMLayoutSetAttributeByName_t;
1850 HTMLayoutSetAttributeByName_t HTMLayoutSetAttributeByName;
1851 alias HLDOM_RESULT function (HELEMENT he) HTMLayoutClearAttributes_t;
1852 HTMLayoutClearAttributes_t HTMLayoutClearAttributes;
1853 alias HLDOM_RESULT function (HELEMENT he, LPUINT p_index) HTMLayoutGetElementIndex_t;
1854 HTMLayoutGetElementIndex_t HTMLayoutGetElementIndex;
1855 alias HLDOM_RESULT function (HELEMENT he, LPCSTR *p_type) HTMLayoutGetElementType_t;
1856 HTMLayoutGetElementType_t HTMLayoutGetElementType;
1857 alias HLDOM_RESULT function (HELEMENT he, LPCSTR name, LPCWSTR *p_value) HTMLayoutGetStyleAttribute_t;
1858 HTMLayoutGetStyleAttribute_t HTMLayoutGetStyleAttribute;
1859 alias HLDOM_RESULT function (HELEMENT he, LPCSTR name, LPCWSTR value) HTMLayoutSetStyleAttribute_t;
1860 HTMLayoutSetStyleAttribute_t HTMLayoutSetStyleAttribute;
1861 alias HLDOM_RESULT function (HELEMENT he, BOOL renderNow) HTMLayoutUpdateElement_t;
1862 HTMLayoutUpdateElement_t HTMLayoutUpdateElement;
1863 alias HLDOM_RESULT function (HELEMENT he, UINT flags) HTMLayoutUpdateElementEx_t;
1864 HTMLayoutUpdateElementEx_t HTMLayoutUpdateElementEx;
1865 alias HLDOM_RESULT function (HELEMENT he) HTMLayoutSetCapture_t;
1866 HTMLayoutSetCapture_t HTMLayoutSetCapture;
1867 alias HLDOM_RESULT function (HELEMENT he, HWND *p_hwnd, BOOL rootWindow) HTMLayoutGetElementHwnd_t;
1868 HTMLayoutGetElementHwnd_t HTMLayoutGetElementHwnd;
1869 alias HLDOM_RESULT function (HELEMENT he, LPWSTR szUrlBuffer, DWORD UrlBufferSize) HTMLayoutCombineURL_t;
1870 HTMLayoutCombineURL_t HTMLayoutCombineURL;
1871 alias HLDOM_RESULT function (HELEMENT he, LPCSTR tagName, LPCSTR attributeName, LPCWSTR attributeValue, HTMLayoutElementCallback callback, LPVOID param, DWORD depth) HTMLayoutVisitElements_t;
1872 HTMLayoutVisitElements_t HTMLayoutVisitElements;
1873 alias HLDOM_RESULT function (HELEMENT he, LPCSTR CSS_selectors, HTMLayoutElementCallback callback, LPVOID param) HTMLayoutSelectElements_t;
1874 HTMLayoutSelectElements_t HTMLayoutSelectElements;
1875 alias HLDOM_RESULT function (HELEMENT he, LPCSTR selector, UINT depth, HELEMENT *heFound) HTMLayoutSelectParent_t;
1876 HTMLayoutSelectParent_t HTMLayoutSelectParent;
1877 alias HLDOM_RESULT function (HELEMENT he, LPCBYTE html, DWORD htmlLength, UINT where) HTMLayoutSetElementHtml_t;
1878 HTMLayoutSetElementHtml_t HTMLayoutSetElementHtml;
1879 alias HLDOM_RESULT function (HELEMENT he) HTMLayoutDeleteElement_t;
1880 HTMLayoutDeleteElement_t HTMLayoutDeleteElement;
1881 alias HLDOM_RESULT function (HELEMENT he, UINT *puid) HTMLayoutGetElementUID_t;
1882 HTMLayoutGetElementUID_t HTMLayoutGetElementUID;
1883 alias HLDOM_RESULT function (HWND hwnd, UINT uid, HELEMENT *phe) HTMLayoutGetElementByUID_t;
1884 HTMLayoutGetElementByUID_t HTMLayoutGetElementByUID;
1885 alias HLDOM_RESULT function (HELEMENT hePopup, HELEMENT heAnchor, UINT placement) HTMLayoutShowPopup_t;
1886 HTMLayoutShowPopup_t HTMLayoutShowPopup;
1887 alias HLDOM_RESULT function (HELEMENT hePopup, POINT pos, BOOL animate) HTMLayoutShowPopupAt_t;
1888 HTMLayoutShowPopupAt_t HTMLayoutShowPopupAt;
1889 alias HLDOM_RESULT function (HELEMENT he) HTMLayoutHidePopup_t;
1890 HTMLayoutHidePopup_t HTMLayoutHidePopup;
1891 alias HLDOM_RESULT function (HELEMENT he, UINT *pstateBits) HTMLayoutGetElementState_t;
1892 HTMLayoutGetElementState_t HTMLayoutGetElementState;
1893 alias HLDOM_RESULT function( HELEMENT he, UINT stateBitsToSet, UINT stateBitsToClear, BOOL updateView) HTMLayoutSetElementState_t;
1894 HTMLayoutSetElementState_t HTMLayoutSetElementState;
1895 alias HLDOM_RESULT function (LPCSTR tagname, LPCWSTR textOrNull, HELEMENT *phe) HTMLayoutCreateElement_t;
1896 HTMLayoutCreateElement_t HTMLayoutCreateElement;
1897 alias HLDOM_RESULT function (HELEMENT he, HELEMENT *phe) HTMLayoutCloneElement_t;
1898 HTMLayoutCloneElement_t HTMLayoutCloneElement;
1899 alias HLDOM_RESULT function (HELEMENT he, HELEMENT hparent, UINT index) HTMLayoutInsertElement_t;
1900 HTMLayoutInsertElement_t HTMLayoutInsertElement;
1901 alias HLDOM_RESULT function (HELEMENT he) HTMLayoutDetachElement_t;
1902 HTMLayoutDetachElement_t HTMLayoutDetachElement;
1903 alias HLDOM_RESULT function (HELEMENT he, UINT milliseconds) HTMLayoutSetTimer_t;
1904 HTMLayoutSetTimer_t HTMLayoutSetTimer;
1905 alias HLDOM_RESULT function (HELEMENT he, LPELEMENT_EVENT_PROC pep, LPVOID tag) HTMLayoutAttachEventHandler_t;
1906 HTMLayoutAttachEventHandler_t HTMLayoutAttachEventHandler;
1907 alias HLDOM_RESULT function (HELEMENT he, LPELEMENT_EVENT_PROC pep, LPVOID tag, UINT subscription) HTMLayoutAttachEventHandlerEx_t;
1908 HTMLayoutAttachEventHandlerEx_t HTMLayoutAttachEventHandlerEx;
1909 alias HLDOM_RESULT function (HWND hwndLayout, LPELEMENT_EVENT_PROC pep, LPVOID tag, UINT subscription) HTMLayoutWindowAttachEventHandler_t;
1910 HTMLayoutWindowAttachEventHandler_t HTMLayoutWindowAttachEventHandler;
1911 alias HLDOM_RESULT function (HELEMENT he, UINT appEventCode, HELEMENT heSource, UINT_PTR reason, BOOL *handled) HTMLayoutSendEvent_t;
1912 HTMLayoutSendEvent_t HTMLayoutSendEvent;
1913 alias HLDOM_RESULT function (HELEMENT he, UINT appEventCode, HELEMENT heSource, UINT reason) HTMLayoutPostEvent_t;
1914 HTMLayoutPostEvent_t HTMLayoutPostEvent;
1915 alias HLDOM_RESULT function (HELEMENT he, METHOD_PARAMS *params) HTMLayoutCallBehaviorMethod_t;
1916 HTMLayoutCallBehaviorMethod_t HTMLayoutCallBehaviorMethod;
1917 alias HLDOM_RESULT function (HELEMENT he, LPCWSTR url, UINT dataType, HELEMENT initiator) HTMLayoutRequestElementData_t;
1918 HTMLayoutRequestElementData_t HTMLayoutRequestElementData;
1919 alias HLDOM_RESULT function (HELEMENT he, LPPOINT scrollPos, LPRECT viewRect, LPSIZE contentSize) HTMLayoutGetScrollInfo_t;
1920 HTMLayoutGetScrollInfo_t HTMLayoutGetScrollInfo;
1921 alias HLDOM_RESULT function (HELEMENT he, POINT scrollPos, BOOL smooth) HTMLayoutSetScrollPos_t;
1922 HTMLayoutSetScrollPos_t HTMLayoutSetScrollPos;
1923 alias HLDOM_RESULT function (HELEMENT he, BOOL *pVisible) HTMLayoutIsElementVisible_t;
1924 HTMLayoutIsElementVisible_t HTMLayoutIsElementVisible;
1925 alias HLDOM_RESULT function (HELEMENT he, BOOL *pEnabled) HTMLayoutIsElementEnabled_t;
1926 HTMLayoutIsElementEnabled_t HTMLayoutIsElementEnabled;
1927 alias HLDOM_RESULT function (HELEMENT he, UINT firstIndex, UINT lastIndex, ELEMENT_COMPARATOR cmpFunc, LPVOID cmpFuncParam) HTMLayoutSortElements_t;
1928 HTMLayoutSortElements_t HTMLayoutSortElements;
1929 alias HLDOM_RESULT function (HELEMENT he1, HELEMENT he2) HTMLayoutSwapElements_t;
1930 HTMLayoutSwapElements_t HTMLayoutSwapElements;
1931 alias HLDOM_RESULT function (UINT evt, LPVOID eventCtlStruct, LPBOOL bOutProcessed) HTMLayoutTraverseUIEvent_t;
1932 HTMLayoutTraverseUIEvent_t HTMLayoutTraverseUIEvent;
1933 alias HLDOM_RESULT function (HELEMENT he, UINT *pType) HTMLayoutControlGetType_t;
1934 HTMLayoutControlGetType_t HTMLayoutControlGetType;
1935 alias HLDOM_RESULT function (HELEMENT he, JSON_VALUE *pVal) HTMLayoutControlGetValue_t;
1936 HTMLayoutControlGetValue_t HTMLayoutControlGetValue;
1937 alias HLDOM_RESULT function (HELEMENT he, JSON_VALUE *pVal) HTMLayoutControlSetValue_t;
1938 HTMLayoutControlSetValue_t HTMLayoutControlSetValue;
1939 alias HLDOM_RESULT function (HELEMENT he, HTMLayoutEnumerationCallback pcb, LPVOID p, BOOL forward) HTMLayoutEnumerate_t;
1940 HTMLayoutEnumerate_t HTMLayoutEnumerate;
1941 alias HLDOM_RESULT function (HELEMENT he, int pos, RECT *outRect) HTMLayoutGetCharacterRect_t;
1942 HTMLayoutGetCharacterRect_t HTMLayoutGetCharacterRect;
1943
1944 ////////////////////////////////////////////////////////////////////////////// htmlaytout
1945
1946 const HLN_CREATE_CONTROL    =0xAFF + 0x01 ;
1947 const HLN_LOAD_DATA          =0xAFF + 0x02;
1948 const HLN_CONTROL_CREATED =0xAFF + 0x03 ;
1949 const HLN_DATA_LOADED        =0xAFF + 0x04;
1950 const HLN_DOCUMENT_COMPLETE =0xAFF + 0x05 ;
1951 const HLN_UPDATE_UI          =0xAFF + 0x06;
1952 const HLN_DESTROY_CONTROL =0xAFF + 0x07;
1953 const HLN_ATTACH_BEHAVIOR =0xAFF + 0x08;
1954 const HLN_BEHAVIOR_CHANGED =0xAFF + 0x09;
1955 const HLN_DIALOG_CREATED =0xAFF + 0x10;
1956 const HLN_DIALOG_CLOSE_RQ =0xAFF + 0x11;
1957 const HLN_DOCUMENT_LOADED =0xAFF + 0x0B;
1958
1959 const LOAD_OK   =0;
1960 const LOAD_DISCARD          =1;
1961
1962 alias LRESULT function(UINT uMsg, WPARAM wParam, LPARAM lParam, LPVOID vParam) HTMLAYOUT_NOTIFY;
1963 alias HTMLAYOUT_NOTIFY LPHTMLAYOUT_NOTIFY;
1964
1965 const HWND HWND_TRY_DEFAULT         =null;
1966 const HWND HWND_DISCARD_CREATION =cast(HWND)1;
1967
1968 struct NMHL_CREATE_CONTROL
1969 {
1970         NMHDR        hdr;                           /**< Default WM_NOTIFY header */
1971
1972         HELEMENT    helement;                /**< [in] DOM element.*/
1973         HWND            inHwndParent;        /**< [in] HWND of the HTMLayout window.*/
1974
1975         HWND            outControlHwnd;  /**< [out] HWND of control created or #HWND_TRY_DEFAULT or HWND_DISCARD_CREATION.*/
1976         DWORD        reserved1;
1977         DWORD        reserved2;
1978
1979 }
1980
1981 alias NMHL_CREATE_CONTROL* LPNMHL_CREATE_CONTROL;
1982
1983 struct NMHL_DESTROY_CONTROL
1984 {
1985     /**Default WM_NOTIFY header.
1986      **/
1987         NMHDR        hdr;                           
1988     /**[in] DOM element.
1989      **/
1990         HELEMENT    helement;
1991         HWND            inoutControlHwnd;
1992     /**<[in/out] HWND of child to be destroyed.*/
1993         DWORD        reserved1;
1994
1995 }
1996
1997 alias NMHL_DESTROY_CONTROL* LPNMHL_DESTROY_CONTROL;
1998
1999 struct NMHL_LOAD_DATA
2000 {
2001         NMHDR       hdr;                            /**< Default WM_NOTIFY header.*/
2002        
2003         LPCWSTR uri;                            /**< [in] Zero terminated string, fully qualified uri, for example "http://server/folder/file.ext".*/
2004        
2005         LPVOID   outData;                   /**< [out] pointer to loaded data .*/
2006         DWORD       outDataSize;            /**< [out] loaded data size.*/
2007         UINT         dataType;               /**< [in] HTMLayoutResourceType */
2008
2009         HELEMENT principal;             /**< [in] element requested download, in case of context_menu:url( menu-url )
2010                                                                                  it is an element for which context menu was requested */
2011         HELEMENT initiator;             /**< N/A */
2012
2013 }
2014
2015 alias NMHL_LOAD_DATA* LPNMHL_LOAD_DATA;
2016
2017 struct NMHL_DATA_LOADED
2018 {
2019         NMHDR       hdr;                            /**< Default WM_NOTIFY header.*/
2020        
2021         LPCWSTR uri;                            /**< [in] zero terminated string, fully qualified uri, for example "http://server/folder/file.ext".*/
2022         LPCBYTE data;                        /**< [in] pointer to loaded data.*/
2023         DWORD       dataSize;                /**< [in] loaded data size (in bytes). dataSize == 0 - incompatible data type, e.g. requested image but HTML returned */
2024         UINT         dataType;               /**< [in] HTMLayoutResourceType */
2025         UINT         status;                     /**< [in]
2026                                                                                  status = 0 (dataSize == 0) - unknown error.
2027                                                                                  status = 100..505 - http response status, Note: 200 - OK!
2028                                                                                  status > 12000 - wininet error code, see ERROR_INTERNET_*** in wininet.h
2029                                                                  */ 
2030
2031 }
2032
2033 alias NMHL_DATA_LOADED* LPNMHL_DATA_LOADED;
2034
2035 struct HTMLAYOUT_BEHAVIOR;
2036
2037 struct NMHL_ATTACH_BEHAVIOR
2038 {
2039         NMHDR       hdr;                            /**< Default WM_NOTIFY header.*/
2040        
2041         HELEMENT element;                   /**< [in] target DOM element handle*/
2042         LPCSTR   behaviorName;       /**< [in] zero terminated string, string appears as value of CSS behavior:"???" attribute.*/
2043        
2044         ElementEventProc elementProc;       /**< [out] pointer to ElementEventProc function.*/
2045         LPVOID                      elementTag;      /**< [out] tag value, passed as is into pointer ElementEventProc function.*/
2046         UINT                            elementEvents;  /**< [out] EVENT_GROUPS bit flags, event groups elementProc subscribed to. */
2047
2048 }
2049
2050 alias NMHL_ATTACH_BEHAVIOR* LPNMHL_ATTACH_BEHAVIOR;
2051
2052 struct NMHL_BEHAVIOR_CHANGED
2053 {
2054         NMHDR       hdr;                            /**< Default WM_NOTIFY header.*/
2055      
2056         HELEMENT element;                   /**< [in] target DOM element handle*/
2057         LPCSTR   oldNames;               /**< [in] zero terminated string, whitespace separated list of old behaviors.*/
2058         LPCSTR   newNames;               /**< [in] zero terminated string, whitespace separated list of new behaviors that the element just got.*/
2059
2060 }
2061
2062 alias NMHL_BEHAVIOR_CHANGED* LPNMHL_BEHAVIOR_CHANGED;
2063
2064 struct NMHL_DIALOG_CLOSE_RQ
2065 {
2066         NMHDR    hdr;                           /**< Default WM_NOTIFY header.*/
2067         BOOL        outCancel;              /**< [out] set it to non-zero for canceling close request.*/
2068
2069 }
2070
2071 alias NMHL_DIALOG_CLOSE_RQ* LPNMHL_DIALOG_CLOSE_RQ;
2072
2073 enum HTMLayoutResourceType
2074 { 
2075     HLRT_DATA_HTML = 0,
2076     HLRT_DATA_IMAGE = 1,
2077     HLRT_DATA_STYLE = 2,
2078     HLRT_DATA_CURSOR = 3,
2079     HLRT_DATA_SCRIPT = 4,
2080 };
2081
2082 alias HTMLayoutResourceType.HLRT_DATA_HTML HLRT_DATA_HTML;
2083 alias HTMLayoutResourceType.HLRT_DATA_IMAGE HLRT_DATA_IMAGE;
2084 alias HTMLayoutResourceType.HLRT_DATA_STYLE HLRT_DATA_STYLE;
2085 alias HTMLayoutResourceType.HLRT_DATA_CURSOR HLRT_DATA_CURSOR;
2086 alias HTMLayoutResourceType.HLRT_DATA_SCRIPT HLRT_DATA_SCRIPT;
2087
2088 enum HTMLayoutModes
2089 {
2090     HLM_LAYOUT_ONLY = 0,                 /**< layout manager and renderer.*/
2091     HLM_SHOW_SELECTION = 1,         /**< layout manager and renderer + text selection and WM_COPY.*/
2092 };
2093
2094 alias HTMLayoutModes.HLM_LAYOUT_ONLY HLM_LAYOUT_ONLY;
2095 alias HTMLayoutModes.HLM_SHOW_SELECTION HLM_SHOW_SELECTION;
2096
2097 alias BOOL function(LPCWSTR resourceUri, LPCSTR resourceType, LPCBYTE imageData, DWORD imageDataSize) HTMLAYOUT_CALLBACK_RES;
2098
2099 enum ELEMENT_MODEL
2100 {
2101     DATA_ELEMENT = 0,                    // data element, invisible by default - display:none.
2102     INLINE_TEXT_ELEMENT = 1,        // inline text, can contain text, example: <em>. Will get style display:inline.
2103     INLINE_BLOCK_ELEMENT = 2,    // inline element, contains blocks inside, example: <select>. Will get style display:inline-block.
2104     BLOCK_TEXT_ELEMENT = 3,      // block of text, can contain text, example: <p>. Will get styles display:block; width:*.
2105     BLOCK_BLOCK_ELEMENT = 4,        // block of blocks, contains blocks inside, example: <div>. Will get style display:block.; width:*.
2106 };
2107
2108 alias ELEMENT_MODEL.DATA_ELEMENT DATA_ELEMENT;
2109 alias ELEMENT_MODEL.INLINE_TEXT_ELEMENT INLINE_TEXT_ELEMENT;
2110 alias ELEMENT_MODEL.INLINE_BLOCK_ELEMENT INLINE_BLOCK_ELEMENT;
2111 alias ELEMENT_MODEL.BLOCK_TEXT_ELEMENT BLOCK_TEXT_ELEMENT;
2112 alias ELEMENT_MODEL.BLOCK_BLOCK_ELEMENT BLOCK_BLOCK_ELEMENT;
2113
2114 enum HTMLAYOUT_OPTIONS
2115 {
2116      HTMLAYOUT_SMOOTH_SCROLL = 1, // value:TRUE - enable, value:FALSE - disable, enabled by default
2117      HTMLAYOUT_CONNECTION_TIMEOUT = 2, // value: milliseconds, connection timeout of http client
2118      HTMLAYOUT_HTTPS_ERROR = 3, // value: 0 - drop connection, 1 - use builtin dialog, 2 - accept connection silently
2119      HTMLAYOUT_FONT_SMOOTHING = 4, // value: 0 - system default, 1 - no smoothing, 2 - std smoothing, 3 - clear type
2120 };
2121
2122 alias HTMLAYOUT_OPTIONS.HTMLAYOUT_SMOOTH_SCROLL HTMLAYOUT_SMOOTH_SCROLL;
2123 alias HTMLAYOUT_OPTIONS.HTMLAYOUT_CONNECTION_TIMEOUT HTMLAYOUT_CONNECTION_TIMEOUT;
2124 alias HTMLAYOUT_OPTIONS.HTMLAYOUT_HTTPS_ERROR HTMLAYOUT_HTTPS_ERROR;
2125 alias HTMLAYOUT_OPTIONS.HTMLAYOUT_FONT_SMOOTHING HTMLAYOUT_FONT_SMOOTHING;
2126
2127 alias LPCSTR function () HTMLayoutClassNameA_t;
2128 HTMLayoutClassNameA_t HTMLayoutClassNameA;
2129 alias LPCWSTR function () HTMLayoutClassNameW_t;
2130 HTMLayoutClassNameW_t HTMLayoutClassNameW;
2131 alias BOOL function (HWND hwnd, LPCWSTR uri, LPBYTE data, DWORD dataLength) HTMLayoutDataReady_t;
2132 HTMLayoutDataReady_t HTMLayoutDataReady;
2133 alias BOOL function (HWND hwnd, LPCWSTR uri, LPBYTE data, DWORD dataLength, UINT dataType) HTMLayoutDataReadyAsync_t;
2134 HTMLayoutDataReadyAsync_t HTMLayoutDataReadyAsync;
2135 alias LRESULT function (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) HTMLayoutProc_t;
2136 HTMLayoutProc_t HTMLayoutProc;
2137 alias LRESULT function (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, BOOL *pbHandled) HTMLayoutProcND_t;
2138 HTMLayoutProcND_t HTMLayoutProcND;
2139 alias UINT function (HWND hWndHTMLayout) HTMLayoutGetMinWidth_t;
2140 HTMLayoutGetMinWidth_t HTMLayoutGetMinWidth;
2141 alias UINT function (HWND hWndHTMLayout, UINT width) HTMLayoutGetMinHeight_t;
2142 HTMLayoutGetMinHeight_t HTMLayoutGetMinHeight;
2143 alias BOOL function (HWND hWndHTMLayout, LPCWSTR filename) HTMLayoutLoadFile_t;
2144 HTMLayoutLoadFile_t HTMLayoutLoadFile;
2145 alias BOOL function (HWND hWndHTMLayout, LPCBYTE html, UINT htmlSize) HTMLayoutLoadHtml_t;
2146 HTMLayoutLoadHtml_t HTMLayoutLoadHtml;
2147 alias BOOL function (HWND hWndHTMLayout, LPCBYTE html, UINT htmlSize, LPCWSTR baseUrl) HTMLayoutLoadHtmlEx_t;
2148 HTMLayoutLoadHtmlEx_t HTMLayoutLoadHtmlEx;
2149 alias VOID function (HWND hWndHTMLayout, int HTMLayoutMode) HTMLayoutSetMode_t;
2150 HTMLayoutSetMode_t HTMLayoutSetMode;
2151 alias VOID function (HWND hWndHTMLayout, LPHTMLAYOUT_NOTIFY cb, LPVOID cbParam) HTMLayoutSetCallback_t;
2152 HTMLayoutSetCallback_t HTMLayoutSetCallback;
2153 alias BOOL function (HWND hWndHTMLayout) HTMLayoutSelectionExist_t;
2154 HTMLayoutSelectionExist_t HTMLayoutSelectionExist;
2155 alias LPCBYTE function (HWND hWndHTMLayout, LPUINT pSize) HTMLayoutGetSelectedHTML_t;
2156 HTMLayoutGetSelectedHTML_t HTMLayoutGetSelectedHTML;
2157 alias BOOL function (HWND hWndHTMLayout) HTMLayoutClipboardCopy_t;
2158 HTMLayoutClipboardCopy_t HTMLayoutClipboardCopy;
2159 alias UINT function (HWND hWndHTMLayout, HTMLAYOUT_CALLBACK_RES cb) HTMLayoutEnumResources_t;
2160 HTMLayoutEnumResources_t HTMLayoutEnumResources;
2161 alias BOOL function (LPCBYTE utf8, UINT numBytes) HTMLayoutSetMasterCSS_t;
2162 HTMLayoutSetMasterCSS_t HTMLayoutSetMasterCSS;
2163 alias BOOL function (LPCBYTE utf8, UINT numBytes) HTMLayoutAppendMasterCSS_t;
2164 HTMLayoutAppendMasterCSS_t HTMLayoutAppendMasterCSS;
2165 alias BOOL function (HWND hWndHTMLayout, LPCBYTE utf8, UINT numBytes, LPCWSTR baseUrl, LPCWSTR mediaType) HTMLayoutSetCSS_t;
2166 HTMLayoutSetCSS_t HTMLayoutSetCSS;
2167 alias BOOL function (HWND hWndHTMLayout, LPCWSTR mediaType) HTMLayoutSetMediaType_t;
2168 HTMLayoutSetMediaType_t HTMLayoutSetMediaType;
2169 alias BOOL function (HWND hWndHTMLayout, LPCSTR httpHeaders, UINT httpHeadersLength) HTMLayoutSetHttpHeaders_t;
2170 HTMLayoutSetHttpHeaders_t HTMLayoutSetHttpHeaders;
2171 alias BOOL function (HWND hWndHTMLayout, HBITMAP hBmp, RECT area) HTMLayoutRender_t;
2172 HTMLayoutRender_t HTMLayoutRender;
2173 alias INT_PTR function (HWND hWndParent, POINT position, INT alignment, UINT style, UINT styleEx, LPHTMLAYOUT_NOTIFY notificationCallback, LPELEMENT_EVENT_PROC eventsCallback, LPVOID callbackParam, LPCBYTE html, UINT htmlLength) HTMLayoutDialog_t;
2174 HTMLayoutDialog_t HTMLayoutDialog;
2175
2176 ////////////////////////////////////////////////////////////////////////////// htmlite
2177
2178 const HLN_REFRESH_AREA   =0xAFF + 0x20;
2179 const HLN_SET_TIMER  =0xAFF + 0x21;
2180 const HLN_SET_CURSOR     =0xAFF + 0x22;
2181
2182 struct NMHL_REFRESH_AREA
2183 {
2184         NMHDR        hdr;                           /**< Default WM_NOTIFY header, only code field is used in HTMLite */
2185         RECT            area;                        /**< [in] area to refresh.*/
2186 }
2187
2188 alias NMHL_REFRESH_AREA* LPNMHL_REFRESH_AREA;
2189
2190 struct NMHL_SET_TIMER
2191 {
2192         NMHDR        hdr;                           /**< Default WM_NOTIFY header, only code field is used in HTMLite */
2193         UINT_PTR    timerId;                    /**< [in] id of the timer event.*/
2194         UINT            elapseTime;          /**< [in] elapseTime of the timer event, milliseconds.
2195                                                                                     If it is 0 then this timer has to be stoped. */
2196 }
2197
2198 alias NMHL_SET_TIMER* LPNMHL_SET_TIMER;
2199
2200 struct NMHL_SET_CURSOR
2201 {
2202         NMHDR        hdr;                           /**< Default WM_NOTIFY header, only code field is used in HTMLite */
2203         UINT            cursorId;                /**< [in] id of the cursor, .*/
2204 }
2205
2206 alias NMHL_SET_CURSOR* LPNMHL_SET_CURSOR;
2207
2208 alias void* HTMLITE;
2209
2210 enum HPRESULT
2211 {
2212     HPR_OK = 0,
2213     HPR_INVALID_HANDLE,
2214     HPR_INVALID_FORMAT,
2215     HPR_FILE_NOT_FOUND,
2216     HPR_INVALID_PARAMETER,
2217     HPR_INVALID_STATE, // attempt to do operation on empty document
2218 }
2219
2220 alias HPRESULT.HPR_OK HPR_OK;
2221 alias HPRESULT.HPR_INVALID_HANDLE HPR_INVALID_HANDLE;
2222 alias HPRESULT.HPR_INVALID_FORMAT HPR_INVALID_FORMAT;
2223 alias HPRESULT.HPR_FILE_NOT_FOUND HPR_FILE_NOT_FOUND;
2224 alias HPRESULT.HPR_INVALID_PARAMETER HPR_INVALID_PARAMETER;
2225 alias HPRESULT.HPR_INVALID_STATE HPR_INVALID_STATE;
2226
2227 enum FOCUS_ADVANCE_CMD
2228 {
2229     FOCUS_NEXT = 0,
2230     FOCUS_PREV = 1,
2231     FOCUS_HOME = 2,
2232     FOCUS_END = 3,
2233 };
2234
2235 alias FOCUS_ADVANCE_CMD.FOCUS_NEXT FOCUS_NEXT;
2236 alias FOCUS_ADVANCE_CMD.FOCUS_PREV FOCUS_PREV;
2237 alias FOCUS_ADVANCE_CMD.FOCUS_HOME FOCUS_HOME;
2238 alias FOCUS_ADVANCE_CMD.FOCUS_END FOCUS_END;
2239
2240 alias NMHDR* LPNMHDR;
2241
2242 alias UINT function (HTMLITE hLite, LPNMHDR hdr) HTMLITE_CALLBACK;
2243
2244 alias HTMLITE function () HTMLiteCreateInstance_t;
2245 HTMLiteCreateInstance_t HTMLiteCreateInstance;
2246 alias HPRESULT function (HTMLITE hLite) HTMLiteDestroyInstance_t;
2247 HTMLiteDestroyInstance_t HTMLiteDestroyInstance;
2248 alias HPRESULT function (HTMLITE hLite, LPVOID tag) HTMLiteSetTag_t;
2249 HTMLiteSetTag_t HTMLiteSetTag;
2250 alias HPRESULT function (HTMLITE hLite, LPVOID *tag) HTMLiteGetTag_t;
2251 HTMLiteGetTag_t HTMLiteGetTag;
2252 alias HPRESULT function (HTMLITE hLite, LPCWSTR path) HTMLiteLoadHtmlFromFile_t;
2253 HTMLiteLoadHtmlFromFile_t HTMLiteLoadHtmlFromFile;
2254 alias HPRESULT function (HTMLITE hLite, LPCWSTR baseURI, BYTE* dataptr, DWORD datasize) HTMLiteLoadHtmlFromMemory_t;
2255 HTMLiteLoadHtmlFromMemory_t HTMLiteLoadHtmlFromMemory;
2256 alias HPRESULT function (HTMLITE hLite, INT viewWidth, INT viewHeight) HTMLiteMeasure_t;
2257 HTMLiteMeasure_t HTMLiteMeasure;
2258 alias HPRESULT function (HTMLITE hLite, HDC hdc, INT x, INT y, INT sx, INT sy) HTMLiteRender_t;
2259 HTMLiteRender_t HTMLiteRender;
2260 alias HPRESULT function (HTMLITE hLite, HBITMAP hbmp, INT x, INT y, INT sx, INT sy) HTMLiteRenderOnBitmap_t;
2261 HTMLiteRenderOnBitmap_t HTMLiteRenderOnBitmap;
2262 alias HPRESULT function (HTMLITE hLite, LPCSTR url, BYTE* data, DWORD dataSize) HTMLiteSetDataReady_t;
2263 HTMLiteSetDataReady_t HTMLiteSetDataReady;
2264 alias HPRESULT function (HTMLITE hLite, LPINT v) HTMLiteGetDocumentMinWidth_t;
2265 HTMLiteGetDocumentMinWidth_t HTMLiteGetDocumentMinWidth;
2266 alias HPRESULT function (HTMLITE hLite, LPINT v) HTMLiteGetDocumentMinHeight_t;
2267 HTMLiteGetDocumentMinHeight_t HTMLiteGetDocumentMinHeight;
2268 alias HPRESULT function (HTMLITE hLite, LPCSTR mediatype) HTMLiteSetMediaType_t;
2269 HTMLiteSetMediaType_t HTMLiteSetMediaType;
2270 alias HPRESULT function (HTMLITE hLite, HELEMENT *phe) HTMLiteGetRootElement_t;
2271 HTMLiteGetRootElement_t HTMLiteGetRootElement;
2272 alias HPRESULT function (HTMLITE hLite, INT x, INT y, HELEMENT *phe) HTMLiteFindElement_t;
2273 HTMLiteFindElement_t HTMLiteFindElement;
2274 alias HPRESULT function (HTMLITE hLite, HTMLITE_CALLBACK cb) HTMLiteSetCallback_t;
2275 HTMLiteSetCallback_t HTMLiteSetCallback;
2276 alias HPRESULT function(HTMLITE hLite, UINT where, BOOL* pRes ) HTMLiteAdvanceFocus_t;
2277 HTMLiteAdvanceFocus_t HTMLiteAdvanceFocus;
2278 alias HPRESULT function(HTMLITE hLite, UINT evt, LPVOID eventCtlStruct, LPBOOL bOutProcessed ) HTMLiteTraverseUIEvent_t;
2279 HTMLiteTraverseUIEvent_t HTMLiteTraverseUIEvent;
2280
2281 alias HLDOM_RESULT function( HELEMENT he, LPELEMENT_EVENT_PROC pep, LPVOID tag ) HTMLayoutDetachEventHandler_t;
2282 HTMLayoutDetachEventHandler_t HTMLayoutDetachEventHandler;
2283 alias HLDOM_RESULT function( HWND hwndLayout, LPELEMENT_EVENT_PROC pep, LPVOID tag ) HTMLayoutWindowDetachEventHandler_t;
2284 HTMLayoutWindowDetachEventHandler_t HTMLayoutWindowDetachEventHandler;
2285 alias HLDOM_RESULT function( HELEMENT he, HRANGE* pRange, BOOL outer ) HTMLayoutRangeCreate_t;
2286 HTMLayoutRangeCreate_t HTMLayoutRangeCreate;
2287 alias HLDOM_RESULT function( HELEMENT he, HRANGE* pRange ) HTMLayoutRangeFromSelection_t;
2288 HTMLayoutRangeFromSelection_t HTMLayoutRangeFromSelection;
2289 alias HLDOM_RESULT function( HELEMENT he, HPOSITION* pStart, HPOSITION* pEnd ) HTMLayoutRangeFromPositions_t;
2290 HTMLayoutRangeFromPositions_t HTMLayoutRangeFromPositions;
2291 alias HLDOM_RESULT function( HRANGE range ) HTMLayoutRangeRelease_t;
2292 HTMLayoutRangeRelease_t HTMLayoutRangeRelease;
2293 alias HLDOM_RESULT function( HRANGE range, UINT cmd, INT* c, HPOSITION* pPos ) HTMLayoutRangeAdvancePos_t;
2294 HTMLayoutRangeAdvancePos_t HTMLayoutRangeAdvancePos;
2295 alias HLDOM_RESULT function( HRANGE range, LPBYTE* pHtmlUtf8Bytes, UINT* numBytes ) HTMLayoutRangeToHtml_t;
2296 HTMLayoutRangeToHtml_t HTMLayoutRangeToHtml;
2297 alias HLDOM_RESULT function( HRANGE range, LPBYTE htmlUtf8Bytes, UINT numBytes ) HTMLayoutRangeReplace_t;
2298 HTMLayoutRangeReplace_t HTMLayoutRangeReplace;
2299 alias HLDOM_RESULT function( HPOSITION* pPos, LPBYTE htmlUtf8Bytes, UINT numBytes ) HTMLayoutRangeInsertHtml_t;
2300 HTMLayoutRangeInsertHtml_t HTMLayoutRangeInsertHtml;
2301 alias HLDOM_RESULT function( HRANGE range, BOOL* pResult ) HTMLayoutRangeIsEmpty_t;
2302 HTMLayoutRangeIsEmpty_t HTMLayoutRangeIsEmpty;
2303 alias BOOL function(HWND hWndHTMLayout, UINT option, UINT value ) HTMLayoutSetOption_t;
2304 HTMLayoutSetOption_t HTMLayoutSetOption;
2305 alias BOOL function(LPCSTR name, UINT/*ELEMENT_MODEL*/ elementModel) HTMLayoutDeclareElementType_t;
2306 HTMLayoutDeclareElementType_t HTMLayoutDeclareElementType;
2307
2308 ////////////////////////////////////////////////////////////////////////////// import symbols
2309
2310 import flowerd.sharedlib;
2311
2312 bool loadHTMLayout(char[] name=null,void[] data=null)
2313 {
2314     scope SharedLib dll;
2315     if(name is null) name="htmlayout.dll";
2316     if(data is null) dll=SharedLib(name);
2317     else dll=SharedLib(name,data);
2318     if(dll is null) return false;
2319
2320     HTMLayout_UseElement=cast(HTMLayout_UseElement_t)dll.symbol("HTMLayout_UseElement\0");
2321     HTMLayout_UnuseElement=cast(HTMLayout_UnuseElement_t)dll.symbol("HTMLayout_UnuseElement\0");
2322     HTMLayoutGetRootElement=cast(HTMLayoutGetRootElement_t)dll.symbol("HTMLayoutGetRootElement\0");
2323     HTMLayoutGetFocusElement=cast(HTMLayoutGetFocusElement_t)dll.symbol("HTMLayoutGetFocusElement\0");
2324     HTMLayoutFindElement=cast(HTMLayoutFindElement_t)dll.symbol("HTMLayoutFindElement\0");
2325     HTMLayoutGetChildrenCount=cast(HTMLayoutGetChildrenCount_t)dll.symbol("HTMLayoutGetChildrenCount\0");
2326     HTMLayoutGetNthChild=cast(HTMLayoutGetNthChild_t)dll.symbol("HTMLayoutGetNthChild\0");
2327     HTMLayoutGetParentElement=cast(HTMLayoutGetParentElement_t)dll.symbol("HTMLayoutGetParentElement\0");
2328     HTMLayoutGetElementText=cast(HTMLayoutGetElementText_t)dll.symbol("HTMLayoutGetElementText\0");
2329     HTMLayoutGetElementHtml=cast(HTMLayoutGetElementHtml_t)dll.symbol("HTMLayoutGetElementHtml\0");
2330     HTMLayoutGetElementInnerText=cast(HTMLayoutGetElementInnerText_t)dll.symbol("HTMLayoutGetElementInnerText\0");
2331     HTMLayoutSetElementInnerText=cast(HTMLayoutSetElementInnerText_t)dll.symbol("HTMLayoutSetElementInnerText\0");
2332     HTMLayoutGetElementInnerText16=cast(HTMLayoutGetElementInnerText16_t)dll.symbol("HTMLayoutGetElementInnerText16\0");
2333     HTMLayoutSetElementInnerText16=cast(HTMLayoutSetElementInnerText16_t)dll.symbol("HTMLayoutSetElementInnerText16\0");
2334     HTMLayoutGetAttributeCount=cast(HTMLayoutGetAttributeCount_t)dll.symbol("HTMLayoutGetAttributeCount\0");
2335     HTMLayoutGetNthAttribute=cast(HTMLayoutGetNthAttribute_t)dll.symbol("HTMLayoutGetNthAttribute\0");
2336     HTMLayoutGetAttributeByName=cast(HTMLayoutGetAttributeByName_t)dll.symbol("HTMLayoutGetAttributeByName\0");
2337     HTMLayoutSetAttributeByName=cast(HTMLayoutSetAttributeByName_t)dll.symbol("HTMLayoutSetAttributeByName\0");
2338     HTMLayoutClearAttributes=cast(HTMLayoutClearAttributes_t)dll.symbol("HTMLayoutClearAttributes\0");
2339     HTMLayoutGetElementIndex=cast(HTMLayoutGetElementIndex_t)dll.symbol("HTMLayoutGetElementIndex\0");
2340     HTMLayoutGetElementType=cast(HTMLayoutGetElementType_t)dll.symbol("HTMLayoutGetElementType\0");
2341     HTMLayoutGetStyleAttribute=cast(HTMLayoutGetStyleAttribute_t)dll.symbol("HTMLayoutGetStyleAttribute\0");
2342     HTMLayoutSetStyleAttribute=cast(HTMLayoutSetStyleAttribute_t)dll.symbol("HTMLayoutSetStyleAttribute\0");
2343     HTMLayoutUpdateElement=cast(HTMLayoutUpdateElement_t)dll.symbol("HTMLayoutUpdateElement\0");
2344     HTMLayoutUpdateElementEx=cast(HTMLayoutUpdateElementEx_t)dll.symbol("HTMLayoutUpdateElementEx\0");
2345     HTMLayoutSetCapture=cast(HTMLayoutSetCapture_t)dll.symbol("HTMLayoutSetCapture\0");
2346     HTMLayoutGetElementHwnd=cast(HTMLayoutGetElementHwnd_t)dll.symbol("HTMLayoutGetElementHwnd\0");
2347     HTMLayoutCombineURL=cast(HTMLayoutCombineURL_t)dll.symbol("HTMLayoutCombineURL\0");
2348     HTMLayoutVisitElements=cast(HTMLayoutVisitElements_t)dll.symbol("HTMLayoutVisitElements\0");
2349     HTMLayoutSelectElements=cast(HTMLayoutSelectElements_t)dll.symbol("HTMLayoutSelectElements\0");
2350     HTMLayoutSelectParent=cast(HTMLayoutSelectParent_t)dll.symbol("HTMLayoutSelectParent\0");
2351     HTMLayoutSetElementHtml=cast(HTMLayoutSetElementHtml_t)dll.symbol("HTMLayoutSetElementHtml\0");
2352     HTMLayoutDeleteElement=cast(HTMLayoutDeleteElement_t)dll.symbol("HTMLayoutDeleteElement\0");
2353     HTMLayoutGetElementUID=cast(HTMLayoutGetElementUID_t)dll.symbol("HTMLayoutGetElementUID\0");
2354     HTMLayoutGetElementByUID=cast(HTMLayoutGetElementByUID_t)dll.symbol("HTMLayoutGetElementByUID\0");
2355     HTMLayoutShowPopup=cast(HTMLayoutShowPopup_t)dll.symbol("HTMLayoutShowPopup\0");
2356     HTMLayoutShowPopupAt=cast(HTMLayoutShowPopupAt_t)dll.symbol("HTMLayoutShowPopupAt\0");
2357     HTMLayoutHidePopup=cast(HTMLayoutHidePopup_t)dll.symbol("HTMLayoutHidePopup\0");
2358     HTMLayoutGetElementState=cast(HTMLayoutGetElementState_t)dll.symbol("HTMLayoutGetElementState\0");
2359     HTMLayoutCreateElement=cast(HTMLayoutCreateElement_t)dll.symbol("HTMLayoutCreateElement\0");
2360     HTMLayoutCloneElement=cast(HTMLayoutCloneElement_t)dll.symbol("HTMLayoutCloneElement\0");
2361     HTMLayoutInsertElement=cast(HTMLayoutInsertElement_t)dll.symbol("HTMLayoutInsertElement\0");
2362     HTMLayoutDetachElement=cast(HTMLayoutDetachElement_t)dll.symbol("HTMLayoutDetachElement\0");
2363     HTMLayoutSetTimer=cast(HTMLayoutSetTimer_t)dll.symbol("HTMLayoutSetTimer\0");
2364     HTMLayoutAttachEventHandler=cast(HTMLayoutAttachEventHandler_t)dll.symbol("HTMLayoutAttachEventHandler\0");
2365     HTMLayoutAttachEventHandlerEx=cast(HTMLayoutAttachEventHandlerEx_t)dll.symbol("HTMLayoutAttachEventHandlerEx\0");
2366     HTMLayoutWindowAttachEventHandler=cast(HTMLayoutWindowAttachEventHandler_t)dll.symbol("HTMLayoutWindowAttachEventHandler\0");
2367     HTMLayoutSendEvent=cast(HTMLayoutSendEvent_t)dll.symbol("HTMLayoutSendEvent\0");
2368     HTMLayoutPostEvent=cast(HTMLayoutPostEvent_t)dll.symbol("HTMLayoutPostEvent\0");
2369     HTMLayoutCallBehaviorMethod=cast(HTMLayoutCallBehaviorMethod_t)dll.symbol("HTMLayoutCallBehaviorMethod\0");
2370     HTMLayoutRequestElementData=cast(HTMLayoutRequestElementData_t)dll.symbol("HTMLayoutRequestElementData\0");
2371     HTMLayoutGetScrollInfo=cast(HTMLayoutGetScrollInfo_t)dll.symbol("HTMLayoutGetScrollInfo\0");
2372     HTMLayoutSetScrollPos=cast(HTMLayoutSetScrollPos_t)dll.symbol("HTMLayoutSetScrollPos\0");
2373     HTMLayoutIsElementVisible=cast(HTMLayoutIsElementVisible_t)dll.symbol("HTMLayoutIsElementVisible\0");
2374     HTMLayoutIsElementEnabled=cast(HTMLayoutIsElementEnabled_t)dll.symbol("HTMLayoutIsElementEnabled\0");
2375     HTMLayoutSortElements=cast(HTMLayoutSortElements_t)dll.symbol("HTMLayoutSortElements\0");
2376     HTMLayoutSwapElements=cast(HTMLayoutSwapElements_t)dll.symbol("HTMLayoutSwapElements\0");
2377     HTMLayoutTraverseUIEvent=cast(HTMLayoutTraverseUIEvent_t)dll.symbol("HTMLayoutTraverseUIEvent\0");
2378     HTMLayoutControlGetType=cast(HTMLayoutControlGetType_t)dll.symbol("HTMLayoutControlGetType\0");
2379     HTMLayoutControlGetValue=cast(HTMLayoutControlGetValue_t)dll.symbol("HTMLayoutControlGetValue\0");
2380     HTMLayoutControlSetValue=cast(HTMLayoutControlSetValue_t)dll.symbol("HTMLayoutControlSetValue\0");
2381     HTMLayoutEnumerate=cast(HTMLayoutEnumerate_t)dll.symbol("HTMLayoutEnumerate\0");
2382     HTMLayoutGetCharacterRect=cast(HTMLayoutGetCharacterRect_t)dll.symbol("HTMLayoutGetCharacterRect\0");
2383     HTMLayoutClassNameA=cast(HTMLayoutClassNameA_t)dll.symbol("HTMLayoutClassNameA\0");
2384     HTMLayoutClassNameW=cast(HTMLayoutClassNameW_t)dll.symbol("HTMLayoutClassNameW\0");
2385     HTMLayoutDataReady=cast(HTMLayoutDataReady_t)dll.symbol("HTMLayoutDataReady\0");
2386     HTMLayoutDataReadyAsync=cast(HTMLayoutDataReadyAsync_t)dll.symbol("HTMLayoutDataReadyAsync\0");
2387     HTMLayoutProc=cast(HTMLayoutProc_t)dll.symbol("HTMLayoutProc\0");
2388     HTMLayoutProcND=cast(HTMLayoutProcND_t)dll.symbol("HTMLayoutProcND\0");
2389     HTMLayoutGetMinWidth=cast(HTMLayoutGetMinWidth_t)dll.symbol("HTMLayoutGetMinWidth\0");
2390     HTMLayoutGetMinHeight=cast(HTMLayoutGetMinHeight_t)dll.symbol("HTMLayoutGetMinHeight\0");
2391     HTMLayoutLoadFile=cast(HTMLayoutLoadFile_t)dll.symbol("HTMLayoutLoadFile\0");
2392     HTMLayoutLoadHtml=cast(HTMLayoutLoadHtml_t)dll.symbol("HTMLayoutLoadHtml\0");
2393     HTMLayoutLoadHtmlEx=cast(HTMLayoutLoadHtmlEx_t)dll.symbol("HTMLayoutLoadHtmlEx\0");
2394     HTMLayoutSetMode=cast(HTMLayoutSetMode_t)dll.symbol("HTMLayoutSetMode\0");
2395     HTMLayoutSetCallback=cast(HTMLayoutSetCallback_t)dll.symbol("HTMLayoutSetCallback\0");
2396     HTMLayoutSelectionExist=cast(HTMLayoutSelectionExist_t)dll.symbol("HTMLayoutSelectionExist\0");
2397     HTMLayoutGetSelectedHTML=cast(HTMLayoutGetSelectedHTML_t)dll.symbol("HTMLayoutGetSelectedHTML\0");
2398     HTMLayoutClipboardCopy=cast(HTMLayoutClipboardCopy_t)dll.symbol("HTMLayoutClipboardCopy\0");
2399     HTMLayoutEnumResources=cast(HTMLayoutEnumResources_t)dll.symbol("HTMLayoutEnumResources\0");
2400     HTMLayoutSetMasterCSS=cast(HTMLayoutSetMasterCSS_t)dll.symbol("HTMLayoutSetMasterCSS\0");
2401     HTMLayoutSetCSS=cast(HTMLayoutSetCSS_t)dll.symbol("HTMLayoutSetCSS\0");
2402     HTMLayoutSetMediaType=cast(HTMLayoutSetMediaType_t)dll.symbol("HTMLayoutSetMediaType\0");
2403     HTMLayoutSetHttpHeaders=cast(HTMLayoutSetHttpHeaders_t)dll.symbol("HTMLayoutSetHttpHeaders\0");
2404     HTMLayoutRender=cast(HTMLayoutRender_t)dll.symbol("HTMLayoutRender\0");
2405     HTMLayoutDialog=cast(HTMLayoutDialog_t)dll.symbol("HTMLayoutDialog\0");
2406     HTMLiteCreateInstance=cast(HTMLiteCreateInstance_t)dll.symbol("HTMLiteCreateInstance\0");
2407     HTMLiteDestroyInstance=cast(HTMLiteDestroyInstance_t)dll.symbol("HTMLiteDestroyInstance\0");
2408     HTMLiteSetTag=cast(HTMLiteSetTag_t)dll.symbol("HTMLiteSetTag\0");
2409     HTMLiteGetTag=cast(HTMLiteGetTag_t)dll.symbol("HTMLiteGetTag\0");
2410     HTMLiteLoadHtmlFromFile=cast(HTMLiteLoadHtmlFromFile_t)dll.symbol("HTMLiteLoadHtmlFromFile\0");
2411     HTMLiteLoadHtmlFromMemory=cast(HTMLiteLoadHtmlFromMemory_t)dll.symbol("HTMLiteLoadHtmlFromMemory\0");
2412     HTMLiteMeasure=cast(HTMLiteMeasure_t)dll.symbol("HTMLiteMeasure\0");
2413     HTMLiteRender=cast(HTMLiteRender_t)dll.symbol("HTMLiteRender\0");
2414     HTMLiteRenderOnBitmap=cast(HTMLiteRenderOnBitmap_t)dll.symbol("HTMLiteRenderOnBitmap\0");
2415     HTMLiteSetDataReady=cast(HTMLiteSetDataReady_t)dll.symbol("HTMLiteSetDataReady\0");
2416     HTMLiteGetDocumentMinWidth=cast(HTMLiteGetDocumentMinWidth_t)dll.symbol("HTMLiteGetDocumentMinWidth\0");
2417     HTMLiteGetDocumentMinHeight=cast(HTMLiteGetDocumentMinHeight_t)dll.symbol("HTMLiteGetDocumentMinHeight\0");
2418     HTMLiteSetMediaType=cast(HTMLiteSetMediaType_t)dll.symbol("HTMLiteSetMediaType\0");
2419     HTMLiteGetRootElement=cast(HTMLiteGetRootElement_t)dll.symbol("HTMLiteGetRootElement\0");
2420     HTMLiteFindElement=cast(HTMLiteFindElement_t)dll.symbol("HTMLiteFindElement\0");
2421     HTMLiteSetCallback=cast(HTMLiteSetCallback_t)dll.symbol("HTMLiteSetCallback\0");
2422     HTMLiteAdvanceFocus=cast(HTMLiteAdvanceFocus_t)dll.symbol("HTMLiteAdvanceFocus\0");
2423     HTMLiteTraverseUIEvent=cast(HTMLiteTraverseUIEvent_t)dll.symbol("HTMLiteTraverseUIEvent\0");
2424     HTMLayoutSetElementState=cast(HTMLayoutSetElementState_t)dll.symbol("HTMLayoutSetElementState\0");
2425     HTMLayoutDetachEventHandler=cast(HTMLayoutDetachEventHandler_t)dll.symbol("HTMLayoutDetachEventHandler\0");
2426     HTMLayoutWindowDetachEventHandler=cast(HTMLayoutWindowDetachEventHandler_t)dll.symbol("HTMLayoutWindowDetachEventHandler\0");
2427     HTMLayoutRangeCreate=cast(HTMLayoutRangeCreate_t)dll.symbol("HTMLayoutRangeCreate\0");
2428     HTMLayoutRangeFromSelection=cast(HTMLayoutRangeFromSelection_t)dll.symbol("HTMLayoutRangeFromSelection\0");
2429     HTMLayoutRangeFromPositions=cast(HTMLayoutRangeFromPositions_t)dll.symbol("HTMLayoutRangeFromPositions\0");
2430     HTMLayoutRangeRelease=cast(HTMLayoutRangeRelease_t)dll.symbol("HTMLayoutRangeRelease\0");
2431     HTMLayoutRangeAdvancePos=cast(HTMLayoutRangeAdvancePos_t)dll.symbol("HTMLayoutRangeAdvancePos\0");
2432     HTMLayoutRangeToHtml=cast(HTMLayoutRangeToHtml_t)dll.symbol("HTMLayoutRangeToHtml\0");
2433     HTMLayoutRangeReplace=cast(HTMLayoutRangeReplace_t)dll.symbol("HTMLayoutRangeReplace\0");
2434     HTMLayoutRangeInsertHtml=cast(HTMLayoutRangeInsertHtml_t)dll.symbol("HTMLayoutRangeInsertHtml\0");
2435     HTMLayoutRangeIsEmpty=cast(HTMLayoutRangeIsEmpty_t)dll.symbol("HTMLayoutRangeIsEmpty\0");
2436     HTMLayoutSetOption=cast(HTMLayoutSetOption_t)dll.symbol("HTMLayoutSetOption\0");
2437     HTMLayoutDeclareElementType=cast(HTMLayoutDeclareElementType_t)dll.symbol("HTMLayoutDeclareElementType\0");
2438     HTMLayoutAppendMasterCSS=cast(HTMLayoutAppendMasterCSS_t)dll.symbol("HTMLayoutAppendMasterCSS\0");
2439     HTMLayoutScrollToView=cast(HTMLayoutScrollToView_t)dll.symbol("HTMLayoutScrollToView\0");
2440     HTMLayoutElementSetExpando=cast(HTMLayoutElementSetExpando_t)dll.symbol("HTMLayoutElementSetExpando\0");
2441     HTMLayoutElementGetExpando=cast(HTMLayoutElementGetExpando_t)dll.symbol("HTMLayoutElementGetExpando\0");
2442     HTMLayoutParseValue=cast(HTMLayoutParseValue_t)dll.symbol("HTMLayoutParseValue\0");
2443     HTMLayoutGetGraphin=cast(HTMLayoutGetGraphin_t)dll.symbol("HTMLayoutGetGraphin\0");
2444     HTMLayoutRenderElement=cast(HTMLayoutRenderElement_t)dll.symbol("HTMLayoutRenderElement\0");
2445     HTMLayoutGetElementLocation=cast(HTMLayoutGetElementLocation_t)dll.symbol("HTMLayoutGetElementLocation\0");
2446
2447     return true;
2448 }
Note: See TracBrowser for help on using the browser.