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