Changeset 08fcaf2 in mainline


Ignore:
Timestamp:
2026-02-19T20:27:38Z (23 hours ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
master
Parents:
b769ca0
Message:

Custom maximize/minimize/close button look in text mode.

File:
1 edited

Legend:

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

    rb769ca0 r08fcaf2  
    4545#include <ui/paint.h>
    4646#include <ui/pbutton.h>
     47#include <ui/resource.h>
    4748#include <ui/ui.h>
    4849#include <ui/wdecor.h>
     50#include "../private/pbutton.h"
    4951#include "../private/resource.h"
    5052#include "../private/wdecor.h"
    5153
    5254static void ui_wdecor_btn_min_clicked(ui_pbutton_t *, void *);
    53 static errno_t ui_wdecor_btn_min_paint(ui_pbutton_t *, void *,
     55static errno_t ui_wdecor_btn_min_decor_paint(ui_pbutton_t *, void *,
    5456    gfx_coord2_t *);
     57static errno_t ui_wdecor_btn_min_paint_text(ui_pbutton_t *, void *);
    5558
    5659static void ui_wdecor_btn_max_clicked(ui_pbutton_t *, void *);
    57 static errno_t ui_wdecor_btn_max_paint(ui_pbutton_t *, void *,
     60static errno_t ui_wdecor_btn_max_decor_paint(ui_pbutton_t *, void *,
    5861    gfx_coord2_t *);
     62static errno_t ui_wdecor_btn_max_paint_text(ui_pbutton_t *, void *);
    5963
    6064static void ui_wdecor_btn_close_clicked(ui_pbutton_t *, void *);
    61 static errno_t ui_wdecor_btn_close_paint(ui_pbutton_t *, void *,
     65static errno_t ui_wdecor_btn_close_decor_paint(ui_pbutton_t *, void *,
    6266    gfx_coord2_t *);
     67static errno_t ui_wdecor_btn_close_paint_text(ui_pbutton_t *, void *);
    6368
    6469static ui_pbutton_cb_t ui_wdecor_btn_min_cb = {
     
    6772
    6873static ui_pbutton_ops_t ui_wdecor_btn_min_ops = {
    69         .decor_paint = ui_wdecor_btn_min_paint
     74        .decor_paint = ui_wdecor_btn_min_decor_paint
     75};
     76
     77static ui_pbutton_ops_t ui_wdecor_btn_min_ops_text = {
     78        .paint = ui_wdecor_btn_min_paint_text
    7079};
    7180
     
    7584
    7685static ui_pbutton_ops_t ui_wdecor_btn_max_ops = {
    77         .decor_paint = ui_wdecor_btn_max_paint
     86        .decor_paint = ui_wdecor_btn_max_decor_paint
     87};
     88
     89static ui_pbutton_ops_t ui_wdecor_btn_max_ops_text = {
     90        .paint = ui_wdecor_btn_max_paint_text
    7891};
    7992
     
    8396
    8497static ui_pbutton_ops_t ui_wdecor_btn_close_ops = {
    85         .decor_paint = ui_wdecor_btn_close_paint
     98        .decor_paint = ui_wdecor_btn_close_decor_paint
     99};
     100
     101static ui_pbutton_ops_t ui_wdecor_btn_close_ops_text = {
     102        .paint = ui_wdecor_btn_close_paint_text
    86103};
    87104
     
    153170{
    154171        ui_wdecor_t *wdecor;
     172        bool textmode;
    155173        errno_t rc;
     174
     175        textmode = ui_resource_is_textmode(resource);
    156176
    157177        wdecor = calloc(1, sizeof(ui_wdecor_t));
     
    175195                    (void *)wdecor);
    176196
    177                 ui_pbutton_set_ops(wdecor->btn_min, &ui_wdecor_btn_min_ops,
    178                     (void *)wdecor);
     197                ui_pbutton_set_ops(wdecor->btn_min, textmode ?
     198                    &ui_wdecor_btn_min_ops_text :
     199                    &ui_wdecor_btn_min_ops, (void *)wdecor);
    179200        }
    180201
     
    189210                    (void *)wdecor);
    190211
    191                 ui_pbutton_set_ops(wdecor->btn_max, &ui_wdecor_btn_max_ops,
    192                     (void *)wdecor);
     212                ui_pbutton_set_ops(wdecor->btn_max, textmode ?
     213                    &ui_wdecor_btn_max_ops_text :
     214                    &ui_wdecor_btn_max_ops, (void *)wdecor);
    193215        }
    194216
     
    203225                    (void *)wdecor);
    204226
    205                 ui_pbutton_set_ops(wdecor->btn_close, &ui_wdecor_btn_close_ops,
    206                     (void *)wdecor);
     227                ui_pbutton_set_ops(wdecor->btn_close, textmode ?
     228                    &ui_wdecor_btn_close_ops_text :
     229                    &ui_wdecor_btn_close_ops, (void *)wdecor);
    207230        }
    208231
     
    369392        rc = gfx_set_color(wdecor->res->gc, wdecor->sysmenu_hdl_active ?
    370393            wdecor->res->btn_shadow_color : wdecor->res->btn_face_color);
     394        if (rc != EOK)
     395                return rc;
    371396
    372397        gfx_text_fmt_init(&fmt);
     
    12071232 * @param pos Center position
    12081233 */
    1209 static errno_t ui_wdecor_btn_min_paint(ui_pbutton_t *pbutton,
     1234static errno_t ui_wdecor_btn_min_decor_paint(ui_pbutton_t *pbutton,
    12101235    void *arg, gfx_coord2_t *pos)
    12111236{
     
    12171242
    12181243        return rc;
     1244}
     1245
     1246/** Paint minimize button in text mode.
     1247 *
     1248 * @param pbutton Push button
     1249 * @param arg Argument (ui_wdecor_t *)
     1250 */
     1251static errno_t ui_wdecor_btn_min_paint_text(ui_pbutton_t *pbutton, void *arg)
     1252{
     1253        ui_wdecor_t *wdecor = (ui_wdecor_t *)arg;
     1254        errno_t rc;
     1255        gfx_text_fmt_t fmt;
     1256
     1257        gfx_text_fmt_init(&fmt);
     1258        fmt.font = wdecor->res->font;
     1259        fmt.color = (pbutton->held && pbutton->inside) ?
     1260            wdecor->res->wnd_sel_text_color :
     1261            wdecor->res->tbar_act_text_color;
     1262        fmt.halign = gfx_halign_left;
     1263        fmt.valign = gfx_valign_top;
     1264
     1265        rc = gfx_puttext(&pbutton->rect.p0, &fmt, "[\u2193]");
     1266        if (rc != EOK)
     1267                return rc;
     1268
     1269        return gfx_update(wdecor->res->gc);
    12191270}
    12201271
     
    12251276 * @param pos Center position
    12261277 */
    1227 static errno_t ui_wdecor_btn_max_paint(ui_pbutton_t *pbutton,
     1278static errno_t ui_wdecor_btn_max_decor_paint(ui_pbutton_t *pbutton,
    12281279    void *arg, gfx_coord2_t *pos)
    12291280{
     
    12311282        errno_t rc;
    12321283
    1233         if (wdecor->maximized) {
    1234                 rc = ui_paint_unmaxicon(wdecor->res, pos, wdecor_unmax_w,
    1235                     wdecor_unmax_h, wdecor_unmax_dw, wdecor_unmax_dh);
    1236         } else {
    1237                 rc = ui_paint_maxicon(wdecor->res, pos, wdecor_max_w,
    1238                     wdecor_max_h);
    1239         }
     1284        rc = ui_paint_maxicon(wdecor->res, pos, wdecor_min_w,
     1285            wdecor_min_h);
    12401286
    12411287        return rc;
     1288}
     1289
     1290/** Paint maximize button in text mode.
     1291 *
     1292 * @param pbutton Push button
     1293 * @param arg Argument (ui_wdecor_t *)
     1294 */
     1295static errno_t ui_wdecor_btn_max_paint_text(ui_pbutton_t *pbutton, void *arg)
     1296{
     1297        ui_wdecor_t *wdecor = (ui_wdecor_t *)arg;
     1298        errno_t rc;
     1299        gfx_text_fmt_t fmt;
     1300
     1301        gfx_text_fmt_init(&fmt);
     1302        fmt.font = wdecor->res->font;
     1303        fmt.color = (pbutton->held && pbutton->inside) ?
     1304            wdecor->res->wnd_sel_text_color :
     1305            wdecor->res->tbar_act_text_color;
     1306        fmt.halign = gfx_halign_left;
     1307        fmt.valign = gfx_valign_top;
     1308
     1309        rc = gfx_puttext(&pbutton->rect.p0, &fmt, "[\u2191]");
     1310        if (rc != EOK)
     1311                return rc;
     1312
     1313        return gfx_update(wdecor->res->gc);
    12421314}
    12431315
     
    12611333 * @param pos Center position
    12621334 */
    1263 static errno_t ui_wdecor_btn_close_paint(ui_pbutton_t *pbutton,
     1335static errno_t ui_wdecor_btn_close_decor_paint(ui_pbutton_t *pbutton,
    12641336    void *arg, gfx_coord2_t *pos)
    12651337{
     
    12781350}
    12791351
     1352/** Paint close button in text mode.
     1353 *
     1354 * @param pbutton Push button
     1355 * @param arg Argument (ui_wdecor_t *)
     1356 */
     1357static errno_t ui_wdecor_btn_close_paint_text(ui_pbutton_t *pbutton, void *arg)
     1358{
     1359        ui_wdecor_t *wdecor = (ui_wdecor_t *)arg;
     1360        errno_t rc;
     1361        gfx_text_fmt_t fmt;
     1362
     1363        gfx_text_fmt_init(&fmt);
     1364        fmt.font = wdecor->res->font;
     1365        fmt.color = (pbutton->held && pbutton->inside) ?
     1366            wdecor->res->wnd_sel_text_color :
     1367            wdecor->res->tbar_act_text_color;
     1368        fmt.halign = gfx_halign_left;
     1369        fmt.valign = gfx_valign_top;
     1370
     1371        rc = gfx_puttext(&pbutton->rect.p0, &fmt, "[\u25a0]");
     1372        if (rc != EOK)
     1373                return rc;
     1374
     1375        return gfx_update(wdecor->res->gc);
     1376}
     1377
    12801378/** @}
    12811379 */
Note: See TracChangeset for help on using the changeset viewer.