Changeset 0e6e77f in mainline for uspace/lib/gui/window.c
- Timestamp:
- 2020-02-28T15:44:55Z (5 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- a8eed5f
- Parents:
- 2a515dcd
- git-author:
- Jiri Svoboda <jiri@…> (2020-02-26 18:26:13)
- git-committer:
- Jiri Svoboda <jiri@…> (2020-02-28 15:44:55)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/gui/window.c
r2a515dcd r0e6e77f 382 382 sysarg_t width, sysarg_t height, window_placement_flags_t placement_flags) 383 383 { 384 display_wnd_params_t wparams;385 display_window_t *new_window = NULL;386 384 gfx_bitmap_params_t params; 387 385 gfx_bitmap_alloc_t alloc; 388 386 gfx_bitmap_t *new_bitmap = NULL; 389 gfx_context_t *new_gc = NULL; 387 gfx_coord2_t offs; 388 gfx_rect_t nrect; 390 389 errno_t rc; 391 390 … … 406 405 return; 407 406 408 display_wnd_params_init(&wparams);409 wparams.rect.p0.x = 0;410 wparams.rect.p0.y = 0;411 wparams.rect.p1.x = width;412 wparams.rect.p1.y = height;413 414 rc = display_window_create(win->display, &wparams, &window_cb,415 (void *) win, &new_window);416 if (rc != EOK) {417 surface_destroy(new_surface);418 return;419 }420 421 rc = display_window_get_gc(new_window, &new_gc);422 if (rc != EOK) {423 display_window_destroy(new_window);424 surface_destroy(new_surface);425 return;426 }427 428 407 params.rect.p0.x = 0; 429 408 params.rect.p0.y = 0; … … 435 414 alloc.pixels = surface_direct_access(new_surface); 436 415 437 rc = gfx_bitmap_create( new_gc, ¶ms, &alloc, &new_bitmap);416 rc = gfx_bitmap_create(win->gc, ¶ms, &alloc, &new_bitmap); 438 417 if (rc != EOK) { 439 gfx_context_delete(new_gc);440 display_window_destroy(new_window);441 418 surface_destroy(new_surface); 442 419 return; … … 447 424 surface_t *old_surface = win->surface; 448 425 gfx_bitmap_t *old_bitmap = win->bitmap; 449 display_window_t *old_window = win->dwindow;450 gfx_context_t *old_gc = win->gc;451 426 win->surface = new_surface; 452 427 win->bitmap = new_bitmap; 453 win->dwindow = new_window;454 win->gc = new_gc;455 428 fibril_mutex_unlock(&win->guard); 456 429 … … 465 438 fibril_mutex_unlock(&win->guard); 466 439 467 /* Inform compositor about new surface. */ 468 #if 0 469 errno_t rc = win_resize(win->osess, offset_x, offset_y, width, height, 470 placement_flags, surface_direct_access(new_surface)); 471 #endif 472 rc = EOK; 473 440 /* Resize the display window. */ 441 offs.x = offset_x; 442 offs.y = offset_y; 443 nrect.p0.x = 0; 444 nrect.p0.y = 0; 445 nrect.p1.x = width; 446 nrect.p1.y = height; 447 448 rc = display_window_resize(win->dwindow, &offs, &nrect); 474 449 if (rc != EOK) { 475 450 /* Rollback to old surface. Reverse all changes. */ … … 484 459 win->surface = old_surface; 485 460 win->bitmap = old_bitmap; 486 win->dwindow = old_window;487 win->gc = old_gc;488 461 fibril_mutex_unlock(&win->guard); 489 462 … … 498 471 surface_destroy(new_surface); 499 472 } else { 500 if (old_window != NULL)501 display_window_destroy(old_window);502 if (old_gc != NULL)503 gfx_context_delete(old_gc);504 473 if (old_bitmap != NULL) 505 474 gfx_bitmap_destroy(old_bitmap); … … 643 612 window_flags_t flags, const char *caption) 644 613 { 614 display_wnd_params_t wparams; 615 645 616 window_t *win = (window_t *) calloc(1, sizeof(window_t)); 646 617 if (!win) … … 663 634 win->grab = NULL; 664 635 win->focus = NULL; 665 win->surface = NULL; 636 637 /* Allocate resources for new surface. */ 638 win->surface = surface_create(100, 100, NULL, SURFACE_FLAG_SHARED); 639 if (win->surface == NULL) { 640 free(win); 641 return NULL; 642 } 666 643 667 644 errno_t rc = display_open(winreg, &win->display); 668 645 if (rc != EOK) { 646 surface_destroy(win->surface); 647 free(win); 648 return NULL; 649 } 650 651 /* Window dimensions are not know at this time */ 652 display_wnd_params_init(&wparams); 653 wparams.rect.p0.x = 0; 654 wparams.rect.p0.y = 0; 655 wparams.rect.p1.x = 100; 656 wparams.rect.p1.y = 100; 657 658 rc = display_window_create(win->display, &wparams, &window_cb, 659 (void *) win, &win->dwindow); 660 if (rc != EOK) { 661 display_close(win->display); 662 surface_destroy(win->surface); 663 free(win); 664 return NULL; 665 } 666 667 rc = display_window_get_gc(win->dwindow, &win->gc); 668 if (rc != EOK) { 669 display_window_destroy(win->dwindow); 670 display_close(win->display); 671 surface_destroy(win->surface); 669 672 free(win); 670 673 return NULL;
Note:
See TracChangeset
for help on using the changeset viewer.