Changeset 06176e1 in mainline for uspace/lib/ui/src/wdecor.c


Ignore:
Timestamp:
2022-12-20T12:31:44Z (2 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
master, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
4e7b0ad
Parents:
d46ac73
git-author:
Jiri Svoboda <jiri@…> (2022-12-19 18:31:30)
git-committer:
Jiri Svoboda <jiri@…> (2022-12-20 12:31:44)
Message:

Minimizing windows

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/ui/src/wdecor.c

    rd46ac73 r06176e1  
    4949#include "../private/wdecor.h"
    5050
     51static void ui_wdecor_btn_min_clicked(ui_pbutton_t *, void *);
     52static errno_t ui_wdecor_btn_min_paint(ui_pbutton_t *, void *,
     53    gfx_coord2_t *);
     54
    5155static void ui_wdecor_btn_max_clicked(ui_pbutton_t *, void *);
    5256static errno_t ui_wdecor_btn_max_paint(ui_pbutton_t *, void *,
     
    5660static errno_t ui_wdecor_btn_close_paint(ui_pbutton_t *, void *,
    5761    gfx_coord2_t *);
     62
     63static ui_pbutton_cb_t ui_wdecor_btn_min_cb = {
     64        .clicked = ui_wdecor_btn_min_clicked
     65};
     66
     67static ui_pbutton_decor_ops_t ui_wdecor_btn_min_decor_ops = {
     68        .paint = ui_wdecor_btn_min_paint
     69};
    5870
    5971static ui_pbutton_cb_t ui_wdecor_btn_max_cb = {
     
    98110        /** Close button cross pen height */
    99111        wdecor_close_cross_h = 1,
     112        /** Minimize icon width */
     113        wdecor_min_w = 10,
     114        /** Minimize icon height */
     115        wdecor_min_h = 10,
    100116        /** Maximize icon width */
    101117        wdecor_max_w = 10,
     
    136152        }
    137153
     154        if ((style & ui_wds_minimize_btn) != 0) {
     155                rc = ui_pbutton_create(resource, "_", &wdecor->btn_min);
     156                if (rc != EOK) {
     157                        ui_wdecor_destroy(wdecor);
     158                        return rc;
     159                }
     160
     161                ui_pbutton_set_cb(wdecor->btn_min, &ui_wdecor_btn_min_cb,
     162                    (void *)wdecor);
     163
     164                ui_pbutton_set_decor_ops(wdecor->btn_min,
     165                    &ui_wdecor_btn_min_decor_ops, (void *)wdecor);
     166        }
     167
    138168        if ((style & ui_wds_maximize_btn) != 0) {
    139169                rc = ui_pbutton_create(resource, "^", &wdecor->btn_max);
     
    180210                return;
    181211
     212        ui_pbutton_destroy(wdecor->btn_min);
    182213        ui_pbutton_destroy(wdecor->btn_max);
    183214        ui_pbutton_destroy(wdecor->btn_close);
     
    211242        ui_wdecor_get_geom(wdecor, &geom);
    212243
     244        if (wdecor->btn_min != NULL)
     245                ui_pbutton_set_rect(wdecor->btn_min, &geom.btn_min_rect);
    213246        if (wdecor->btn_max != NULL)
    214247                ui_pbutton_set_rect(wdecor->btn_max, &geom.btn_max_rect);
     
    362395                        return rc;
    363396
     397                if (wdecor->btn_min != NULL) {
     398                        rc = ui_pbutton_paint(wdecor->btn_min);
     399                        if (rc != EOK)
     400                                return rc;
     401                }
     402
    364403                if (wdecor->btn_max != NULL) {
    365404                        rc = ui_pbutton_paint(wdecor->btn_max);
     
    380419
    381420        return EOK;
     421}
     422
     423/** Send decoration minimize event.
     424 *
     425 * @param wdecor Window decoration
     426 */
     427void ui_wdecor_minimize(ui_wdecor_t *wdecor)
     428{
     429        if (wdecor->cb != NULL && wdecor->cb->minimize != NULL)
     430                wdecor->cb->minimize(wdecor, wdecor->arg);
    382431}
    383432
     
    554603        }
    555604
     605        /* Does window have a minimize button? */
     606        if ((wdecor->style & ui_wds_minimize_btn) != 0) {
     607                if (wdecor->res->textmode == false) {
     608                        geom->btn_min_rect.p0.x = btn_x - 20;
     609                        geom->btn_min_rect.p0.y = btn_y;
     610                        geom->btn_min_rect.p1.x = btn_x;
     611                        geom->btn_min_rect.p1.y = btn_y + 20;
     612
     613                        btn_x -= 20;
     614                } else {
     615                        geom->btn_min_rect.p0.x = btn_x - 3;
     616                        geom->btn_min_rect.p0.y = btn_y;
     617                        geom->btn_min_rect.p1.x = btn_x;
     618                        geom->btn_min_rect.p1.y = btn_y + 1;
     619
     620                        btn_x -= 3;
     621                }
     622        } else {
     623                geom->btn_min_rect.p0.x = 0;
     624                geom->btn_min_rect.p0.y = 0;
     625                geom->btn_min_rect.p1.x = 0;
     626                geom->btn_min_rect.p1.y = 0;
     627        }
     628
    556629        if (wdecor->res->textmode == false)
    557630                cap_hmargin = wdecor_cap_hmargin;
     
    773846        ui_wdecor_get_geom(wdecor, &geom);
    774847
     848        if (wdecor->btn_min != NULL) {
     849                claim = ui_pbutton_pos_event(wdecor->btn_min, event);
     850                if (claim == ui_claimed)
     851                        return ui_claimed;
     852        }
     853
    775854        if (wdecor->btn_max != NULL) {
    776855                claim = ui_pbutton_pos_event(wdecor->btn_max, event);
     
    798877}
    799878
     879/** Window decoration minimize button was clicked.
     880 *
     881 * @param pbutton Minimize button
     882 * @param arg Argument (ui_wdecor_t)
     883 */
     884static void ui_wdecor_btn_min_clicked(ui_pbutton_t *pbutton, void *arg)
     885{
     886        ui_wdecor_t *wdecor = (ui_wdecor_t *) arg;
     887
     888        (void) pbutton;
     889
     890        ui_wdecor_minimize(wdecor);
     891}
     892
    800893/** Window decoration (un)maximize button was clicked.
    801894 *
    802  * @param pbutton Close button
     895 * @param pbutton (Un)maximize button
    803896 * @param arg Argument (ui_wdecor_t)
    804897 */
     
    813906        else
    814907                ui_wdecor_maximize(wdecor);
     908}
     909
     910/** Paint minimize button decoration.
     911 *
     912 * @param pbutton Push button
     913 * @param arg Argument (ui_wdecor_t *)
     914 * @param pos Center position
     915 */
     916static errno_t ui_wdecor_btn_min_paint(ui_pbutton_t *pbutton,
     917    void *arg, gfx_coord2_t *pos)
     918{
     919        ui_wdecor_t *wdecor = (ui_wdecor_t *)arg;
     920        errno_t rc;
     921
     922        rc = ui_paint_minicon(wdecor->res, pos, wdecor_min_w,
     923            wdecor_min_h);
     924
     925        return rc;
    815926}
    816927
Note: See TracChangeset for help on using the changeset viewer.