Changeset 266ec54 in mainline


Ignore:
Timestamp:
2020-11-28T23:06:31Z (3 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
db3c6795
Parents:
554a5f1
git-author:
Jiri Svoboda <jiri@…> (2020-11-27 22:30:28)
git-committer:
Jiri Svoboda <jiri@…> (2020-11-28 23:06:31)
Message:

Viewer fullsreen mode

Fullscreen window placement is more of a stopgap. Proper
solution would probably be via maximizing the window.

Location:
uspace
Files:
14 edited

Legend:

Unmodified
Added
Removed
  • uspace/app/barber/barber.c

    r554a5f1 r266ec54  
    367367         * to rect
    368368         */
    369         ui_wdecor_rect_from_app(&rect, &wrect);
     369        ui_wdecor_rect_from_app(params.style, &rect, &wrect);
    370370        off = wrect.p0;
    371371        gfx_rect_rtranslate(&off, &wrect, &params.rect);
  • uspace/app/fontedit/fontedit.c

    r554a5f1 r266ec54  
    717717         * to rect
    718718         */
    719         ui_wdecor_rect_from_app(&rect, &wrect);
     719        ui_wdecor_rect_from_app(params.style, &rect, &wrect);
    720720        off = wrect.p0;
    721721        gfx_rect_rtranslate(&off, &wrect, &params.rect);
  • uspace/app/gfxdemo/gfxdemo.c

    r554a5f1 r266ec54  
    751751         * to rect
    752752         */
    753         ui_wdecor_rect_from_app(&rect, &wrect);
     753        ui_wdecor_rect_from_app(params.style, &rect, &wrect);
    754754        off = wrect.p0;
    755755        gfx_rect_rtranslate(&off, &wrect, &params.rect);
  • uspace/app/terminal/terminal.c

    r554a5f1 r266ec54  
    818818         * to rect
    819819         */
    820         ui_wdecor_rect_from_app(&rect, &wrect);
     820        ui_wdecor_rect_from_app(wparams.style, &rect, &wrect);
    821821        off = wrect.p0;
    822822        gfx_rect_rtranslate(&off, &wrect, &wparams.rect);
  • uspace/app/viewer/viewer.c

    r554a5f1 r266ec54  
    181181
    182182        ui_window_get_app_rect(window, &arect);
    183         gfx_rect_translate(&arect.p0, rect, &irect);
     183
     184        /* Center image on application area */
     185        gfx_rect_ctr_on_rect(rect, &arect, &irect);
    184186
    185187        if (image != NULL) {
     
    239241                        display_spec = argv[i++];
    240242                } else if (str_cmp(argv[i], "-f") == 0) {
     243                        ++i;
    241244                        fullscreen = true;
    242245                } else {
     
    266269                        return 3;
    267270                }
    268         }
    269 
    270         // TODO Fullscreen mode
    271         if (fullscreen) {
    272                 printf("Fullscreen mode not implemented.\n");
    273                 return 1;
    274271        }
    275272
     
    293290        params.rect.p1.y = 1;
    294291
     292        if (fullscreen) {
     293                params.style &= ~ui_wds_decorated;
     294                params.placement = ui_wnd_place_full_screen;
     295        }
     296
    295297        rc = ui_window_create(ui, &params, &window);
    296298        if (rc != EOK) {
     
    312314         * to rect
    313315         */
    314         ui_wdecor_rect_from_app(&lrect, &wrect);
     316        ui_wdecor_rect_from_app(params.style, &lrect, &wrect);
    315317        off = wrect.p0;
    316318        gfx_rect_rtranslate(&off, &wrect, &rect);
    317         rc = ui_window_resize(window, &rect);
    318         if (rc != EOK) {
    319                 printf("Error resizing window.\n");
    320                 return 1;
     319
     320        if (!fullscreen) {
     321                rc = ui_window_resize(window, &rect);
     322                if (rc != EOK) {
     323                        printf("Error resizing window.\n");
     324                        return 1;
     325                }
    321326        }
    322327
  • uspace/lib/gfx/include/gfx/coord.h

    r554a5f1 r266ec54  
    5252extern void gfx_rect_envelope(gfx_rect_t *, gfx_rect_t *, gfx_rect_t *);
    5353extern void gfx_rect_clip(gfx_rect_t *, gfx_rect_t *, gfx_rect_t *);
     54extern void gfx_rect_ctr_on_rect(gfx_rect_t *, gfx_rect_t *, gfx_rect_t *);
    5455extern void gfx_rect_points_sort(gfx_rect_t *, gfx_rect_t *);
    5556extern void gfx_rect_dims(gfx_rect_t *, gfx_coord2_t *);
  • uspace/lib/gfx/src/coord.c

    r554a5f1 r266ec54  
    238238}
    239239
     240/** Center rectangle on rectangle.
     241 *
     242 * Translate rectangle @a a so that its center coincides with the
     243 * center of rectangle @a b, saving the result in @a dest.
     244 *
     245 * @param a Rectnagle to translate
     246 * @param b Rectangle on which to center
     247 * @param dest Place to store resulting rectangle
     248 */
     249void gfx_rect_ctr_on_rect(gfx_rect_t *a, gfx_rect_t *b, gfx_rect_t *dest)
     250{
     251        gfx_coord2_t adim;
     252        gfx_coord2_t bdim;
     253
     254        gfx_rect_dims(a, &adim);
     255        gfx_rect_dims(b, &bdim);
     256
     257        dest->p0.x = b->p0.x + bdim.x / 2 - adim.x / 2;
     258        dest->p0.y = b->p0.y + bdim.y / 2 - adim.y / 2;
     259
     260        dest->p1.x = dest->p0.x + adim.x;
     261        dest->p1.y = dest->p0.y + adim.y;
     262}
     263
    240264/** Sort points of a rectangle.
    241265 *
  • uspace/lib/gfx/test/coord.c

    r554a5f1 r266ec54  
    597597}
    598598
     599/** Center rectangle on rectangle */
     600PCUT_TEST(rect_ctr_on_rect)
     601{
     602        gfx_rect_t a;
     603        gfx_rect_t b;
     604        gfx_rect_t dest;
     605
     606        /* Dimensions: 20 x 20 */
     607        b.p0.x = 10;
     608        b.p0.y = 20;
     609        b.p1.x = 30;
     610        b.p1.y = 40;
     611
     612        /* Dimensions: 20 x 20 */
     613        a.p0.x = 100;
     614        a.p0.y = 200;
     615        a.p1.x = 120;
     616        a.p1.y = 220;
     617
     618        /* Centering rectangle of same size should give us the same rectangle */
     619        gfx_rect_ctr_on_rect(&a, &b, &dest);
     620        PCUT_ASSERT_INT_EQUALS(b.p0.x, dest.p0.x);
     621        PCUT_ASSERT_INT_EQUALS(b.p0.y, dest.p0.y);
     622        PCUT_ASSERT_INT_EQUALS(b.p1.x, dest.p1.x);
     623        PCUT_ASSERT_INT_EQUALS(b.p1.y, dest.p1.y);
     624
     625        /* Dimensions: 10 x 10 */
     626        a.p0.x = 100;
     627        a.p0.y = 200;
     628        a.p1.x = 110;
     629        a.p1.y = 210;
     630
     631        gfx_rect_ctr_on_rect(&a, &b, &dest);
     632        PCUT_ASSERT_INT_EQUALS(15, dest.p0.x);
     633        PCUT_ASSERT_INT_EQUALS(25, dest.p0.y);
     634        PCUT_ASSERT_INT_EQUALS(25, dest.p1.x);
     635        PCUT_ASSERT_INT_EQUALS(35, dest.p1.y);
     636}
     637
    599638/** Sort span points that are already sorted should produde indentical points */
    600639PCUT_TEST(rect_points_sort_sorted)
  • uspace/lib/ui/include/types/ui/wdecor.h

    r554a5f1 r266ec54  
    4545/** Window decoration style */
    4646typedef enum {
     47        /** No style bits */
    4748        ui_wds_none = 0x0,
    48         ui_wds_resizable = 0x1
     49        /** Window has a frame */
     50        ui_wds_frame = 0x1,
     51        /** Window has a title bar */
     52        ui_wds_titlebar = 0x2,
     53        /** Window has a close button */
     54        ui_wds_close_btn = 0x4,
     55        /** Window is resizable */
     56        ui_wds_resizable = 0x8,
     57        /** Window is decorated (default decoration) */
     58        ui_wds_decorated = ui_wds_frame | ui_wds_titlebar | ui_wds_close_btn
    4959} ui_wdecor_style_t;
    5060
  • uspace/lib/ui/include/types/ui/window.h

    r554a5f1 r266ec54  
    5656        ui_wnd_place_bottom_left,
    5757        /** Place window to the bottom-right corner of the screen */
    58         ui_wnd_place_bottom_right
     58        ui_wnd_place_bottom_right,
     59        /** Place window accross the entire screen */
     60        ui_wnd_place_full_screen
    5961} ui_wnd_placement_t;
    6062
  • uspace/lib/ui/include/ui/wdecor.h

    r554a5f1 r266ec54  
    5252extern errno_t ui_wdecor_paint(ui_wdecor_t *);
    5353extern void ui_wdecor_pos_event(ui_wdecor_t *, pos_event_t *);
    54 extern void ui_wdecor_rect_from_app(gfx_rect_t *, gfx_rect_t *);
     54extern void ui_wdecor_rect_from_app(ui_wdecor_style_t, gfx_rect_t *,
     55    gfx_rect_t *);
    5556
    5657#endif
  • uspace/lib/ui/src/wdecor.c

    r554a5f1 r266ec54  
    173173        ui_wdecor_get_geom(wdecor, &geom);
    174174
    175         rc = ui_paint_bevel(wdecor->res->gc, &rect,
    176             wdecor->res->wnd_frame_hi_color,
    177             wdecor->res->wnd_frame_sh_color, 1, &rect);
    178         if (rc != EOK)
    179                 return rc;
    180 
    181         rc = ui_paint_bevel(wdecor->res->gc, &rect,
    182             wdecor->res->wnd_highlight_color,
    183             wdecor->res->wnd_shadow_color, 1, &rect);
    184         if (rc != EOK)
    185                 return rc;
    186 
    187         rc = ui_paint_bevel(wdecor->res->gc, &rect,
    188             wdecor->res->wnd_face_color,
    189             wdecor->res->wnd_face_color, 2, &rect);
    190         if (rc != EOK)
    191                 return rc;
    192 
    193         trect = geom.title_bar_rect;
    194 
    195         rc = ui_paint_bevel(wdecor->res->gc, &trect,
    196             wdecor->res->wnd_shadow_color,
    197             wdecor->res->wnd_highlight_color, 1, &trect);
    198         if (rc != EOK)
    199                 return rc;
    200 
    201         rc = gfx_set_color(wdecor->res->gc, wdecor->active ?
    202             wdecor->res->tbar_act_bg_color :
    203             wdecor->res->tbar_inact_bg_color);
    204         if (rc != EOK)
    205                 return rc;
    206 
    207         rc = gfx_fill_rect(wdecor->res->gc, &trect);
    208         if (rc != EOK)
    209                 return rc;
    210 
    211         gfx_text_fmt_init(&fmt);
    212         fmt.halign = gfx_halign_center;
    213         fmt.valign = gfx_valign_center;
    214 
    215         pos.x = (trect.p0.x + trect.p1.x) / 2;
    216         pos.y = (trect.p0.y + trect.p1.y) / 2;
    217 
    218         rc = gfx_set_color(wdecor->res->gc, wdecor->active ?
    219             wdecor->res->tbar_act_text_color :
    220             wdecor->res->tbar_inact_text_color);
    221         if (rc != EOK)
    222                 return rc;
    223 
    224         rc = gfx_puttext(wdecor->res->font, &pos, &fmt, wdecor->caption);
    225         if (rc != EOK)
    226                 return rc;
    227 
    228         rc = ui_pbutton_paint(wdecor->btn_close);
    229         if (rc != EOK)
    230                 return rc;
     175        if ((wdecor->style & ui_wds_frame) != 0) {
     176                rc = ui_paint_bevel(wdecor->res->gc, &rect,
     177                    wdecor->res->wnd_frame_hi_color,
     178                    wdecor->res->wnd_frame_sh_color, 1, &rect);
     179                if (rc != EOK)
     180                        return rc;
     181
     182                rc = ui_paint_bevel(wdecor->res->gc, &rect,
     183                    wdecor->res->wnd_highlight_color,
     184                    wdecor->res->wnd_shadow_color, 1, &rect);
     185                if (rc != EOK)
     186                        return rc;
     187
     188                rc = ui_paint_bevel(wdecor->res->gc, &rect,
     189                    wdecor->res->wnd_face_color,
     190                    wdecor->res->wnd_face_color, 2, &rect);
     191                if (rc != EOK)
     192                        return rc;
     193        }
     194
     195        if ((wdecor->style & ui_wds_titlebar) != 0) {
     196                trect = geom.title_bar_rect;
     197
     198                rc = ui_paint_bevel(wdecor->res->gc, &trect,
     199                    wdecor->res->wnd_shadow_color,
     200                    wdecor->res->wnd_highlight_color, 1, &trect);
     201                if (rc != EOK)
     202                        return rc;
     203
     204                rc = gfx_set_color(wdecor->res->gc, wdecor->active ?
     205                    wdecor->res->tbar_act_bg_color :
     206                    wdecor->res->tbar_inact_bg_color);
     207                if (rc != EOK)
     208                        return rc;
     209
     210                rc = gfx_fill_rect(wdecor->res->gc, &trect);
     211                if (rc != EOK)
     212                        return rc;
     213
     214                gfx_text_fmt_init(&fmt);
     215                fmt.halign = gfx_halign_center;
     216                fmt.valign = gfx_valign_center;
     217
     218                pos.x = (trect.p0.x + trect.p1.x) / 2;
     219                pos.y = (trect.p0.y + trect.p1.y) / 2;
     220
     221                rc = gfx_set_color(wdecor->res->gc, wdecor->active ?
     222                    wdecor->res->tbar_act_text_color :
     223                    wdecor->res->tbar_inact_text_color);
     224                if (rc != EOK)
     225                        return rc;
     226
     227                rc = gfx_puttext(wdecor->res->font, &pos, &fmt, wdecor->caption);
     228                if (rc != EOK)
     229                        return rc;
     230
     231                if ((wdecor->style & ui_wds_close_btn) != 0) {
     232                        rc = ui_pbutton_paint(wdecor->btn_close);
     233                        if (rc != EOK)
     234                                return rc;
     235                }
     236        }
    231237
    232238        return EOK;
     
    285291void ui_wdecor_get_geom(ui_wdecor_t *wdecor, ui_wdecor_geom_t *geom)
    286292{
    287         geom->interior_rect.p0.x = wdecor->rect.p0.x + 4;
    288         geom->interior_rect.p0.y = wdecor->rect.p0.y + 4;
    289         geom->interior_rect.p1.x = wdecor->rect.p1.x - 4;
    290         geom->interior_rect.p1.y = wdecor->rect.p1.y - 4;
    291 
    292         geom->title_bar_rect.p0 = geom->interior_rect.p0;
    293         geom->title_bar_rect.p1.x = geom->interior_rect.p1.x;
    294         geom->title_bar_rect.p1.y = geom->interior_rect.p0.y + 22;
    295 
    296         geom->btn_close_rect.p0.x = geom->title_bar_rect.p1.x - 1 - 20;
    297         geom->btn_close_rect.p0.y = geom->title_bar_rect.p0.y + 1;
    298         geom->btn_close_rect.p1.x = geom->title_bar_rect.p1.x - 1;
    299         geom->btn_close_rect.p1.y = geom->title_bar_rect.p0.y + 1 + 20;
    300 
    301         geom->app_area_rect.p0.x = geom->interior_rect.p0.x;
    302         geom->app_area_rect.p0.y = geom->title_bar_rect.p1.y;
    303         geom->app_area_rect.p1 = geom->interior_rect.p1;
     293        /* Does window have a frame? */
     294        if ((wdecor->style & ui_wds_frame) != 0) {
     295                geom->interior_rect.p0.x = wdecor->rect.p0.x + 4;
     296                geom->interior_rect.p0.y = wdecor->rect.p0.y + 4;
     297                geom->interior_rect.p1.x = wdecor->rect.p1.x - 4;
     298                geom->interior_rect.p1.y = wdecor->rect.p1.y - 4;
     299        } else {
     300                geom->interior_rect = wdecor->rect;
     301        }
     302
     303        /* Does window have a title bar? */
     304        if ((wdecor->style & ui_wds_titlebar) != 0) {
     305                geom->title_bar_rect.p0 = geom->interior_rect.p0;
     306                geom->title_bar_rect.p1.x = geom->interior_rect.p1.x;
     307                geom->title_bar_rect.p1.y = geom->interior_rect.p0.y + 22;
     308
     309                geom->app_area_rect.p0.x = geom->interior_rect.p0.x;
     310                geom->app_area_rect.p0.y = geom->title_bar_rect.p1.y;
     311                geom->app_area_rect.p1 = geom->interior_rect.p1;
     312        } else {
     313                geom->title_bar_rect.p0.x = 0;
     314                geom->title_bar_rect.p0.y = 0;
     315                geom->title_bar_rect.p1.x = 0;
     316                geom->title_bar_rect.p1.y = 0;
     317
     318                geom->app_area_rect = geom->interior_rect;
     319        }
     320
     321        /* Does window have a close button? */
     322        if ((wdecor->style & ui_wds_close_btn) != 0) {
     323                geom->btn_close_rect.p0.x = geom->title_bar_rect.p1.x - 1 - 20;
     324                geom->btn_close_rect.p0.y = geom->title_bar_rect.p0.y + 1;
     325                geom->btn_close_rect.p1.x = geom->title_bar_rect.p1.x - 1;
     326                geom->btn_close_rect.p1.y = geom->title_bar_rect.p0.y + 1 + 20;
     327        } else {
     328                geom->btn_close_rect.p0.x = 0;
     329                geom->btn_close_rect.p0.y = 0;
     330                geom->btn_close_rect.p1.x = 0;
     331                geom->btn_close_rect.p1.y = 0;
     332        }
    304333}
    305334
     
    310339 * and its decoration.
    311340 *
     341 * @param style Decoration style
    312342 * @param app Application area rectangle
    313343 * @param rect Place to store (outer) window decoration rectangle
    314344 */
    315 void ui_wdecor_rect_from_app(gfx_rect_t *app, gfx_rect_t *rect)
    316 {
    317         rect->p0.x = app->p0.x - 4;
    318         rect->p0.y = app->p0.y - 22 - 4;
    319         rect->p1.x = app->p1.x + 4;
    320         rect->p1.y = app->p1.y + 4;
     345void ui_wdecor_rect_from_app(ui_wdecor_style_t style, gfx_rect_t *app,
     346    gfx_rect_t *rect)
     347{
     348        *rect = *app;
     349
     350        if ((style & ui_wds_frame) != 0) {
     351                rect->p0.x -= wdecor_edge_w;
     352                rect->p0.y -= wdecor_edge_h;
     353                rect->p1.x += wdecor_edge_w;
     354                rect->p1.y += wdecor_edge_h;
     355        }
     356
     357        if ((style & ui_wds_titlebar) != 0)
     358                rect->p0.y -= 22;
    321359}
    322360
     
    471509        ui_wdecor_get_geom(wdecor, &geom);
    472510
    473         claim = ui_pbutton_pos_event(wdecor->btn_close, event);
    474         if (claim == ui_claimed)
    475                 return;
     511        if ((wdecor->style & ui_wds_close_btn) != 0) {
     512                claim = ui_pbutton_pos_event(wdecor->btn_close, event);
     513                if (claim == ui_claimed)
     514                        return;
     515        }
    476516
    477517        ui_wdecor_frame_pos_event(wdecor, event);
    478518
    479         if (event->type == POS_PRESS &&
    480             gfx_pix_inside_rect(&pos, &geom.title_bar_rect))
    481                 ui_wdecor_move(wdecor, &pos);
     519        if ((wdecor->style & ui_wds_titlebar) != 0)  {
     520                if (event->type == POS_PRESS &&
     521                    gfx_pix_inside_rect(&pos, &geom.title_bar_rect))
     522                        ui_wdecor_move(wdecor, &pos);
     523        }
    482524}
    483525
  • uspace/lib/ui/src/window.c

    r554a5f1 r266ec54  
    8989 *
    9090 * Window parameters structure must always be initialized using this function
    91  * first.
     91 * first. By default, the window will be decorated. To get a non-decorated
     92 * window, one needs to clear ui_wds_decorated
     93 * (e.g. params->style &= ~ui_wds_decorated).
    9294 *
    9395 * @param params Window parameters structure
     
    9698{
    9799        memset(params, 0, sizeof(ui_wnd_params_t));
     100
     101        /* Make window decorated by default. */
     102        params->style = ui_wds_decorated;
    98103}
    99104
     
    111116        display_info_t info;
    112117        gfx_coord2_t pos;
     118        gfx_coord2_t scr_dims;
    113119        display_wnd_params_t dparams;
    114120        display_window_t *dwindow = NULL;
     
    129135
    130136        if (ui->display != NULL) {
     137                if (params->placement != ui_wnd_place_default) {
     138                        rc = display_get_info(ui->display, &info);
     139                        if (rc != EOK)
     140                                goto error;
     141                }
     142
     143                if (params->placement == ui_wnd_place_full_screen) {
     144                        /* Make window the size of the screen */
     145                        gfx_rect_dims(&info.rect, &scr_dims);
     146                        gfx_coord2_add(&dparams.rect.p0, &scr_dims,
     147                            &dparams.rect.p1);
     148                }
     149
    131150                rc = display_window_create(ui->display, &dparams, &dwnd_cb,
    132151                    (void *) window, &dwindow);
     
    135154
    136155                if (params->placement != ui_wnd_place_default) {
    137                         rc = display_get_info(ui->display, &info);
    138                         if (rc != EOK)
    139                                 goto error;
    140 
    141156                        pos.x = 0;
    142157                        pos.y = 0;
     
    146161                                assert(false);
    147162                        case ui_wnd_place_top_left:
     163                        case ui_wnd_place_full_screen:
    148164                                pos.x = info.rect.p0.x - params->rect.p0.x;
    149165                                pos.y = info.rect.p0.y - params->rect.p0.y;
     
    188204                goto error;
    189205
    190         ui_wdecor_set_rect(wdecor, &params->rect);
     206        ui_wdecor_set_rect(wdecor, &dparams.rect);
    191207        ui_wdecor_set_cb(wdecor, &wdecor_cb, (void *) window);
    192208        ui_wdecor_paint(wdecor);
     
    194210        window->ui = ui;
    195211        window->dwindow = dwindow;
    196         window->rect = params->rect;
     212        window->rect = dparams.rect;
    197213        window->gc = gc;
    198214        window->res = res;
  • uspace/lib/ui/test/wdecor.c

    r554a5f1 r266ec54  
    360360        errno_t rc;
    361361
    362         rc = ui_wdecor_create(NULL, "Hello", ui_wds_none, &wdecor);
     362        rc = ui_wdecor_create(NULL, "Hello", ui_wds_decorated, &wdecor);
    363363        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    364364
     
    388388}
    389389
    390 /** ui_wdecor_get_geom() produces the correct geometry */
    391 PCUT_TEST(get_geom)
     390/** ui_wdecor_get_geom() with ui_wds_none produces the correct geometry */
     391PCUT_TEST(get_geom_none)
    392392{
    393393        ui_wdecor_t *wdecor;
     
    407407        ui_wdecor_get_geom(wdecor, &geom);
    408408
     409        PCUT_ASSERT_INT_EQUALS(10, geom.interior_rect.p0.x);
     410        PCUT_ASSERT_INT_EQUALS(20, geom.interior_rect.p0.y);
     411        PCUT_ASSERT_INT_EQUALS(100, geom.interior_rect.p1.x);
     412        PCUT_ASSERT_INT_EQUALS(200, geom.interior_rect.p1.y);
     413
     414        PCUT_ASSERT_INT_EQUALS(0, geom.title_bar_rect.p0.x);
     415        PCUT_ASSERT_INT_EQUALS(0, geom.title_bar_rect.p0.y);
     416        PCUT_ASSERT_INT_EQUALS(0, geom.title_bar_rect.p1.x);
     417        PCUT_ASSERT_INT_EQUALS(0, geom.title_bar_rect.p1.y);
     418
     419        PCUT_ASSERT_INT_EQUALS(0, geom.btn_close_rect.p0.x);
     420        PCUT_ASSERT_INT_EQUALS(0, geom.btn_close_rect.p0.y);
     421        PCUT_ASSERT_INT_EQUALS(0, geom.btn_close_rect.p1.x);
     422        PCUT_ASSERT_INT_EQUALS(0, geom.btn_close_rect.p1.y);
     423
     424        PCUT_ASSERT_INT_EQUALS(10, geom.app_area_rect.p0.x);
     425        PCUT_ASSERT_INT_EQUALS(20, geom.app_area_rect.p0.y);
     426        PCUT_ASSERT_INT_EQUALS(100, geom.app_area_rect.p1.x);
     427        PCUT_ASSERT_INT_EQUALS(200, geom.app_area_rect.p1.y);
     428
     429        ui_wdecor_destroy(wdecor);
     430}
     431
     432/** ui_wdecor_get_geom() with ui_wds_frame produces the correct geometry */
     433PCUT_TEST(get_geom_frame)
     434{
     435        ui_wdecor_t *wdecor;
     436        gfx_rect_t rect;
     437        ui_wdecor_geom_t geom;
     438        errno_t rc;
     439
     440        rc = ui_wdecor_create(NULL, "Hello", ui_wds_frame, &wdecor);
     441        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     442
     443        rect.p0.x = 10;
     444        rect.p0.y = 20;
     445        rect.p1.x = 100;
     446        rect.p1.y = 200;
     447
     448        ui_wdecor_set_rect(wdecor, &rect);
     449        ui_wdecor_get_geom(wdecor, &geom);
     450
    409451        PCUT_ASSERT_INT_EQUALS(14, geom.interior_rect.p0.x);
    410452        PCUT_ASSERT_INT_EQUALS(24, geom.interior_rect.p0.y);
     
    412454        PCUT_ASSERT_INT_EQUALS(196, geom.interior_rect.p1.y);
    413455
     456        PCUT_ASSERT_INT_EQUALS(0, geom.title_bar_rect.p0.x);
     457        PCUT_ASSERT_INT_EQUALS(0, geom.title_bar_rect.p0.y);
     458        PCUT_ASSERT_INT_EQUALS(0, geom.title_bar_rect.p1.x);
     459        PCUT_ASSERT_INT_EQUALS(0, geom.title_bar_rect.p1.y);
     460
     461        PCUT_ASSERT_INT_EQUALS(0, geom.btn_close_rect.p0.x);
     462        PCUT_ASSERT_INT_EQUALS(0, geom.btn_close_rect.p0.y);
     463        PCUT_ASSERT_INT_EQUALS(0, geom.btn_close_rect.p1.x);
     464        PCUT_ASSERT_INT_EQUALS(0, geom.btn_close_rect.p1.y);
     465
     466        PCUT_ASSERT_INT_EQUALS(14, geom.app_area_rect.p0.x);
     467        PCUT_ASSERT_INT_EQUALS(24, geom.app_area_rect.p0.y);
     468        PCUT_ASSERT_INT_EQUALS(96, geom.app_area_rect.p1.x);
     469        PCUT_ASSERT_INT_EQUALS(196, geom.app_area_rect.p1.y);
     470
     471        ui_wdecor_destroy(wdecor);
     472}
     473
     474/** ui_wdecor_get_geom() with ui_wds_frame | ui_wds_titlebar */
     475PCUT_TEST(get_geom_frame_titlebar)
     476{
     477        ui_wdecor_t *wdecor;
     478        gfx_rect_t rect;
     479        ui_wdecor_geom_t geom;
     480        errno_t rc;
     481
     482        rc = ui_wdecor_create(NULL, "Hello", ui_wds_frame | ui_wds_titlebar,
     483            &wdecor);
     484        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     485
     486        rect.p0.x = 10;
     487        rect.p0.y = 20;
     488        rect.p1.x = 100;
     489        rect.p1.y = 200;
     490
     491        ui_wdecor_set_rect(wdecor, &rect);
     492        ui_wdecor_get_geom(wdecor, &geom);
     493
     494        PCUT_ASSERT_INT_EQUALS(14, geom.interior_rect.p0.x);
     495        PCUT_ASSERT_INT_EQUALS(24, geom.interior_rect.p0.y);
     496        PCUT_ASSERT_INT_EQUALS(96, geom.interior_rect.p1.x);
     497        PCUT_ASSERT_INT_EQUALS(196, geom.interior_rect.p1.y);
     498
    414499        PCUT_ASSERT_INT_EQUALS(14, geom.title_bar_rect.p0.x);
    415500        PCUT_ASSERT_INT_EQUALS(24, geom.title_bar_rect.p0.y);
     
    417502        PCUT_ASSERT_INT_EQUALS(46, geom.title_bar_rect.p1.y);
    418503
     504        PCUT_ASSERT_INT_EQUALS(0, geom.btn_close_rect.p0.x);
     505        PCUT_ASSERT_INT_EQUALS(0, geom.btn_close_rect.p0.y);
     506        PCUT_ASSERT_INT_EQUALS(0, geom.btn_close_rect.p1.x);
     507        PCUT_ASSERT_INT_EQUALS(0, geom.btn_close_rect.p1.y);
     508
     509        PCUT_ASSERT_INT_EQUALS(14, geom.app_area_rect.p0.x);
     510        PCUT_ASSERT_INT_EQUALS(46, geom.app_area_rect.p0.y);
     511        PCUT_ASSERT_INT_EQUALS(96, geom.app_area_rect.p1.x);
     512        PCUT_ASSERT_INT_EQUALS(196, geom.app_area_rect.p1.y);
     513
     514        ui_wdecor_destroy(wdecor);
     515}
     516
     517/** ui_wdecor_get_geom() with ui_wds_decorated produces the correct geometry */
     518PCUT_TEST(get_geom_decorated)
     519{
     520        ui_wdecor_t *wdecor;
     521        gfx_rect_t rect;
     522        ui_wdecor_geom_t geom;
     523        errno_t rc;
     524
     525        rc = ui_wdecor_create(NULL, "Hello", ui_wds_decorated, &wdecor);
     526        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     527
     528        rect.p0.x = 10;
     529        rect.p0.y = 20;
     530        rect.p1.x = 100;
     531        rect.p1.y = 200;
     532
     533        ui_wdecor_set_rect(wdecor, &rect);
     534        ui_wdecor_get_geom(wdecor, &geom);
     535
     536        PCUT_ASSERT_INT_EQUALS(14, geom.interior_rect.p0.x);
     537        PCUT_ASSERT_INT_EQUALS(24, geom.interior_rect.p0.y);
     538        PCUT_ASSERT_INT_EQUALS(96, geom.interior_rect.p1.x);
     539        PCUT_ASSERT_INT_EQUALS(196, geom.interior_rect.p1.y);
     540
     541        PCUT_ASSERT_INT_EQUALS(14, geom.title_bar_rect.p0.x);
     542        PCUT_ASSERT_INT_EQUALS(24, geom.title_bar_rect.p0.y);
     543        PCUT_ASSERT_INT_EQUALS(96, geom.title_bar_rect.p1.x);
     544        PCUT_ASSERT_INT_EQUALS(46, geom.title_bar_rect.p1.y);
     545
    419546        PCUT_ASSERT_INT_EQUALS(75, geom.btn_close_rect.p0.x);
    420547        PCUT_ASSERT_INT_EQUALS(25, geom.btn_close_rect.p0.y);
     
    441568        arect.p1.y = 196;
    442569
    443         ui_wdecor_rect_from_app(&arect, &rect);
     570        ui_wdecor_rect_from_app(ui_wds_none, &arect, &rect);
     571
     572        PCUT_ASSERT_INT_EQUALS(14, rect.p0.x);
     573        PCUT_ASSERT_INT_EQUALS(46, rect.p0.y);
     574        PCUT_ASSERT_INT_EQUALS(96, rect.p1.x);
     575        PCUT_ASSERT_INT_EQUALS(196, rect.p1.y);
     576
     577        ui_wdecor_rect_from_app(ui_wds_frame, &arect, &rect);
     578
     579        PCUT_ASSERT_INT_EQUALS(10, rect.p0.x);
     580        PCUT_ASSERT_INT_EQUALS(42, rect.p0.y);
     581        PCUT_ASSERT_INT_EQUALS(100, rect.p1.x);
     582        PCUT_ASSERT_INT_EQUALS(200, rect.p1.y);
     583
     584        ui_wdecor_rect_from_app(ui_wds_decorated, &arect, &rect);
    444585
    445586        PCUT_ASSERT_INT_EQUALS(10, rect.p0.x);
     
    447588        PCUT_ASSERT_INT_EQUALS(100, rect.p1.x);
    448589        PCUT_ASSERT_INT_EQUALS(200, rect.p1.y);
     590
    449591}
    450592
Note: See TracChangeset for help on using the changeset viewer.