Changeset 214aefb in mainline for uspace/lib/ui/src


Ignore:
Timestamp:
2021-04-09T22:41:22Z (4 years ago)
Author:
jxsvoboda <5887334+jxsvoboda@…>
Branches:
master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
0262f16c
Parents:
b0858150
git-author:
Jiri Svoboda <jiri@…> (2021-03-27 22:52:09)
git-committer:
jxsvoboda <5887334+jxsvoboda@…> (2021-04-09 22:41:22)
Message:

UI menu (WIP)

Location:
uspace/lib/ui/src
Files:
3 added
4 edited

Legend:

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

    rb0858150 r214aefb  
    149149}
    150150
     151/** Paint outset frame.
     152 *
     153 * @param resource UI resource
     154 * @param rect Rectangle to paint onto
     155 * @param inside Place to store inside rectangle or @c NULL
     156 * @return EOK on success or an error code
     157 */
     158errno_t ui_paint_outset_frame(ui_resource_t *resource, gfx_rect_t *rect,
     159    gfx_rect_t *inside)
     160{
     161        gfx_rect_t frame;
     162        errno_t rc;
     163
     164        rc = ui_paint_bevel(resource->gc, rect,
     165            resource->wnd_frame_hi_color, resource->wnd_frame_sh_color,
     166            1, &frame);
     167        if (rc != EOK)
     168                goto error;
     169
     170        rc = ui_paint_bevel(resource->gc, &frame,
     171            resource->wnd_highlight_color, resource->wnd_shadow_color,
     172            1, inside);
     173        if (rc != EOK)
     174                goto error;
     175
     176        return EOK;
     177error:
     178        return rc;
     179}
     180
    151181/** Paint filled circle vertical scanline.
    152182 *
  • uspace/lib/ui/src/resource.c

    rb0858150 r214aefb  
    6868        gfx_color_t *wnd_face_color = NULL;
    6969        gfx_color_t *wnd_text_color = NULL;
     70        gfx_color_t *wnd_sel_text_color = NULL;
     71        gfx_color_t *wnd_sel_text_bg_color = NULL;
    7072        gfx_color_t *wnd_frame_hi_color = NULL;
    7173        gfx_color_t *wnd_frame_sh_color = NULL;
     
    139141                goto error;
    140142
     143        rc = gfx_color_new_rgb_i16(0xffff, 0xffff, 0xffff, &wnd_sel_text_color);
     144        if (rc != EOK)
     145                goto error;
     146
     147        rc = gfx_color_new_rgb_i16(0x5858, 0x6a6a, 0xc4c4,
     148            &wnd_sel_text_bg_color);
     149        if (rc != EOK)
     150                goto error;
     151
    141152        rc = gfx_color_new_rgb_i16(0x8888, 0x8888, 0x8888, &wnd_frame_hi_color);
    142153        if (rc != EOK)
     
    200211        resource->wnd_face_color = wnd_face_color;
    201212        resource->wnd_text_color = wnd_text_color;
     213        resource->wnd_sel_text_color = wnd_sel_text_color;
     214        resource->wnd_sel_text_bg_color = wnd_sel_text_bg_color;
    202215        resource->wnd_frame_hi_color = wnd_frame_hi_color;
    203216        resource->wnd_frame_sh_color = wnd_frame_sh_color;
     
    232245        if (wnd_text_color != NULL)
    233246                gfx_color_delete(wnd_text_color);
     247        if (wnd_sel_text_color != NULL)
     248                gfx_color_delete(wnd_sel_text_color);
     249        if (wnd_sel_text_bg_color != NULL)
     250                gfx_color_delete(wnd_sel_text_bg_color);
    234251        if (wnd_frame_hi_color != NULL)
    235252                gfx_color_delete(wnd_frame_hi_color);
     
    280297        gfx_color_delete(resource->wnd_face_color);
    281298        gfx_color_delete(resource->wnd_text_color);
     299        gfx_color_delete(resource->wnd_sel_text_color);
     300        gfx_color_delete(resource->wnd_sel_text_bg_color);
    282301        gfx_color_delete(resource->wnd_frame_hi_color);
    283302        gfx_color_delete(resource->wnd_frame_sh_color);
     
    299318}
    300319
     320/** Set UI resource expose callback.
     321 *
     322 * @param resource Resource
     323 * @param cb Callback
     324 * @param arg Callback argument
     325 */
     326void ui_resource_set_expose_cb(ui_resource_t *resource,
     327    ui_expose_cb_t cb, void *arg)
     328{
     329        resource->expose_cb = cb;
     330        resource->expose_arg = arg;
     331}
     332
     333/** Force UI repaint after an area has been exposed.
     334 *
     335 * This is called when a popup disappears, which could have exposed some
     336 * other UI elements. It causes complete repaint of the UI.
     337 *
     338 * NOTE Ideally we could specify the exposed rectangle and then limit
     339 * the repaint to just that. That would, however, require means of
     340 * actually clipping the repaint operation.
     341 */
     342void ui_resource_expose(ui_resource_t *resource)
     343{
     344        if (resource->expose_cb != NULL)
     345                resource->expose_cb(resource->expose_arg);
     346}
     347
    301348/** @}
    302349 */
  • uspace/lib/ui/src/wdecor.c

    rb0858150 r214aefb  
    178178
    179179        if ((wdecor->style & ui_wds_frame) != 0) {
    180                 rc = ui_paint_bevel(wdecor->res->gc, &rect,
    181                     wdecor->res->wnd_frame_hi_color,
    182                     wdecor->res->wnd_frame_sh_color, 1, &rect);
    183                 if (rc != EOK)
    184                         return rc;
    185 
    186                 if (wdecor->res->textmode == false) {
     180
     181                if (wdecor->res->textmode != false) {
    187182                        rc = ui_paint_bevel(wdecor->res->gc, &rect,
    188                             wdecor->res->wnd_highlight_color,
    189                             wdecor->res->wnd_shadow_color, 1, &rect);
     183                            wdecor->res->wnd_frame_hi_color,
     184                            wdecor->res->wnd_frame_sh_color, 1, &rect);
     185                        if (rc != EOK)
     186                                return rc;
     187                } else {
     188                        rc = ui_paint_outset_frame(wdecor->res, &rect,
     189                            &rect);
    190190                        if (rc != EOK)
    191191                                return rc;
  • uspace/lib/ui/src/window.c

    rb0858150 r214aefb  
    9090static void ui_window_app_invalidate(void *, gfx_rect_t *);
    9191static void ui_window_app_update(void *);
     92static void ui_window_expose_cb(void *);
    9293
    9394/** Initialize window parameters structure.
     
    270271        ui_wdecor_paint(wdecor);
    271272
     273        ui_resource_set_expose_cb(res, ui_window_expose_cb, (void *) window);
     274
    272275        window->ui = ui;
    273276        window->dwindow = dwindow;
     
    922925}
    923926
     927/** Window expose callback. */
     928static void ui_window_expose_cb(void *arg)
     929{
     930        ui_window_t *window = (ui_window_t *) arg;
     931
     932        ui_window_paint(window);
     933}
     934
    924935/** @}
    925936 */
Note: See TracChangeset for help on using the changeset viewer.