Changeset d284ce9 in mainline for uspace/lib/ui/src/window.c
- Timestamp:
- 2020-10-27T21:56:15Z (4 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- f03d1308
- Parents:
- f7a90df
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/ui/src/window.c
rf7a90df rd284ce9 37 37 #include <errno.h> 38 38 #include <gfx/context.h> 39 #include <io/pos_event.h> 39 40 #include <mem.h> 40 41 #include <stdlib.h> … … 44 45 #include "../private/dummygc.h" 45 46 #include "../private/ui.h" 47 #include "../private/wdecor.h" 46 48 #include "../private/window.h" 49 50 static void dwnd_close_event(void *); 51 static void dwnd_focus_event(void *); 52 static void dwnd_kbd_event(void *, kbd_event_t *); 53 static void dwnd_pos_event(void *, pos_event_t *); 54 static void dwnd_unfocus_event(void *); 55 56 static display_wnd_cb_t dwnd_cb = { 57 .close_event = dwnd_close_event, 58 .focus_event = dwnd_focus_event, 59 .kbd_event = dwnd_kbd_event, 60 .pos_event = dwnd_pos_event, 61 .unfocus_event = dwnd_unfocus_event 62 }; 63 64 static void wd_close(ui_wdecor_t *, void *); 65 static void wd_move(ui_wdecor_t *, void *, gfx_coord2_t *); 66 67 static ui_wdecor_cb_t wdecor_cb = { 68 .close = wd_close, 69 .move = wd_move 70 }; 47 71 48 72 /** Initialize window parameters structure. … … 53 77 * @param params Window parameters structure 54 78 */ 55 void ui_w indow_params_init(ui_window_params_t *params)56 { 57 memset(params, 0, sizeof(ui_w indow_params_t));79 void ui_wnd_params_init(ui_wnd_params_t *params) 80 { 81 memset(params, 0, sizeof(ui_wnd_params_t)); 58 82 } 59 83 … … 65 89 * @return EOK on success or an error code 66 90 */ 67 errno_t ui_window_create(ui_t *ui, ui_w indow_params_t *params,91 errno_t ui_window_create(ui_t *ui, ui_wnd_params_t *params, 68 92 ui_window_t **rwindow) 69 93 { … … 82 106 83 107 display_wnd_params_init(&dparams); 108 dparams.rect = params->rect; 84 109 85 110 if (ui->display != NULL) { 86 rc = display_window_create(ui->display, &dparams, NULL, NULL,87 &dwindow);111 rc = display_window_create(ui->display, &dparams, &dwnd_cb, 112 (void *) window, &dwindow); 88 113 if (rc != EOK) 89 114 goto error; … … 108 133 if (rc != EOK) 109 134 goto error; 135 136 ui_wdecor_set_rect(wdecor, ¶ms->rect); 137 ui_wdecor_set_cb(wdecor, &wdecor_cb, (void *) window); 138 ui_wdecor_paint(wdecor); 110 139 111 140 window->ui = ui; … … 145 174 } 146 175 176 /** Set window callbacks. 177 * 178 * @param window Window 179 * @param cb Window decoration callbacks 180 * @param arg Callback argument 181 */ 182 void ui_window_set_cb(ui_window_t *window, ui_window_cb_t *cb, void *arg) 183 { 184 window->cb = cb; 185 window->arg = arg; 186 } 187 188 ui_resource_t *ui_window_get_res(ui_window_t *window) 189 { 190 return window->res; 191 } 192 193 gfx_context_t *ui_window_get_gc(ui_window_t *window) 194 { 195 return window->gc; 196 } 197 198 void ui_window_get_app_rect(ui_window_t *window, gfx_rect_t *rect) 199 { 200 ui_wdecor_geom_t geom; 201 202 ui_wdecor_get_geom(window->wdecor, &geom); 203 *rect = geom.app_area_rect; 204 } 205 206 /** Handle window close event. */ 207 static void dwnd_close_event(void *arg) 208 { 209 ui_window_t *window = (ui_window_t *) arg; 210 211 ui_window_close(window); 212 } 213 214 /** Handle window focus event. */ 215 static void dwnd_focus_event(void *arg) 216 { 217 ui_window_t *window = (ui_window_t *) arg; 218 219 if (window->wdecor != NULL) { 220 ui_wdecor_set_active(window->wdecor, true); 221 ui_wdecor_paint(window->wdecor); 222 } 223 } 224 225 /** Handle window keyboard event */ 226 static void dwnd_kbd_event(void *arg, kbd_event_t *kbd_event) 227 { 228 ui_window_t *window = (ui_window_t *) arg; 229 230 (void) window; 231 (void) kbd_event; 232 } 233 234 /** Handle window position event */ 235 static void dwnd_pos_event(void *arg, pos_event_t *event) 236 { 237 ui_window_t *window = (ui_window_t *) arg; 238 239 /* Make sure we don't process events until fully initialized */ 240 if (window->wdecor == NULL) 241 return; 242 243 ui_wdecor_pos_event(window->wdecor, event); 244 ui_window_pos(window, event); 245 } 246 247 /** Handle window unfocus event. */ 248 static void dwnd_unfocus_event(void *arg) 249 { 250 ui_window_t *window = (ui_window_t *) arg; 251 252 if (window->wdecor != NULL) { 253 ui_wdecor_set_active(window->wdecor, false); 254 ui_wdecor_paint(window->wdecor); 255 } 256 } 257 258 /** Window decoration requested window closure. 259 * 260 * @param wdecor Window decoration 261 * @param arg Argument (demo) 262 */ 263 static void wd_close(ui_wdecor_t *wdecor, void *arg) 264 { 265 ui_window_t *window = (ui_window_t *) arg; 266 267 ui_window_close(window); 268 } 269 270 /** Window decoration requested window move. 271 * 272 * @param wdecor Window decoration 273 * @param arg Argument (demo) 274 * @param pos Position where the title bar was pressed 275 */ 276 static void wd_move(ui_wdecor_t *wdecor, void *arg, gfx_coord2_t *pos) 277 { 278 ui_window_t *window = (ui_window_t *) arg; 279 280 (void) display_window_move_req(window->dwindow, pos); 281 } 282 283 /** Send window close event. 284 * 285 * @param window Window 286 */ 287 void ui_window_close(ui_window_t *window) 288 { 289 if (window->cb != NULL && window->cb->close != NULL) 290 window->cb->close(window, window->arg); 291 } 292 293 /** Send window position event. 294 * 295 * @param window Window 296 */ 297 void ui_window_pos(ui_window_t *window, pos_event_t *pos) 298 { 299 if (window->cb != NULL && window->cb->pos != NULL) 300 window->cb->pos(window, window->arg, pos); 301 } 302 147 303 /** @} 148 304 */
Note:
See TracChangeset
for help on using the changeset viewer.