2 * ion/mod_tiling/split.h
4 * Copyright (c) Tuomo Valkonen 1999-2007.
6 * See the included file LICENSE for details.
9 #ifndef ION_MOD_TILING_SPLIT_H
10 #define ION_MOD_TILING_SPLIT_H
12 #include <ioncore/common.h>
13 #include <ioncore/window.h>
14 #include <ioncore/reginfo.h>
15 #include <ioncore/attach.h>
16 #include <ioncore/rectangle.h>
17 #include <libextl/extl.h>
21 INTRCLASS(WSplitInner);
22 INTRCLASS(WSplitSplit);
23 INTRCLASS(WSplitRegion);
55 int unused_w, unused_h;
59 DECLCLASS(WSplitInner){
64 DECLCLASS(WSplitSplit){
72 DECLCLASS(WSplitRegion){
92 typedef bool WSplitFilter(WSplit *split);
93 typedef void WSplitFn(WSplit *split);
98 extern int split_size(WSplit *split, int dir);
99 extern int split_pos(WSplit *split, int dir);
100 extern int split_other_size(WSplit *split, int dir);
101 extern int split_other_pos(WSplit *split, int dir);
103 extern WSplitRegion *splittree_node_of(WRegion *reg);
104 extern bool splittree_set_node_of(WRegion *reg, WSplitRegion *split);
106 extern WPrimn primn_invert(WPrimn primn);
107 extern WPrimn primn_none2any(WPrimn primn);
111 extern bool split_init(WSplit *split, const WRectangle *geom);
112 extern bool splitinner_init(WSplitInner *split, const WRectangle *geom);
113 extern bool splitsplit_init(WSplitSplit *split, const WRectangle *geom,
115 extern bool splitregion_init(WSplitRegion *split,const WRectangle *geom,
117 extern bool splitst_init(WSplitST *split, const WRectangle *geom,
121 extern WSplitSplit *create_splitsplit(const WRectangle *geom, int dir);
122 extern WSplitRegion *create_splitregion(const WRectangle *geom, WRegion *reg);
123 extern WSplitST *create_splitst(const WRectangle *geom, WRegion *reg);
126 extern void split_deinit(WSplit *split);
127 extern void splitsplit_deinit(WSplitSplit *split);
128 extern void splitinner_deinit(WSplitInner *split);
129 extern void splitregion_deinit(WSplitRegion *split);
130 extern void splitst_deinit(WSplitST *split);
134 DYNFUN void split_update_bounds(WSplit *node, bool recursive);
135 extern void splitsplit_update_geom_from_children(WSplitSplit *node);
136 DYNFUN void split_do_resize(WSplit *node, const WRectangle *ng,
137 WPrimn hprimn, WPrimn vprimn, bool transpose);
138 extern void splitsplit_do_resize(WSplitSplit *node, const WRectangle *ng,
139 WPrimn hprimn, WPrimn vprimn, bool transpose);
140 extern void split_resize(WSplit *node, const WRectangle *ng,
141 WPrimn hprimn, WPrimn vprimn);
142 DYNFUN void splitinner_do_rqsize(WSplitInner *p, WSplit *node,
143 RootwardAmount *ha, RootwardAmount *va,
144 WRectangle *rg, bool tryonly);
145 extern ExtlTab split_rqgeom(WSplit *node, ExtlTab g);
149 extern void splittree_rqgeom(WSplit *node, int flags,
150 const WRectangle *geom, WRectangle *geomret);
153 DYNFUN void splitinner_replace(WSplitInner *node, WSplit *child, WSplit *what);
154 extern WSplitRegion *splittree_split(WSplit *node, int dir,
155 WPrimn primn, int minsize,
156 WRegionSimpleCreateFn *fn,
159 extern void splittree_changeroot(WSplit *root, WSplit *node);
163 DYNFUN void splitinner_remove(WSplitInner *node, WSplit *child,
165 extern void splittree_remove(WSplit *node, bool reclaim_space);
169 extern WSplit *split_find_root(WSplit *split);
170 DYNFUN WSplit *split_current_todir(WSplit *node,
171 WPrimn hprimn, WPrimn vprimn,
172 WSplitFilter *filter);
173 DYNFUN WSplit *splitinner_nextto(WSplitInner *node, WSplit *child,
174 WPrimn hprimn, WPrimn vprimn,
175 WSplitFilter *filter);
176 DYNFUN WSplit *splitinner_current(WSplitInner *node);
177 DYNFUN void splitinner_mark_current(WSplitInner *split, WSplit *child);
178 DYNFUN void splitinner_forall(WSplitInner *node, WSplitFn *fn);
179 extern WSplit *split_nextto(WSplit *node,
180 WPrimn hprimn, WPrimn vprimn,
181 WSplitFilter *filter);
183 /* X window handling */
185 void split_restack(WSplit *split, Window win, int mode);
186 void split_stacking(WSplit *split, Window *bottom_ret, Window *top_ret);
187 void split_map(WSplit *split);
188 void split_unmap(WSplit *split);
189 void split_reparent(WSplit *split, WWindow *wwin);
191 /* Transpose, flip, rotate */
193 extern void split_transpose(WSplit *split);
194 extern bool split_transpose_to(WSplit *split, const WRectangle *geom);
196 extern void splitsplit_flip_default(WSplitSplit *split);
197 DYNFUN void splitsplit_flip(WSplitSplit *split);
199 extern bool split_rotate_to(WSplit *node, const WRectangle *geom,
204 extern bool split_get_config(WSplit *node, ExtlTab *ret);
205 extern ExtlTab split_base_config(WSplit *node);
209 extern void splittree_begin_resize();
210 extern void splittree_end_resize();
211 extern void splittree_scan_stdisp_rootward(WSplit *node);
213 extern void split_do_rqgeom_(WSplit *node, const WRectangle *ng,
214 bool hany, bool vany, WRectangle *rg,
218 #endif /* ION_MOD_TILING_SPLIT_H */