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

Last change on this file since 4759 was 4759, checked in by Jean-Yves Lamoureux, 9 years ago
  • Added fix_table and fix_tr
File size: 4.4 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                if(node->children[c]->properties->width>w) {
30                    w = (node->children[c]->properties->width);
31                }
32                gaycko_fix_table(node->children[c]);
33                break;
34               
35            case ELEM_TR:
36                gaycko_get_position(node->children[c], parent);
37                node->children[c]->properties->height+=1;
38                x = 0;   
39                w+=node->children[c]->properties->width+1;
40                break;
41               
42            case ELEM_TD:
43                gaycko_get_position(node->children[c], parent);
44                x+=node->children[c]->properties->width;
45                if(node->children[c]->properties->width>w) {
46                    w = (node->children[c]->properties->width);
47                }
48                break;
49               
50            case ELEM_BR:
51                node->children[c]->properties->height+=1;
52                x = 0;   
53                w+=node->children[c]->properties->width+1;
54                break;
55               
56            case ELEM_HR:
57                node->children[c]->properties->height+=1;
58                x = 0;   
59                w+=node->children[c]->properties->width+1;
60                break;
61               
62            case ELEM_H1:
63            case ELEM_H2:
64            case ELEM_H3:
65                node->children[c]->properties->height+=1;
66                x = 0;   
67                w+=node->children[c]->properties->width+1;
68                break;
69               
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               
90            default:
91                gaycko_get_position(node->children[c], node);
92                x+=node->children[c]->properties->width;
93                if(node->children[c]->properties->width>w) {
94                    w = (node->children[c]->properties->width);
95                }
96               
97                break;
98        }
99     
100        y+=node->children[c]->properties->height;
101        h+=node->children[c]->properties->height;
102       
103    }
104   
105
106    node->properties->width  = w;
107    node->properties->height = h;
108}
109
110void gaycko_fix_table(gNode *table) {
111        unsigned int tr = 0;
112    table->specific.table->tr_count = 0;
113   
114    for(tr = 0 ; tr < table->children_count; tr++) {
115        if(table->children[tr]->type == ELEM_TR) {
116            gaycko_fix_tr(table->children[tr]);
117            table->specific.table->tr_count++;
118        }
119    }
120   
121}
122void gaycko_fix_tr(gNode *tr) {
123        unsigned int td = 0;
124    tr->specific.tr->td_count = 0;
125   
126    for(td = 0 ; td < tr->children_count; td++) {
127        if(tr->children[td]->type == ELEM_TD) {
128            tr->specific.tr->td_count++;
129        }
130    }
131}   
132   
133   
134   
135   
136   
Note: See TracBrowser for help on using the repository browser.