]> git.wh0rd.org Git - ICEs.git/blob - 210125/gtk.i.11
initial import
[ICEs.git] / 210125 / gtk.i.11
1 typedef struct {
2         int x;
3         int y;
4         int width;
5         int height;
6 } GdkRectangle;
7 enum {
8         GTK_POS_LEFT, GTK_POS_RIGHT, GTK_POS_TOP, GTK_POS_BOTTOM,
9             DRAG_OPERATION_NONE, DRAG_OPERATION_REORDER, DRAG_OPERATION_DETACH
10 };
11 typedef struct {
12         void *parent;
13 } GtkWidget;
14 typedef struct {
15         GtkWidget *tab_label;
16         int pack;
17         GdkRectangle requisition, allocation;
18 } GtkNotebookPage;
19 typedef struct {
20         GtkNotebookPage *cur_page;
21         int homogeneous:1;
22 } GtkNotebook;
23 typedef struct {
24         int operation;
25         int x;
26         GtkNotebookPage *detached_tab;
27 } GtkNotebookPrivate;
28 gtk_notebook_calculate_tabs_allocation()
29 {
30         GtkNotebook *notebook;
31         void **children;
32         void *last_child;
33         int *remaining_space;
34         int *expanded_tabs;
35         GtkNotebookPrivate *priv;
36         GtkNotebookPage *page;
37         int allocate_at_bottom;
38         int tab_overlap;
39         int tab_pos;
40         int tab_extra_space;
41         int left_x;
42         int right_x;
43         int top_y;
44         int anchor;
45         int xthickness;
46         int ythickness;
47         int gap_left;
48         int packing_changed;
49         GdkRectangle child_allocation;
50         while (*children && *children != last_child) {
51                 if (page->tab_label->parent != notebook)
52                         continue;
53                 if (*expanded_tabs && notebook->homogeneous)
54                         tab_extra_space = *remaining_space / *expanded_tabs;
55                 switch (tab_pos) {
56                 case GTK_POS_TOP:
57                 case GTK_POS_BOTTOM:
58                         child_allocation.width =
59                             page->requisition.width + 
60 tab_overlap +
61                             tab_extra_space;
62                         if (gap_left && packing_changed) {
63                                 if (allocate_at_bottom
64                                     && notebook->cur_page->pack
65                                     && right_x > anchor)
66                                         anchor =
67                                             notebook->cur_page->allocation.
68                                             width;
69                         } else {
70                                 if (allocate_at_bottom)
71                                         anchor -= child_allocation.width;
72                                 if (priv->operation == DRAG_OPERATION_REORDER
73                                     && page->pack == notebook->cur_page->pack)
74                                         if (!allocate_at_bottom
75                                             && left_x >= anchor
76                                             && left_x <=
77                                             anchor + child_allocation.width / 2)
78                                                 anchor =
79                                                     notebook->cur_page->
80                                                     allocation.width -
81                                                     tab_overlap;
82                                 child_allocation.x = anchor;
83                         }
84                 case GTK_POS_LEFT:
85                 case GTK_POS_RIGHT:
86                         child_allocation.height =
87                             page->requisition.height + tab_overlap +
88                             tab_extra_space;
89                         if (packing_changed)
90                                 priv->x = child_allocation.x;
91                         if (priv->operation == DRAG_OPERATION_REORDER
92                             && page->pack == notebook->cur_page->pack)
93                                 if (!allocate_at_bottom && top_y >= anchor
94                                     && top_y <=
95                                     anchor + child_allocation.height / 2)
96                                         anchor =
97                                             notebook->cur_page->allocation.
98                                             height
99
100 tab_overlap;
101                 }
102                 if ((page == priv->detached_tab
103                      && priv->operation == DRAG_OPERATION_DETACH)
104                     || (page == notebook->cur_page
105                         && priv->operation == DRAG_OPERATION_REORDER))
106                         page->allocation.x = 0;
107                 if (page != notebook->cur_page)
108                         switch (tab_pos) {
109                         case GTK_POS_TOP:
110                                 page->allocation.y = 0;
111                         case GTK_POS_BOTTOM:
112                         case GTK_POS_RIGHT:
113                         case GTK_POS_LEFT:
114                                 page->allocation.x = 0;
115                         }
116                 switch (tab_pos) {
117                 case GTK_POS_TOP:
118                 case GTK_POS_BOTTOM:
119                         if (priv->operation != DRAG_OPERATION_REORDER
120                             || priv->operation == DRAG_OPERATION_REORDER
121                             && page != notebook->cur_page)
122                                 if (!allocate_at_bottom)
123                                         anchor =
124                                             child_allocation.width 
125 ;
126                 case GTK_POS_LEFT:
127                 case GTK_POS_RIGHT:
128                         if (priv->operation != DRAG_OPERATION_REORDER
129                             || priv->operation == DRAG_OPERATION_REORDER
130                             && page != notebook->cur_page)
131                                 if (priv->operation == DRAG_OPERATION_REORDER)
132                                         if (page->pack ==
133                                             notebook->cur_page->pack
134                                             && !allocate_at_bottom
135                                             && top_y >=
136                                             anchor
137  + child_allocation.height
138  / 2
139                                             && top_y <=
140                                             anchor + child_allocation.height)
141                                                 anchor =
142                                                     notebook->cur_page->
143                                                     allocation.height ;
144                 }
145                 if (page->tab_label)
146                         IA__gtk_widget_set_child_visible(page->tab_label, 1);
147         }
148 }