4 * Copyright (c) Tuomo Valkonen 1999-2006.
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_IONCORE_RESIZE_H
13 #define ION_IONCORE_RESIZE_H
18 #include "rectangle.h"
22 /* To make it easier for region_managed_rqgeom handlers, the geom
23 * parameter contain a complete requested geometry for the region that
24 * wants its geometry changed. The REGION_WEAK_* flags are used to
25 * indicate that the respective geometry value has not been changed or
26 * that the requestor doesn't really care what the result is. In any case,
27 * managers are free to give the managed object whatever geometry it wishes.
29 #define REGION_RQGEOM_WEAK_X 0x0001
30 #define REGION_RQGEOM_WEAK_Y 0x0002
31 #define REGION_RQGEOM_WEAK_W 0x0004
32 #define REGION_RQGEOM_WEAK_H 0x0008
33 #define REGION_RQGEOM_WEAK_ALL 0x000f
34 #define REGION_RQGEOM_TRYONLY 0x0010
35 #define REGION_RQGEOM_ABSOLUTE 0x0020
36 #define REGION_RQGEOM_GRAVITY 0x0040
38 #define REGION_RQGEOM_NORMAL 0
39 #define REGION_RQGEOM_VERT_ONLY (REGION_RQGEOM_WEAK_X|REGION_RQGEOM_WEAK_W)
40 #define REGION_RQGEOM_HORIZ_ONLY (REGION_RQGEOM_WEAK_Y|REGION_RQGEOM_WEAK_H)
41 #define REGION_RQGEOM_H_ONLY (REGION_RQGEOM_VERT_ONLY|REGION_RQGEOM_WEAK_Y)
42 #define REGION_RQGEOM_W_ONLY (REGION_RQGEOM_HORIZ_ONLY|REGION_RQGEOM_WEAK_X)
44 #define REGION_ORIENTATION_NONE 0
45 #define REGION_ORIENTATION_HORIZONTAL 1
46 #define REGION_ORIENTATION_VERTICAL 2
49 #define RQGEOMPARAMS_INIT {{0, 0, 0, 0}, 0, 0}
52 DECLSTRUCT(WRQGeomParams){
59 typedef void WDrawRubberbandFn(WRootWin *rw, const WRectangle *geom);
62 DECLCLASS(WMoveresMode){
65 int dx1, dx2, dy1, dy2;
69 WDrawRubberbandFn *rubfn;
70 int parent_rx, parent_ry;
71 enum {MOVERES_SIZE, MOVERES_POS} mode;
72 bool resize_cumulative;
80 extern WMoveresMode *region_begin_resize(WRegion *reg,
81 WDrawRubberbandFn *rubfn,
84 extern WMoveresMode *region_begin_move(WRegion *reg,
85 WDrawRubberbandFn *rubfn,
88 /* dx1/dx2/dy1/dy2: left/right/top/bottom difference to previous values.
89 * left/top negative, bottom/right positive increases size.
91 extern void moveresmode_delta_resize(WMoveresMode *mode,
92 int dx1, int dx2, int dy1, int dy2,
94 extern void moveresmode_delta_move(WMoveresMode *mode,
95 int dx, int dy, WRectangle *rret);
96 extern bool moveresmode_do_end(WMoveresMode *mode, bool apply);
97 extern WRegion *moveresmode_target(WMoveresMode *mode);
99 extern WMoveresMode *moveres_mode(WRegion *reg);
103 /* Note: even if REGION_RQGEOM_(X|Y|W|H) are not all specified, the
104 * geom parameter should contain a proper geometry!
106 DYNFUN void region_managed_rqgeom(WRegion *reg, WRegion *sub,
107 const WRQGeomParams *rqgp,
108 WRectangle *geomret);
109 DYNFUN void region_managed_rqgeom_absolute(WRegion *reg, WRegion *sub,
110 const WRQGeomParams *rqgp,
111 WRectangle *geomret);
113 extern void region_rqgeom(WRegion *reg, const WRQGeomParams *rqgp,
114 WRectangle *geomret);
116 /* Implementation for regions that do not allow subregions to resize
117 * themselves; default is to give the size the region wants.
119 extern void region_managed_rqgeom_unallow(WRegion *reg, WRegion *sub,
120 const WRQGeomParams *rq,
121 WRectangle *geomret);
123 extern void region_managed_rqgeom_allow(WRegion *reg, WRegion *sub,
124 const WRQGeomParams *rq,
125 WRectangle *geomret);
127 extern void region_managed_rqgeom_absolute_default(WRegion *reg, WRegion *sub,
128 const WRQGeomParams *rq,
129 WRectangle *geomret);
132 DYNFUN void region_size_hints(WRegion *reg, WSizeHints *hints_ret);
133 DYNFUN int region_orientation(WRegion *reg);
135 extern void region_size_hints_correct(WRegion *reg,
136 int *wp, int *hp, bool min);
138 extern uint region_min_h(WRegion *reg);
139 extern uint region_min_w(WRegion *reg);
141 extern void frame_maximize_vert(WFrame *frame);
142 extern void frame_maximize_horiz(WFrame *frame);
144 extern void region_convert_root_geom(WRegion *reg, WRectangle *geom);
146 extern void region_absolute_geom_to_parent(WRegion *reg,
147 const WRectangle *rgeom,
150 #endif /* ION_IONCORE_RESIZE_H */