Changeset ed1a948 in mainline


Ignore:
Timestamp:
2023-09-20T13:10:28Z (8 months ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
master, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
8d1bcd7
Parents:
153dd3b
git-author:
Jiri Svoboda <jiri@…> (2023-09-19 17:10:04)
git-committer:
Jiri Svoboda <jiri@…> (2023-09-20 13:10:28)
Message:

System menu handle

Graphical element allowing to open system menu using mouse.

Location:
uspace/lib/ui
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/ui/include/types/ui/wdecor.h

    r153dd3b red1a948  
    5252        /** Window has a title bar */
    5353        ui_wds_titlebar = 0x2,
    54         /** Window has a system menu */
    55         ui_wds_sysmenu = 0x4,
     54        /** Window has a system menu handle */
     55        ui_wds_sysmenu_hdl = 0x4,
    5656        /** Window has a minimize button */
    5757        ui_wds_minimize_btn = 0x8,
     
    6363        ui_wds_resizable = 0x40,
    6464        /** Window is decorated (default decoration) */
    65         ui_wds_decorated = ui_wds_frame | ui_wds_titlebar | ui_wds_sysmenu |
     65        ui_wds_decorated = ui_wds_frame | ui_wds_titlebar | ui_wds_sysmenu_hdl |
    6666            ui_wds_minimize_btn | ui_wds_close_btn
    6767} ui_wdecor_style_t;
  • uspace/lib/ui/include/ui/wdecor.h

    r153dd3b red1a948  
    5454extern void ui_wdecor_set_maximized(ui_wdecor_t *, bool);
    5555extern errno_t ui_wdecor_set_caption(ui_wdecor_t *, const char *);
     56extern void ui_wdecor_sysmenu_hdl_set_active(ui_wdecor_t *, bool);
    5657extern errno_t ui_wdecor_paint(ui_wdecor_t *);
    5758extern ui_evclaim_t ui_wdecor_kbd_event(ui_wdecor_t *, kbd_event_t *);
  • uspace/lib/ui/private/wdecor.h

    r153dd3b red1a948  
    6666        /** Window is maximized */
    6767        bool maximized;
     68        /** System menu handle is active */
     69        bool sysmenu_hdl_active;
    6870        /** Minimize button */
    6971        struct ui_pbutton *btn_min;
     
    8385        /** Title bar rectangle */
    8486        gfx_rect_t title_bar_rect;
     87        /** System menu handle rectangle */
     88        gfx_rect_t sysmenu_hdl_rect;
    8589        /** Window caption rectangle */
    8690        gfx_rect_t caption_rect;
     
    105109extern void ui_wdecor_set_cursor(ui_wdecor_t *, ui_stock_cursor_t);
    106110extern void ui_wdecor_get_geom(ui_wdecor_t *, ui_wdecor_geom_t *);
     111extern errno_t ui_wdecor_sysmenu_hdl_paint_gfx(ui_wdecor_t *, gfx_rect_t *);
     112extern errno_t ui_wdecor_sysmenu_hdl_paint_text(ui_wdecor_t *, gfx_rect_t *);
     113extern errno_t ui_wdecor_sysmenu_hdl_paint(ui_wdecor_t *, gfx_rect_t *);
    107114extern void ui_wdecor_frame_pos_event(ui_wdecor_t *, pos_event_t *);
    108115extern ui_wdecor_rsztype_t ui_wdecor_get_rsztype(ui_wdecor_t *,
  • uspace/lib/ui/src/wdecor.c

    r153dd3b red1a948  
    104104        /** Window caption horizontal margin in text mode */
    105105        wdecor_cap_hmargin_text = 1,
     106        /** System menu handle width */
     107        wdecor_sysmenu_hdl_w = 20,
     108        /** System menu handle height */
     109        wdecor_sysmenu_hdl_h = 20,
     110        /** System menu handle width in text mode */
     111        wdecor_sysmenu_hdl_w_text = 3,
     112        /** System menu handle height in text mode */
     113        wdecor_sysmenu_hdl_h_text = 1,
    106114        /** Close button cross leg length */
    107115        wdecor_close_cross_n = 5,
     
    296304}
    297305
     306/** Paint system menu handle in graphics mode.
     307 *
     308 * @param wdecor Window decoration
     309 * @param rect System menu handle rectangle
     310 * @return EOK on success or an error code
     311 */
     312errno_t ui_wdecor_sysmenu_hdl_paint_gfx(ui_wdecor_t *wdecor, gfx_rect_t *rect)
     313{
     314        errno_t rc;
     315        gfx_rect_t mrect;
     316        gfx_rect_t inside;
     317        gfx_coord2_t center;
     318
     319        rc = gfx_set_color(wdecor->res->gc, wdecor->sysmenu_hdl_active ?
     320            wdecor->res->btn_shadow_color : wdecor->res->btn_face_color);
     321        if (rc != EOK)
     322                return rc;
     323
     324        rc = gfx_fill_rect(wdecor->res->gc, rect);
     325        if (rc != EOK)
     326                return rc;
     327
     328        center.x = (rect->p0.x + rect->p1.x) / 2;
     329        center.y = (rect->p0.y + rect->p1.y) / 2;
     330        mrect.p0.x = center.x - 7;
     331        mrect.p0.y = center.y - 1;
     332        mrect.p1.x = center.x + 7;
     333        mrect.p1.y = center.y + 1 + 1;
     334
     335        /* XXX Not really a bevel, just a frame */
     336        rc = ui_paint_bevel(wdecor->res->gc, &mrect,
     337            wdecor->res->btn_text_color, wdecor->res->btn_text_color, 1,
     338            &inside);
     339        if (rc != EOK)
     340                return rc;
     341
     342        rc = gfx_set_color(wdecor->res->gc, wdecor->res->btn_highlight_color);
     343        if (rc != EOK)
     344                return rc;
     345
     346        rc = gfx_fill_rect(wdecor->res->gc, &inside);
     347        if (rc != EOK)
     348                return rc;
     349
     350        return EOK;
     351}
     352
     353/** Paint system menu handle in text mode.
     354 *
     355 * @param wdecor Window decoration
     356 * @param rect System menu handle rectangle
     357 * @return EOK on success or an error code
     358 */
     359errno_t ui_wdecor_sysmenu_hdl_paint_text(ui_wdecor_t *wdecor, gfx_rect_t *rect)
     360{
     361        errno_t rc;
     362        gfx_text_fmt_t fmt;
     363
     364        gfx_text_fmt_init(&fmt);
     365        fmt.font = wdecor->res->font;
     366        fmt.color = wdecor->res->tbar_act_text_color;
     367        fmt.halign = gfx_halign_left;
     368        fmt.valign = gfx_valign_top;
     369
     370        rc = gfx_puttext(&rect->p0, &fmt, "[\u2261]");
     371        if (rc != EOK)
     372                return rc;
     373
     374        return EOK;
     375}
     376
     377/** Paint system menu handle.
     378 *
     379 * @param wdecor Window decoration
     380 * @param rect System menu handle rectangle
     381 * @return EOK on success or an error code
     382 */
     383errno_t ui_wdecor_sysmenu_hdl_paint(ui_wdecor_t *wdecor, gfx_rect_t *rect)
     384{
     385        errno_t rc;
     386
     387        if (wdecor->res->textmode)
     388                rc = ui_wdecor_sysmenu_hdl_paint_text(wdecor, rect);
     389        else
     390                rc = ui_wdecor_sysmenu_hdl_paint_gfx(wdecor, rect);
     391
     392        return rc;
     393}
     394
     395/** Set system menu handle active flag.
     396 *
     397 * @param wdecor Window decoration
     398 * @param active @c true iff handle should be active
     399 */
     400void ui_wdecor_sysmenu_hdl_set_active(ui_wdecor_t *wdecor, bool active)
     401{
     402        ui_wdecor_geom_t geom;
     403
     404        wdecor->sysmenu_hdl_active = active;
     405
     406        ui_wdecor_get_geom(wdecor, &geom);
     407        (void) ui_wdecor_sysmenu_hdl_paint(wdecor, &geom.sysmenu_hdl_rect);
     408}
     409
    298410/** Paint window decoration.
    299411 *
     
    395507                        return rc;
    396508
     509                if ((wdecor->style & ui_wds_sysmenu_hdl) != 0) {
     510                        rc = ui_wdecor_sysmenu_hdl_paint(wdecor,
     511                            &geom.sysmenu_hdl_rect);
     512                        if (rc != EOK)
     513                                return rc;
     514                }
     515
    397516                if (wdecor->btn_min != NULL) {
    398517                        rc = ui_pbutton_paint(wdecor->btn_min);
     
    520639        gfx_coord_t btn_y;
    521640        gfx_coord_t cap_hmargin;
     641        gfx_coord_t cap_x;
     642        gfx_coord_t hdl_x_off;
     643        gfx_coord_t hdl_y_off;
     644        gfx_coord_t hdl_w;
     645        gfx_coord_t hdl_h;
    522646
    523647        /* Does window have a frame? */
     
    568692        }
    569693
     694        /* Does window have a sysmenu handle? */
     695        if ((wdecor->style & ui_wds_sysmenu_hdl) != 0) {
     696                if (wdecor->res->textmode) {
     697                        hdl_x_off = 2;
     698                        hdl_y_off = 0;
     699                        hdl_w = wdecor_sysmenu_hdl_w_text;
     700                        hdl_h = wdecor_sysmenu_hdl_h_text;
     701                } else {
     702                        hdl_x_off = 1;
     703                        hdl_y_off = 1;
     704                        hdl_w = wdecor_sysmenu_hdl_w;
     705                        hdl_h = wdecor_sysmenu_hdl_h;
     706                }
     707
     708                geom->sysmenu_hdl_rect.p0.x = geom->title_bar_rect.p0.x +
     709                    hdl_x_off;
     710                geom->sysmenu_hdl_rect.p0.y = geom->title_bar_rect.p0.y +
     711                    hdl_y_off;
     712                geom->sysmenu_hdl_rect.p1.x = geom->sysmenu_hdl_rect.p0.x +
     713                    hdl_w;
     714                geom->sysmenu_hdl_rect.p1.y = geom->sysmenu_hdl_rect.p0.y +
     715                    hdl_h;
     716                cap_x = hdl_w;
     717        } else {
     718                geom->sysmenu_hdl_rect.p0.x = 0;
     719                geom->sysmenu_hdl_rect.p0.y = 0;
     720                geom->sysmenu_hdl_rect.p1.x = 0;
     721                geom->sysmenu_hdl_rect.p1.y = 0;
     722                cap_x = 0;
     723        }
     724
    570725        /* Does window have a close button? */
    571726        if ((wdecor->style & ui_wds_close_btn) != 0) {
     
    640795        }
    641796
    642         if (wdecor->res->textmode == false)
    643                 cap_hmargin = wdecor_cap_hmargin;
    644         else
    645                 cap_hmargin = wdecor_cap_hmargin_text;
    646 
    647         geom->caption_rect.p0.x = geom->title_bar_rect.p0.x +
    648             cap_hmargin;
    649         geom->caption_rect.p0.y = geom->title_bar_rect.p0.y;
    650         geom->caption_rect.p1.x = btn_x - cap_hmargin;
    651         geom->caption_rect.p1.y = geom->title_bar_rect.p1.y;
     797        if ((wdecor->style & ui_wds_titlebar) != 0) {
     798                if (wdecor->res->textmode == false)
     799                        cap_hmargin = wdecor_cap_hmargin;
     800                else
     801                        cap_hmargin = wdecor_cap_hmargin_text;
     802
     803                geom->caption_rect.p0.x = geom->title_bar_rect.p0.x +
     804                    cap_hmargin + cap_x;
     805                geom->caption_rect.p0.y = geom->title_bar_rect.p0.y;
     806                geom->caption_rect.p1.x = btn_x - cap_hmargin;
     807                geom->caption_rect.p1.y = geom->title_bar_rect.p1.y;
     808        } else {
     809                geom->caption_rect.p0.x = 0;
     810                geom->caption_rect.p0.y = 0;
     811                geom->caption_rect.p1.x = 0;
     812                geom->caption_rect.p1.y = 0;
     813        }
    652814}
    653815
     
    828990        if (event->type == KEY_PRESS && (event->mods & (KM_CTRL | KM_ALT |
    829991            KM_SHIFT)) == 0) {
    830                 if (event->key == KC_F9)
     992                if (event->key == KC_F9) {
     993                        ui_wdecor_sysmenu_hdl_set_active(wdecor, true);
    831994                        ui_wdecor_sysmenu(wdecor, event->kbd_id);
     995                }
    832996        }
    833997
     
    8811045
    8821046        ui_wdecor_get_geom(wdecor, &geom);
     1047
     1048        if ((wdecor->style & ui_wds_sysmenu_hdl) != 0) {
     1049                if (event->type == POS_PRESS &&
     1050                    gfx_pix_inside_rect(&pos, &geom.sysmenu_hdl_rect)) {
     1051                        ui_wdecor_sysmenu_hdl_set_active(wdecor, true);
     1052                        ui_wdecor_sysmenu(wdecor, event->pos_id);
     1053                        return ui_claimed;
     1054                }
     1055        }
    8831056
    8841057        if (wdecor->btn_min != NULL) {
  • uspace/lib/ui/src/window.c

    r153dd3b red1a948  
    15171517static void wnd_sysmenu_close_req(ui_menu_t *sysmenu, void *arg)
    15181518{
    1519         (void)arg;
    1520 
     1519        ui_window_t *window = (ui_window_t *)arg;
     1520
     1521        ui_wdecor_sysmenu_hdl_set_active(window->wdecor, false);
    15211522        ui_menu_close(sysmenu);
    15221523}
  • uspace/lib/ui/test/wdecor.c

    r153dd3b red1a948  
    119119} test_cb_resp_t;
    120120
    121 /** Create and destroy button */
     121/** Create and destroy window decoration */
    122122PCUT_TEST(create_destroy)
    123123{
     
    217217}
    218218
    219 /** Paint button */
    220 PCUT_TEST(paint)
     219/** Setting system menu handle as active/inactive */
     220PCUT_TEST(sysmenu_hdl_set_active)
    221221{
    222222        errno_t rc;
     
    234234        PCUT_ASSERT_NOT_NULL(resource);
    235235
    236         rc = ui_wdecor_create(resource, "Hello", ui_wds_none, &wdecor);
     236        rc = ui_wdecor_create(resource, "Hello", ui_wds_decorated, &wdecor);
     237        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     238
     239        PCUT_ASSERT_FALSE(wdecor->sysmenu_hdl_active);
     240        ui_wdecor_sysmenu_hdl_set_active(wdecor, true);
     241        PCUT_ASSERT_TRUE(wdecor->sysmenu_hdl_active);
     242        ui_wdecor_sysmenu_hdl_set_active(wdecor, false);
     243        PCUT_ASSERT_FALSE(wdecor->sysmenu_hdl_active);
     244
     245        ui_wdecor_destroy(wdecor);
     246        ui_resource_destroy(resource);
     247
     248        rc = gfx_context_delete(gc);
     249        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     250}
     251
     252/** Paint system menu handle */
     253PCUT_TEST(sysmenu_hdl_paint)
     254{
     255        errno_t rc;
     256        gfx_context_t *gc = NULL;
     257        test_gc_t tgc;
     258        ui_resource_t *resource = NULL;
     259        ui_wdecor_t *wdecor;
     260        ui_wdecor_geom_t geom;
     261
     262        memset(&tgc, 0, sizeof(tgc));
     263        rc = gfx_context_new(&ops, &tgc, &gc);
     264        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     265
     266        rc = ui_resource_create(gc, false, &resource);
     267        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     268        PCUT_ASSERT_NOT_NULL(resource);
     269
     270        rc = ui_wdecor_create(resource, "Hello", ui_wds_decorated, &wdecor);
     271        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     272
     273        ui_wdecor_get_geom(wdecor, &geom);
     274        rc = ui_wdecor_sysmenu_hdl_paint(wdecor, &geom.sysmenu_hdl_rect);
     275        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     276
     277        ui_wdecor_destroy(wdecor);
     278        ui_resource_destroy(resource);
     279
     280        rc = gfx_context_delete(gc);
     281        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     282}
     283
     284/** Paint window decoration */
     285PCUT_TEST(paint)
     286{
     287        errno_t rc;
     288        gfx_context_t *gc = NULL;
     289        test_gc_t tgc;
     290        ui_resource_t *resource = NULL;
     291        ui_wdecor_t *wdecor;
     292
     293        memset(&tgc, 0, sizeof(tgc));
     294        rc = gfx_context_new(&ops, &tgc, &gc);
     295        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     296
     297        rc = ui_resource_create(gc, false, &resource);
     298        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     299        PCUT_ASSERT_NOT_NULL(resource);
     300
     301        rc = ui_wdecor_create(resource, "Hello", ui_wds_decorated, &wdecor);
    237302        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    238303
     
    676741        PCUT_ASSERT_INT_EQUALS(0, geom.title_bar_rect.p1.y);
    677742
     743        PCUT_ASSERT_INT_EQUALS(0, geom.sysmenu_hdl_rect.p0.x);
     744        PCUT_ASSERT_INT_EQUALS(0, geom.sysmenu_hdl_rect.p0.y);
     745        PCUT_ASSERT_INT_EQUALS(0, geom.sysmenu_hdl_rect.p1.x);
     746        PCUT_ASSERT_INT_EQUALS(0, geom.sysmenu_hdl_rect.p1.y);
     747
     748        PCUT_ASSERT_INT_EQUALS(0, geom.caption_rect.p0.x);
     749        PCUT_ASSERT_INT_EQUALS(0, geom.caption_rect.p0.y);
     750        PCUT_ASSERT_INT_EQUALS(0, geom.caption_rect.p1.x);
     751        PCUT_ASSERT_INT_EQUALS(0, geom.caption_rect.p1.y);
     752
     753        PCUT_ASSERT_INT_EQUALS(0, geom.btn_min_rect.p0.x);
     754        PCUT_ASSERT_INT_EQUALS(0, geom.btn_min_rect.p0.y);
     755        PCUT_ASSERT_INT_EQUALS(0, geom.btn_min_rect.p1.x);
     756        PCUT_ASSERT_INT_EQUALS(0, geom.btn_min_rect.p1.y);
     757
     758        PCUT_ASSERT_INT_EQUALS(0, geom.btn_max_rect.p0.x);
     759        PCUT_ASSERT_INT_EQUALS(0, geom.btn_max_rect.p0.y);
     760        PCUT_ASSERT_INT_EQUALS(0, geom.btn_max_rect.p1.x);
     761        PCUT_ASSERT_INT_EQUALS(0, geom.btn_max_rect.p1.y);
     762
    678763        PCUT_ASSERT_INT_EQUALS(0, geom.btn_close_rect.p0.x);
    679764        PCUT_ASSERT_INT_EQUALS(0, geom.btn_close_rect.p0.y);
     
    733818        PCUT_ASSERT_INT_EQUALS(0, geom.title_bar_rect.p1.y);
    734819
     820        PCUT_ASSERT_INT_EQUALS(0, geom.sysmenu_hdl_rect.p0.x);
     821        PCUT_ASSERT_INT_EQUALS(0, geom.sysmenu_hdl_rect.p0.y);
     822        PCUT_ASSERT_INT_EQUALS(0, geom.sysmenu_hdl_rect.p1.x);
     823        PCUT_ASSERT_INT_EQUALS(0, geom.sysmenu_hdl_rect.p1.y);
     824
     825        PCUT_ASSERT_INT_EQUALS(0, geom.caption_rect.p0.x);
     826        PCUT_ASSERT_INT_EQUALS(0, geom.caption_rect.p0.y);
     827        PCUT_ASSERT_INT_EQUALS(0, geom.caption_rect.p1.x);
     828        PCUT_ASSERT_INT_EQUALS(0, geom.caption_rect.p1.y);
     829
     830        PCUT_ASSERT_INT_EQUALS(0, geom.btn_min_rect.p0.x);
     831        PCUT_ASSERT_INT_EQUALS(0, geom.btn_min_rect.p0.y);
     832        PCUT_ASSERT_INT_EQUALS(0, geom.btn_min_rect.p1.x);
     833        PCUT_ASSERT_INT_EQUALS(0, geom.btn_min_rect.p1.y);
     834
     835        PCUT_ASSERT_INT_EQUALS(0, geom.btn_max_rect.p0.x);
     836        PCUT_ASSERT_INT_EQUALS(0, geom.btn_max_rect.p0.y);
     837        PCUT_ASSERT_INT_EQUALS(0, geom.btn_max_rect.p1.x);
     838        PCUT_ASSERT_INT_EQUALS(0, geom.btn_max_rect.p1.y);
     839
    735840        PCUT_ASSERT_INT_EQUALS(0, geom.btn_close_rect.p0.x);
    736841        PCUT_ASSERT_INT_EQUALS(0, geom.btn_close_rect.p0.y);
     
    791896        PCUT_ASSERT_INT_EQUALS(46, geom.title_bar_rect.p1.y);
    792897
     898        PCUT_ASSERT_INT_EQUALS(0, geom.sysmenu_hdl_rect.p0.x);
     899        PCUT_ASSERT_INT_EQUALS(0, geom.sysmenu_hdl_rect.p0.y);
     900        PCUT_ASSERT_INT_EQUALS(0, geom.sysmenu_hdl_rect.p1.x);
     901        PCUT_ASSERT_INT_EQUALS(0, geom.sysmenu_hdl_rect.p1.y);
     902
     903        PCUT_ASSERT_INT_EQUALS(18, geom.caption_rect.p0.x);
     904        PCUT_ASSERT_INT_EQUALS(24, geom.caption_rect.p0.y);
     905        PCUT_ASSERT_INT_EQUALS(91, geom.caption_rect.p1.x);
     906        PCUT_ASSERT_INT_EQUALS(46, geom.caption_rect.p1.y);
     907
     908        PCUT_ASSERT_INT_EQUALS(0, geom.btn_min_rect.p0.x);
     909        PCUT_ASSERT_INT_EQUALS(0, geom.btn_min_rect.p0.y);
     910        PCUT_ASSERT_INT_EQUALS(0, geom.btn_min_rect.p1.x);
     911        PCUT_ASSERT_INT_EQUALS(0, geom.btn_min_rect.p1.y);
     912
     913        PCUT_ASSERT_INT_EQUALS(0, geom.btn_max_rect.p0.x);
     914        PCUT_ASSERT_INT_EQUALS(0, geom.btn_max_rect.p0.y);
     915        PCUT_ASSERT_INT_EQUALS(0, geom.btn_max_rect.p1.x);
     916        PCUT_ASSERT_INT_EQUALS(0, geom.btn_max_rect.p1.y);
     917
    793918        PCUT_ASSERT_INT_EQUALS(0, geom.btn_close_rect.p0.x);
    794919        PCUT_ASSERT_INT_EQUALS(0, geom.btn_close_rect.p0.y);
     
    847972        PCUT_ASSERT_INT_EQUALS(96, geom.title_bar_rect.p1.x);
    848973        PCUT_ASSERT_INT_EQUALS(46, geom.title_bar_rect.p1.y);
     974
     975        PCUT_ASSERT_INT_EQUALS(15, geom.sysmenu_hdl_rect.p0.x);
     976        PCUT_ASSERT_INT_EQUALS(25, geom.sysmenu_hdl_rect.p0.y);
     977        PCUT_ASSERT_INT_EQUALS(35, geom.sysmenu_hdl_rect.p1.x);
     978        PCUT_ASSERT_INT_EQUALS(45, geom.sysmenu_hdl_rect.p1.y);
     979
     980        PCUT_ASSERT_INT_EQUALS(38, geom.caption_rect.p0.x);
     981        PCUT_ASSERT_INT_EQUALS(24, geom.caption_rect.p0.y);
     982        PCUT_ASSERT_INT_EQUALS(51, geom.caption_rect.p1.x);
     983        PCUT_ASSERT_INT_EQUALS(46, geom.caption_rect.p1.y);
     984
     985        PCUT_ASSERT_INT_EQUALS(55, geom.btn_min_rect.p0.x);
     986        PCUT_ASSERT_INT_EQUALS(25, geom.btn_min_rect.p0.y);
     987        PCUT_ASSERT_INT_EQUALS(75, geom.btn_min_rect.p1.x);
     988        PCUT_ASSERT_INT_EQUALS(45, geom.btn_min_rect.p1.y);
     989
     990        /* Maximize button is not in ui_wds_decorated */
     991        PCUT_ASSERT_INT_EQUALS(0, geom.btn_max_rect.p0.x);
     992        PCUT_ASSERT_INT_EQUALS(0, geom.btn_max_rect.p0.y);
     993        PCUT_ASSERT_INT_EQUALS(0, geom.btn_max_rect.p1.x);
     994        PCUT_ASSERT_INT_EQUALS(0, geom.btn_max_rect.p1.y);
    849995
    850996        PCUT_ASSERT_INT_EQUALS(75, geom.btn_close_rect.p0.x);
Note: See TracChangeset for help on using the changeset viewer.