2 * ion/mod_tiling/split.h
4 * Copyright (c) Tuomo Valkonen 1999-2007.
6 * Ion is free software; you can redistribute it and/or modify it under
7 * the terms of the GNU Lesser General Public License as published by
8 * the Free Software Foundation; either version 2.1 of the License, or
9 * (at your option) any later version.
12 #ifndef ION_MOD_TILING_SPLIT_H
13 #define ION_MOD_TILING_SPLIT_H
15 #include <ioncore/common.h>
16 #include <ioncore/window.h>
17 #include <ioncore/reginfo.h>
18 #include <ioncore/attach.h>
19 #include <ioncore/rectangle.h>
20 #include <libextl/extl.h>
24 INTRCLASS(WSplitInner);
25 INTRCLASS(WSplitSplit);
26 INTRCLASS(WSplitRegion);
58 int unused_w, unused_h;
62 DECLCLASS(WSplitInner){
67 DECLCLASS(WSplitSplit){
75 DECLCLASS(WSplitRegion){
95 typedef bool WSplitFilter(WSplit *split);
96 typedef void WSplitFn(WSplit *split);
101 extern int split_size(WSplit *split, int dir);
102 extern int split_pos(WSplit *split, int dir);
103 extern int split_other_size(WSplit *split, int dir);
104 extern int split_other_pos(WSplit *split, int dir);
106 extern WSplitRegion *splittree_node_of(WRegion *reg);
107 extern bool splittree_set_node_of(WRegion *reg, WSplitRegion *split);
109 extern WPrimn primn_invert(WPrimn primn);
110 extern WPrimn primn_none2any(WPrimn primn);
114 extern bool split_init(WSplit *split, const WRectangle *geom);
115 extern bool splitinner_init(WSplitInner *split, const WRectangle *geom);
116 extern bool splitsplit_init(WSplitSplit *split, const WRectangle *geom,
118 extern bool splitregion_init(WSplitRegion *split,const WRectangle *geom,
120 extern bool splitst_init(WSplitST *split, const WRectangle *geom,
124 extern WSplitSplit *create_splitsplit(const WRectangle *geom, int dir);
125 extern WSplitRegion *create_splitregion(const WRectangle *geom, WRegion *reg);
126 extern WSplitST *create_splitst(const WRectangle *geom, WRegion *reg);
129 extern void split_deinit(WSplit *split);
130 extern void splitsplit_deinit(WSplitSplit *split);
131 extern void splitinner_deinit(WSplitInner *split);
132 extern void splitregion_deinit(WSplitRegion *split);
133 extern void splitst_deinit(WSplitST *split);
137 DYNFUN void split_update_bounds(WSplit *node, bool recursive);
138 extern void splitsplit_update_geom_from_children(WSplitSplit *node);
139 DYNFUN void split_do_resize(WSplit *node, const WRectangle *ng,
140 WPrimn hprimn, WPrimn vprimn, bool transpose);
141 extern void splitsplit_do_resize(WSplitSplit *node, const WRectangle *ng,
142 WPrimn hprimn, WPrimn vprimn, bool transpose);
143 extern void split_resize(WSplit *node, const WRectangle *ng,
144 WPrimn hprimn, WPrimn vprimn);
145 DYNFUN void splitinner_do_rqsize(WSplitInner *p, WSplit *node,
146 RootwardAmount *ha, RootwardAmount *va,
147 WRectangle *rg, bool tryonly);
148 extern ExtlTab split_rqgeom(WSplit *node, ExtlTab g);
152 extern void splittree_rqgeom(WSplit *node, int flags,
153 const WRectangle *geom, WRectangle *geomret);
156 DYNFUN void splitinner_replace(WSplitInner *node, WSplit *child, WSplit *what);
157 extern WSplitRegion *splittree_split(WSplit *node, int dir,
158 WPrimn primn, int minsize,
159 WRegionSimpleCreateFn *fn,
162 extern void splittree_changeroot(WSplit *root, WSplit *node);
166 DYNFUN void splitinner_remove(WSplitInner *node, WSplit *child,
168 extern void splittree_remove(WSplit *node, bool reclaim_space);
172 extern WSplit *split_find_root(WSplit *split);
173 DYNFUN WSplit *split_current_todir(WSplit *node,
174 WPrimn hprimn, WPrimn vprimn,
175 WSplitFilter *filter);
176 DYNFUN WSplit *splitinner_nextto(WSplitInner *node, WSplit *child,
177 WPrimn hprimn, WPrimn vprimn,
178 WSplitFilter *filter);
179 DYNFUN WSplit *splitinner_current(WSplitInner *node);
180 DYNFUN void splitinner_mark_current(WSplitInner *split, WSplit *child);
181 DYNFUN void splitinner_forall(WSplitInner *node, WSplitFn *fn);
182 extern WSplit *split_nextto(WSplit *node,
183 WPrimn hprimn, WPrimn vprimn,
184 WSplitFilter *filter);
186 /* X window handling */
188 void split_restack(WSplit *split, Window win, int mode);
189 void split_stacking(WSplit *split, Window *bottom_ret, Window *top_ret);
190 void split_map(WSplit *split);
191 void split_unmap(WSplit *split);
192 void split_reparent(WSplit *split, WWindow *wwin);
194 /* Transpose, flip, rotate */
196 extern void split_transpose(WSplit *split);
197 extern bool split_transpose_to(WSplit *split, const WRectangle *geom);
199 extern void splitsplit_flip_default(WSplitSplit *split);
200 DYNFUN void splitsplit_flip(WSplitSplit *split);
202 extern bool split_rotate_to(WSplit *node, const WRectangle *geom,
207 extern bool split_get_config(WSplit *node, ExtlTab *ret);
208 extern ExtlTab split_base_config(WSplit *node);
212 extern void splittree_begin_resize();
213 extern void splittree_end_resize();
214 extern void splittree_scan_stdisp_rootward(WSplit *node);
216 extern void split_do_rqgeom_(WSplit *node, const WRectangle *ng,
217 bool hany, bool vany, WRectangle *rg,
221 #endif /* ION_MOD_TILING_SPLIT_H */