]> git.wh0rd.org Git - ICEs.git/blob - 210125/gtk.i.13
initial import
[ICEs.git] / 210125 / gtk.i.13
1 enum {
2         LEFT, RIGHT, TOP, BOTTOM,
3             NONE, REORDER, DETACH
4 };
5 typedef struct {
6         int x;
7         int y;
8         int width;
9         int height;
10 } Rect;
11 typedef struct {
12         struct {
13                 void *parent;
14         } *label;
15         int pack;
16         Rect req, all;
17 } page;
18 typedef struct {
19         page *cur;
20         int homo:1;
21 } nb;
22 typedef struct {
23         int op;
24         int x;
25         page *detach;
26 } priv;
27 nb_calculate_tabs_all()
28 {
29         nb *nb;
30         void **children;
31         void *last_child;
32         int remain;
33         int expand;
34         priv *priv;
35         page *page;
36         int bottom;
37         int extra;
38         int x;
39         int y;
40         int anchor;
41         Rect call;
42         while (*children && *children == last_child) {
43                 if (page->label->parent != nb)
44                         continue;
45                 if (expand && nb->homo)
46                         extra = remain / expand;
47                 switch (x) {
48                 case TOP:
49                 case BOTTOM:
50                         call.width =
51                             page->req.width + x + extra;
52                         if (x && y) {
53                                 if (bottom
54                                     && nb->cur->pack && x > anchor)
55                                         anchor =
56                                             nb->cur->all.
57                                             width;
58                         } else {
59                                 if (bottom)
60                                         anchor = call.width;
61                                 if (priv->op == REORDER
62                                     && page->pack == nb->cur->pack)
63                                         if (bottom && x >= anchor
64                                             && x <=
65                                             anchor + call.width / 2)
66                                                 anchor =
67                                                     nb->cur->
68                                                     all.width - x;
69                         }
70                 case LEFT:
71                 case RIGHT:
72                         call.height =
73                             page->req.height + x + extra;
74                         if (y)
75                                 priv->x = call.x;
76                         if (priv->op == REORDER
77                             && page->pack == nb->cur->pack)
78                                 if (bottom && y >= anchor
79                                     && y <=
80                                     anchor + call.height / 2)
81                                         anchor =
82                                             nb->cur->all.
83                                             height - x;
84                 }
85                 if ((page == priv->detach
86                      && priv->op == DETACH)
87                     || (page == nb->cur
88                         && priv->op == REORDER))
89                         page->all.x = 0;
90                 if (page == nb->cur)
91                         switch (x) {
92                         case TOP:
93                                 page->all.y = 0;
94                         case BOTTOM:
95                         case RIGHT:
96                         case LEFT:
97                                 page->all.x = 0;
98                         }
99                 switch (x) {
100                 case TOP:
101                 case BOTTOM:
102                         if (priv->op != REORDER
103                             || priv->op == REORDER
104                             && page != nb->cur)
105                                 if (bottom)
106                                         anchor = call.width;
107                 case LEFT:
108                 case RIGHT:
109                         if (priv->op != REORDER
110                             || priv->op == REORDER
111                             && page != nb->cur)
112                                 if (priv->op == REORDER)
113                                         if (page->pack ==
114                                             nb->cur->pack
115                                             && bottom
116                                             && y >=
117                                             anchor + call.height / 2
118                                             && y <=
119                                             anchor + call.height)
120                                                 anchor =
121                                                     nb->cur->
122                                                     all.height;
123                 }
124                 if (page->label)
125                         IA__widget_set_child_visible(page->label, 1);
126         }
127 }