Changeset 252d03c in mainline for uspace/lib/ui/src
- Timestamp:
- 2021-04-28T09:22:39Z (4 years ago)
- Branches:
- master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 7470d97
- Parents:
- de227aba
- Location:
- uspace/lib/ui/src
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/ui/src/msgdialog.c
rde227aba r252d03c 42 42 #include <ui/pbutton.h> 43 43 #include <ui/resource.h> 44 #include <ui/ui.h> 44 45 #include <ui/window.h> 45 46 #include "../private/msgdialog.h" … … 97 98 ui_wnd_params_init(&wparams); 98 99 wparams.caption = params->caption; 99 wparams.rect.p0.x = 0; 100 wparams.rect.p0.y = 0; 101 wparams.rect.p1.x = 200; 102 wparams.rect.p1.y = 110; 100 101 /* FIXME: Auto layout */ 102 if (ui_is_textmode(ui)) { 103 wparams.rect.p0.x = 0; 104 wparams.rect.p0.y = 0; 105 wparams.rect.p1.x = 20; 106 wparams.rect.p1.y = 7; 107 } else { 108 wparams.rect.p0.x = 0; 109 wparams.rect.p0.y = 0; 110 wparams.rect.p1.x = 200; 111 wparams.rect.p1.y = 110; 112 } 103 113 104 114 rc = ui_window_create(ui, &wparams, &window); … … 118 128 goto error; 119 129 120 rect.p0.x = 10; 121 rect.p0.y = 35; 122 rect.p1.x = 190; 123 rect.p1.y = 50; 130 /* FIXME: Auto layout */ 131 if (ui_is_textmode(ui)) { 132 rect.p0.x = 3; 133 rect.p0.y = 2; 134 rect.p1.x = 17; 135 rect.p1.y = 3; 136 } else { 137 rect.p0.x = 10; 138 rect.p0.y = 35; 139 rect.p1.x = 190; 140 rect.p1.y = 50; 141 } 142 124 143 ui_label_set_rect(label, &rect); 125 144 ui_label_set_halign(label, gfx_halign_center); … … 137 156 ui_pbutton_set_cb(bok, &ui_msg_dialog_btn_cb, dialog); 138 157 139 rect.p0.x = 55; 140 rect.p0.y = 60; 141 rect.p1.x = 145; 142 rect.p1.y = 88; 158 /* FIXME: Auto layout */ 159 if (ui_is_textmode(ui)) { 160 rect.p0.x = 8; 161 rect.p0.y = 4; 162 rect.p1.x = 12; 163 rect.p1.y = 5; 164 } else { 165 rect.p0.x = 55; 166 rect.p0.y = 60; 167 rect.p1.x = 145; 168 rect.p1.y = 88; 169 } 170 143 171 ui_pbutton_set_rect(bok, &rect); 144 172 -
uspace/lib/ui/src/ui.c
rde227aba r252d03c 34 34 */ 35 35 36 #include <adt/list.h> 36 37 #include <ctype.h> 37 38 #include <display.h> … … 45 46 #include <ui/ui.h> 46 47 #include <ui/wdecor.h> 48 #include <ui/window.h> 47 49 #include "../private/window.h" 48 50 #include "../private/ui.h" … … 104 106 display_t *display; 105 107 console_ctrl_t *console; 108 console_gc_t *cgc; 106 109 ui_winsys_t ws; 107 110 const char *osvc; … … 131 134 return rc; 132 135 } 136 137 rc = console_gc_create(console, NULL, &cgc); 138 if (rc != EOK) { 139 ui_destroy(ui); 140 console_done(console); 141 return rc; 142 } 143 144 ui->cgc = cgc; 133 145 } else { 134 146 return EINVAL; … … 154 166 155 167 ui->console = console; 168 list_initialize(&ui->windows); 156 169 *rui = ui; 157 170 return EOK; … … 173 186 174 187 ui->display = disp; 188 list_initialize(&ui->windows); 175 189 *rui = ui; 176 190 return EOK; … … 187 201 188 202 if (ui->myoutput) { 203 if (ui->cgc != NULL) 204 console_gc_delete(ui->cgc); 189 205 if (ui->console != NULL) 190 206 console_done(ui->console); … … 198 214 static void ui_cons_event_process(ui_t *ui, cons_event_t *event) 199 215 { 200 if (ui->root_wnd == NULL) 216 ui_window_t *awnd; 217 ui_evclaim_t claim; 218 219 awnd = ui_window_get_active(ui); 220 if (awnd == NULL) 201 221 return; 202 222 203 223 switch (event->type) { 204 224 case CEV_KEY: 205 ui_window_send_kbd( ui->root_wnd, &event->ev.key);225 ui_window_send_kbd(awnd, &event->ev.key); 206 226 break; 207 227 case CEV_POS: 208 ui_wdecor_pos_event(ui->root_wnd->wdecor, &event->ev.pos); 209 ui_window_send_pos(ui->root_wnd, &event->ev.pos); 228 claim = ui_wdecor_pos_event(awnd->wdecor, &event->ev.pos); 229 /* Note: If event is claimed, awnd might not be valid anymore */ 230 if (claim == ui_unclaimed) 231 ui_window_send_pos(awnd, &event->ev.pos); 210 232 break; 211 233 } … … 248 270 } 249 271 272 /** Repaint UI (only used in fullscreen mode). 273 * 274 * This is used when an area is exposed in fullscreen mode. 275 * 276 * @param ui UI 277 * @return @c EOK on success or an error code 278 */ 279 errno_t ui_paint(ui_t *ui) 280 { 281 errno_t rc; 282 ui_window_t *awnd; 283 284 /* XXX Should repaint all windows */ 285 awnd = ui_window_get_active(ui); 286 if (awnd == NULL) 287 return EOK; 288 289 rc = ui_wdecor_paint(awnd->wdecor); 290 if (rc != EOK) 291 return rc; 292 293 return ui_window_paint(awnd); 294 } 295 250 296 /** Terminate user interface. 251 297 * … … 275 321 } 276 322 323 /** Determine if we are emulating windows. 324 * 325 * @param ui User interface 326 * @return @c true iff we are running in text mode 327 */ 328 bool ui_is_fullscreen(ui_t *ui) 329 { 330 return (ui->display == NULL); 331 } 332 277 333 /** @} 278 334 */ -
uspace/lib/ui/src/wdecor.c
rde227aba r252d03c 556 556 * @param wdecor Window decoration 557 557 * @param pos_event Position event 558 */ 559 void ui_wdecor_pos_event(ui_wdecor_t *wdecor, pos_event_t *event) 558 * @return @c ui_claimed iff event was claimed 559 */ 560 ui_evclaim_t ui_wdecor_pos_event(ui_wdecor_t *wdecor, pos_event_t *event) 560 561 { 561 562 gfx_coord2_t pos; … … 571 572 claim = ui_pbutton_pos_event(wdecor->btn_close, event); 572 573 if (claim == ui_claimed) 573 return ;574 return ui_claimed; 574 575 } 575 576 576 577 ui_wdecor_frame_pos_event(wdecor, event); 577 578 578 if ((wdecor->style & ui_wds_titlebar) != 0) 579 if ((wdecor->style & ui_wds_titlebar) != 0) { 579 580 if (event->type == POS_PRESS && 580 gfx_pix_inside_rect(&pos, &geom.title_bar_rect)) 581 gfx_pix_inside_rect(&pos, &geom.title_bar_rect)) { 581 582 ui_wdecor_move(wdecor, &pos); 582 } 583 return ui_claimed; 584 } 585 } 586 587 return ui_unclaimed; 583 588 } 584 589 -
uspace/lib/ui/src/window.c
rde227aba r252d03c 133 133 gfx_bitmap_t *bmp = NULL; 134 134 mem_gc_t *memgc = NULL; 135 console_gc_t *cgc = NULL;136 135 errno_t rc; 137 138 if (ui->root_wnd != NULL)139 return EEXIST;140 136 141 137 window = calloc(1, sizeof(ui_window_t)); … … 202 198 goto error; 203 199 } else if (ui->console != NULL) { 204 rc = console_gc_create(ui->console, NULL, &cgc); 205 if (rc != EOK) 206 goto error; 207 208 gc = console_gc_get_ctx(cgc); 200 gc = console_gc_get_ctx(ui->cgc); 209 201 } else { 210 202 /* Needed for unit tests */ … … 257 249 window->gc = gc; 258 250 #endif 259 window->cgc = cgc;260 251 261 252 rc = ui_resource_create(window->gc, ui_is_textmode(ui), &res); … … 282 273 *rwindow = window; 283 274 284 ui->root_wnd = window;275 list_append(&window->lwindows, &ui->windows); 285 276 return EOK; 286 277 error: … … 295 286 if (dgc != NULL) 296 287 dummygc_destroy(dgc); 297 if (cgc != NULL)298 console_gc_delete(cgc);299 288 if (dwindow != NULL) 300 289 display_window_destroy(dwindow); … … 309 298 void ui_window_destroy(ui_window_t *window) 310 299 { 300 ui_t *ui; 301 311 302 if (window == NULL) 312 303 return; 313 304 305 ui = window->ui; 306 307 list_remove(&window->lwindows); 314 308 ui_control_destroy(window->control); 315 309 ui_wdecor_destroy(window->wdecor); … … 328 322 if (window->dwindow != NULL) 329 323 display_window_destroy(window->dwindow); 330 if (window->cgc != NULL) 331 console_gc_delete(window->cgc); 324 332 325 free(window); 326 327 /* Need to repaint if windows are emulated */ 328 if (ui_is_fullscreen(ui)) { 329 ui_paint(ui); 330 } 333 331 } 334 332 … … 362 360 window->control = NULL; 363 361 control->elemp = NULL; 362 } 363 364 /** Get active window (only valid in fullscreen mode). 365 * 366 * @param ui User interface 367 * @return Active window 368 */ 369 ui_window_t *ui_window_get_active(ui_t *ui) 370 { 371 link_t *link; 372 373 link = list_last(&ui->windows); 374 if (link == NULL) 375 return NULL; 376 377 return list_get_instance(link, ui_window_t, lwindows); 364 378 } 365 379
Note:
See TracChangeset
for help on using the changeset viewer.