source: gaycko/trunk/src/render/position.c @ 4768

Last change on this file since 4768 was 4768, checked in by Jean-Yves Lamoureux, 10 years ago
  • Reworked table handling
File size: 3.1 KB
Line 
1/*
2 *  Gaycko        Text mode web browser
3 *  Copyright (c) 2011 Jean-Yves Lamoureux <jylam@lnxscene.org>
4 *                All Rights Reserved
5 *
6 *  This library is free software. It comes without any warranty, to
7 *  the extent permitted by applicable law. You can redistribute it
8 *  and/or modify it under the terms of the Do What The Fuck You Want
9 *  To Public License, Version 2, as published by Sam Hocevar. See
10 *  http://sam.zoy.org/wtfpl/COPYING for more details.
11 */
12
13#include "renderer.h"
14
15void gaycko_get_position(gNode *node, gNode *parent) {
16        unsigned int c = 0;
17        unsigned int w = 0;
18        unsigned int h = 0;
19        unsigned int x = node->properties->x;
20        unsigned int y = node->properties->y;
21
22        for(c = 0; c < node->children_count; c++) {
23                node->children[c]->properties->x = x;
24                node->children[c]->properties->y = y;
25                switch(node->children[c]->type) {
26                        case ELEM_TABLE:
27                                gaycko_get_position(node->children[c], parent);
28                                x+=node->children[c]->properties->width;
29
30                                gaycko_fix_table(node->children[c]);
31                                if(node->children[c]->properties->width>w) {
32                                        w = (node->children[c]->properties->width);
33                                }
34                                break;
35
36                        case ELEM_TR:
37                                gaycko_get_position(node->children[c], parent);
38                                node->children[c]->properties->height+=1;
39                                x = 0;   
40                                w+=node->children[c]->properties->width+1;
41                                break;
42
43                        case ELEM_TD:
44                                gaycko_get_position(node->children[c], parent);
45                                x+=node->children[c]->properties->width;
46                                if(node->children[c]->properties->width>w) {
47                                        w = (node->children[c]->properties->width);
48                                }
49                                break;
50
51                        case ELEM_BR:
52                                node->children[c]->properties->height+=1;
53                                x = 0;   
54                                w+=node->children[c]->properties->width+1;
55                                break;
56
57                        case ELEM_HR:
58                                node->children[c]->properties->height+=1;
59                                x = 0;   
60                                w+=node->children[c]->properties->width+1;
61                                break;
62
63                        case ELEM_H1:
64                        case ELEM_H2:
65                        case ELEM_H3:
66                                node->children[c]->properties->height+=1;
67                                x = 0;   
68                                w+=node->children[c]->properties->width+1;
69                                break;
70
71                        case ELEM_TEXT:
72                                if(parent &&
73                                                (parent->type!=ELEM_TR && parent->type!=ELEM_TABLE)) {
74                                        if(node->children[c]->text) {
75                                                node->children[c]->properties->width = strlen(node->children[c]->text);
76                                        } else {
77                                                node->children[c]->properties->width = 0;
78                                        }
79                                } else {
80                                        node->children[c]->properties->width  = 0;
81                                        node->children[c]->properties->height = 0;
82                                }
83                                x+=node->children[c]->properties->width;
84                                if(node->children[c]->properties->width>w) {
85                                        w = (node->children[c]->properties->width);
86                                }
87                                break;
88
89                        default:
90                                gaycko_get_position(node->children[c], node);
91                                x+=node->children[c]->properties->width;
92                                if(node->children[c]->properties->width>w) {
93                                        w = (node->children[c]->properties->width);
94                                }
95
96                                break;
97                }
98
99                y+=node->children[c]->properties->height;
100                h+=node->children[c]->properties->height;
101        }
102
103        node->properties->width  = w;
104        node->properties->height = h;
105}
106
107
108void gaycko_add_node_x(gNode *node, unsigned int add) {
109
110        unsigned int e = 0;
111        for(e = 0 ; e < node->children_count; e++) {
112                gaycko_add_node_x(node->children[e], add);     
113        }
114        node->properties->x += add;
115
116}
117
118
119
120
121
122
Note: See TracBrowser for help on using the repository browser.