1with agar.gui.surface;
2with agar.gui.widget;
3with agar.gui.types;
4
5package agar.gui.window is
6
7  use type c.unsigned;
8  use type agar.gui.types.window_flags_t;
9
10  subtype window_t is agar.gui.types.window_t;
11  subtype window_access_t is agar.gui.types.window_access_t;
12
13  --
14  -- constants
15  --
16
17  caption_max : constant c.unsigned := agar.gui.types.window_caption_max;
18
19  --
20  -- types
21  --
22
23  subtype flags_t is agar.gui.types.window_flags_t;
24  WINDOW_MODAL         : constant flags_t := 16#000001#;
25  WINDOW_MAXIMIZED     : constant flags_t := 16#000002#;
26  WINDOW_MINIMIZED     : constant flags_t := 16#000004#;
27  WINDOW_KEEPABOVE     : constant flags_t := 16#000008#;
28  WINDOW_KEEPBELOW     : constant flags_t := 16#000010#;
29  WINDOW_DENYFOCUS     : constant flags_t := 16#000020#;
30  WINDOW_NOTITLE       : constant flags_t := 16#000040#;
31  WINDOW_NOBORDERS     : constant flags_t := 16#000080#;
32  WINDOW_NOHRESIZE     : constant flags_t := 16#000100#;
33  WINDOW_NOVRESIZE     : constant flags_t := 16#000200#;
34  WINDOW_NOCLOSE       : constant flags_t := 16#000400#;
35  WINDOW_NOMINIMIZE    : constant flags_t := 16#000800#;
36  WINDOW_NOMAXIMIZE    : constant flags_t := 16#001000#;
37  WINDOW_NOBACKGROUND  : constant flags_t := 16#008000#;
38  WINDOW_NOUPDATERECT  : constant flags_t := 16#010000#;
39  WINDOW_FOCUSONATTACH : constant flags_t := 16#020000#;
40  WINDOW_HMAXIMIZE     : constant flags_t := 16#040000#;
41  WINDOW_VMAXIMIZE     : constant flags_t := 16#080000#;
42  WINDOW_NOMOVE        : constant flags_t := 16#100000#;
43  WINDOW_NOCLIPPING    : constant flags_t := 16#200000#;
44  WINDOW_NORESIZE      : constant flags_t := WINDOW_NOHRESIZE or
45                                             WINDOW_NOVRESIZE;
46  WINDOW_NOBUTTONS     : constant flags_t := WINDOW_NOCLOSE or
47                                             WINDOW_NOMINIMIZE or
48                                             WINDOW_NOMAXIMIZE;
49  WINDOW_PLAIN         : constant flags_t := WINDOW_NOTITLE or
50                                             WINDOW_NOBORDERS;
51
52  subtype alignment_t is agar.gui.types.window_alignment_t;
53
54  type close_action_t is (
55    WINDOW_HIDE,
56    WINDOW_DETACH,
57    WINDOW_NONE
58  );
59  for close_action_t use (
60    WINDOW_HIDE   => 0,
61    WINDOW_DETACH => 1,
62    WINDOW_NONE   => 2
63  );
64  for close_action_t'size use c.unsigned'size;
65  pragma convention (c, close_action_t);
66
67  subtype percent_t is positive range 1 .. 100;
68
69  --
70  -- API
71  --
72
73  function allocate (flags : flags_t := 0) return window_access_t;
74  pragma import (c, allocate, "AG_WindowNew");
75
76  function allocate_named
77    (flags : flags_t := 0;
78     name  : string) return window_access_t;
79  pragma inline (allocate_named);
80
81  procedure set_caption
82    (window  : window_access_t;
83     caption : string);
84  pragma inline (set_caption);
85
86  procedure set_icon
87    (window  : window_access_t;
88     surface : agar.gui.surface.surface_access_t);
89  pragma import (c, set_icon, "agar_window_set_icon");
90
91  procedure set_icon_no_copy
92    (window  : window_access_t;
93     surface : agar.gui.surface.surface_access_t);
94  pragma import (c, set_icon_no_copy, "agar_window_set_icon_no_copy");
95
96  procedure set_close_action
97    (window : window_access_t;
98     mode   : close_action_t);
99  pragma import (c, set_close_action, "AG_WindowSetCloseAction");
100
101  procedure set_padding
102    (window : window_access_t;
103     left   : natural;
104     right  : natural;
105     top    : natural;
106     bottom : natural);
107  pragma inline (set_padding);
108
109  procedure set_spacing
110    (window  : window_access_t;
111     spacing : natural);
112  pragma inline (set_spacing);
113
114  procedure set_position
115    (window    : window_access_t;
116     alignment : alignment_t;
117     cascade   : boolean);
118  pragma inline (set_position);
119
120  procedure set_geometry
121    (window : window_access_t;
122     x      : natural;
123     y      : natural;
124     width  : natural;
125     height : natural);
126  pragma inline (set_geometry);
127
128  procedure set_geometry_aligned
129    (window    : window_access_t;
130     alignment : alignment_t;
131     width     : positive;
132     height    : positive);
133  pragma inline (set_geometry_aligned);
134
135  procedure set_geometry_aligned_percent
136    (window    : window_access_t;
137     alignment : alignment_t;
138     width     : percent_t;
139     height    : percent_t);
140  pragma inline (set_geometry_aligned_percent);
141
142  procedure set_geometry_bounded
143    (window : window_access_t;
144     x      : natural;
145     y      : natural;
146     width  : natural;
147     height : natural);
148  pragma inline (set_geometry_bounded);
149
150  procedure set_geometry_max (window : window_access_t);
151  pragma import (c, set_geometry_max, "AG_WindowSetGeometryMax");
152
153  procedure set_minimum_size
154    (window : window_access_t;
155     width  : natural;
156     height : natural);
157  pragma inline (set_minimum_size);
158
159  procedure set_minimum_size_percentage
160    (window  : window_access_t;
161     percent : percent_t);
162  pragma inline (set_minimum_size_percentage);
163
164  procedure maximize (window : window_access_t);
165  pragma import (c, maximize, "AG_WindowMaximize");
166
167  procedure unmaximize (window : window_access_t);
168  pragma import (c, unmaximize, "AG_WindowUnmaximize");
169
170  procedure minimize (window : window_access_t);
171  pragma import (c, minimize, "AG_WindowMinimize");
172
173  procedure unminimize (window : window_access_t);
174  pragma import (c, unminimize, "AG_WindowUnminimize");
175
176  procedure attach
177    (window    : window_access_t;
178     subwindow : window_access_t);
179  pragma import (c, attach, "AG_WindowAttach");
180
181  procedure detach
182    (window    : window_access_t;
183     subwindow : window_access_t);
184  pragma import (c, detach, "AG_WindowDetach");
185
186  procedure update (window : window_access_t);
187  pragma import (c, update, "agar_window_update");
188
189  -- visibility
190
191  procedure show (window : window_access_t);
192  pragma import (c, show, "AG_WindowShow");
193
194  procedure hide (window : window_access_t);
195  pragma import (c, hide, "AG_WindowHide");
196
197  function is_visible (window : window_access_t) return c.int;
198  pragma import (c, is_visible, "agar_window_is_visible");
199
200  function is_visible (window : window_access_t) return boolean;
201  pragma inline (is_visible);
202
203  procedure set_visibility
204    (window  : window_access_t;
205     visible : boolean);
206  pragma inline (set_visibility);
207
208  -- focus
209
210  procedure focus (window : window_access_t);
211  pragma import (c, focus, "AG_WindowFocus");
212
213  function focus_named (name : string) return boolean;
214  pragma inline (focus_named);
215
216  function find_focused (window : window_access_t) return agar.gui.widget.widget_access_t;
217  pragma import (c, find_focused, "AG_WidgetFindFocused");
218
219  function is_focused (window : window_access_t) return c.int;
220  pragma import (c, is_focused, "agar_window_is_focused");
221
222  function is_focused (window : window_access_t) return boolean;
223  pragma inline (is_focused);
224
225  --
226
227  function widget (window : window_access_t) return agar.gui.widget.widget_access_t
228    renames agar.gui.types.window_widget;
229
230end agar.gui.window;
231