Changeset 1769693 in mainline


Ignore:
Timestamp:
2020-10-19T20:17:11Z (4 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
ba09d06
Parents:
de9992c
Message:

Window decoration

Location:
uspace
Files:
5 added
7 edited

Legend:

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

    rde9992c r1769693  
    4242#include <ui/pbutton.h>
    4343#include <ui/resource.h>
     44#include <ui/wdecor.h>
    4445#include "uidemo.h"
    4546
    4647static void wnd_close_event(void *);
     48static void wnd_focus_event(void *);
    4749static void wnd_kbd_event(void *, kbd_event_t *);
    4850static void wnd_pos_event(void *, pos_event_t *);
     51static void wnd_unfocus_event(void *);
    4952
    5053static display_wnd_cb_t wnd_cb = {
    5154        .close_event = wnd_close_event,
     55        .focus_event = wnd_focus_event,
    5256        .kbd_event = wnd_kbd_event,
    53         .pos_event = wnd_pos_event
     57        .pos_event = wnd_pos_event,
     58        .unfocus_event = wnd_unfocus_event
    5459};
    5560
     
    6065};
    6166
     67static void wd_move(ui_wdecor_t *, void *, gfx_coord2_t *);
     68
     69static ui_wdecor_cb_t wdecor_cb = {
     70        .move = wd_move
     71};
     72
    6273static bool quit = false;
    6374
     
    7384        printf("Close event\n");
    7485        quit = true;
     86}
     87
     88/** Handle window focus event. */
     89static void wnd_focus_event(void *arg)
     90{
     91        ui_demo_t *demo = (ui_demo_t *) arg;
     92
     93        if (demo->wdecor != NULL) {
     94                ui_wdecor_set_active(demo->wdecor, true);
     95                ui_wdecor_paint(demo->wdecor);
     96        }
    7597}
    7698
     
    88110        ui_demo_t *demo = (ui_demo_t *) arg;
    89111
     112        /* Make sure we don't process events until fully initialized */
     113        if (demo->wdecor == NULL || demo->pb1 == NULL || demo->pb2 == NULL)
     114                return;
     115
     116        ui_wdecor_pos_event(demo->wdecor, event);
    90117        ui_pbutton_pos_event(demo->pb1, event);
    91118        ui_pbutton_pos_event(demo->pb2, event);
     119}
     120
     121/** Handle window unfocus event. */
     122static void wnd_unfocus_event(void *arg)
     123{
     124        ui_demo_t *demo = (ui_demo_t *) arg;
     125
     126        if (demo->wdecor != NULL) {
     127                ui_wdecor_set_active(demo->wdecor, false);
     128                ui_wdecor_paint(demo->wdecor);
     129        }
    92130}
    93131
     
    106144                printf("Clicked 'Cancel' button\n");
    107145        }
     146}
     147
     148/** Window decoration requested window move.
     149 *
     150 * @param wdecor Window decoration
     151 * @param arg Argument (demo)
     152 * @param pos Position where the title bar was pressed
     153 */
     154static void wd_move(ui_wdecor_t *wdecor, void *arg, gfx_coord2_t *pos)
     155{
     156        ui_demo_t *demo = (ui_demo_t *) arg;
     157
     158        (void) display_window_move_req(demo->dwindow, pos);
    108159}
    109160
     
    135186        params.rect.p1.y = 100;
    136187
     188        memset((void *) &demo, 0, sizeof(demo));
     189
    137190        rc = display_window_create(display, &params, &wnd_cb, (void *) &demo,
    138191            &window);
     
    142195        }
    143196
     197        demo.dwindow = window;
     198
    144199        rc = display_window_get_gc(window, &gc);
    145200        if (rc != EOK) {
     
    155210                return rc;
    156211        }
     212
     213        printf("Create window decoration\n");
     214        rc = ui_wdecor_create(ui_res, "UI Demo", &demo.wdecor);
     215        if (rc != EOK) {
     216                printf("Error creating window decoration.\n");
     217                return rc;
     218        }
     219
     220        ui_wdecor_set_rect(demo.wdecor, &params.rect);
     221        ui_wdecor_set_cb(demo.wdecor, &wdecor_cb, (void *) &demo);
    157222
    158223        rc = ui_pbutton_create(ui_res, "Confirm", &demo.pb1);
     
    207272        color = NULL;
    208273
     274        rc = ui_wdecor_paint(demo.wdecor);
     275        if (rc != EOK) {
     276                printf("Error painting window decoration.\n");
     277                return rc;
     278        }
     279
    209280        rc = ui_pbutton_paint(demo.pb1);
    210281        if (rc != EOK) {
     
    223294        }
    224295
     296        ui_wdecor_destroy(demo.wdecor);
    225297        ui_pbutton_destroy(demo.pb1);
    226298        ui_pbutton_destroy(demo.pb2);
  • uspace/app/uidemo/uidemo.h

    rde9992c r1769693  
    3737#define UIDEMO_H
    3838
     39#include <display.h>
     40#include <ui/pbutton.h>
     41#include <ui/wdecor.h>
     42
    3943/** User interface demo */
    4044typedef struct {
     45        display_window_t *dwindow;
     46        ui_wdecor_t *wdecor;
    4147        ui_pbutton_t *pb1;
    4248        ui_pbutton_t *pb2;
  • uspace/lib/ui/meson.build

    rde9992c r1769693  
    3232        'src/pbutton.c',
    3333        'src/resource.c',
     34        'src/wdecor.c'
    3435)
    3536
     
    3940        'test/pbutton.c',
    4041        'test/resource.c',
     42        'test/wdecor.c',
    4143)
  • uspace/lib/ui/private/pbutton.h

    rde9992c r1769693  
    3838#define _UI_PRIVATE_PBUTTON_H
    3939
    40 #include <gfx/context.h>
    4140#include <gfx/coord.h>
    4241#include <stdbool.h>
  • uspace/lib/ui/private/resource.h

    rde9992c r1769693  
    6565        /** Button shadow color */
    6666        gfx_color_t *btn_shadow_color;
     67
     68        /** Window face color */
     69        gfx_color_t *wnd_face_color;
     70        /** Window text color */
     71        gfx_color_t *wnd_text_color;
     72        /** Window frame hightlight color */
     73        gfx_color_t *wnd_frame_hi_color;
     74        /** Window frame shadow color */
     75        gfx_color_t *wnd_frame_sh_color;
     76        /** Window highlight color */
     77        gfx_color_t *wnd_highlight_color;
     78        /** Window shadow color */
     79        gfx_color_t *wnd_shadow_color;
     80
     81        /** Active titlebar background color */
     82        gfx_color_t *tbar_act_bg_color;
     83        /** Active titlebar text color */
     84        gfx_color_t *tbar_act_text_color;
     85        /** Inactive titlebar background color */
     86        gfx_color_t *tbar_inact_bg_color;
     87        /** Inactive titlebar text color */
     88        gfx_color_t *tbar_inact_text_color;
    6789};
    6890
  • uspace/lib/ui/src/resource.c

    rde9992c r1769693  
    6464        gfx_color_t *btn_highlight_color = NULL;
    6565        gfx_color_t *btn_shadow_color = NULL;
     66        gfx_color_t *wnd_face_color = NULL;
     67        gfx_color_t *wnd_text_color = NULL;
     68        gfx_color_t *wnd_frame_hi_color = NULL;
     69        gfx_color_t *wnd_frame_sh_color = NULL;
     70        gfx_color_t *wnd_highlight_color = NULL;
     71        gfx_color_t *wnd_shadow_color = NULL;
     72        gfx_color_t *tbar_act_bg_color = NULL;
     73        gfx_color_t *tbar_inact_bg_color = NULL;
     74        gfx_color_t *tbar_act_text_color = NULL;
     75        gfx_color_t *tbar_inact_text_color = NULL;
    6676        errno_t rc;
    6777
     
    105115                goto error;
    106116
     117        rc = gfx_color_new_rgb_i16(0xc8c8, 0xc8c8, 0xc8c8, &wnd_face_color);
     118        if (rc != EOK)
     119                goto error;
     120
     121        rc = gfx_color_new_rgb_i16(0, 0, 0, &wnd_text_color);
     122        if (rc != EOK)
     123                goto error;
     124
     125        rc = gfx_color_new_rgb_i16(0x8888, 0x8888, 0x8888, &wnd_frame_hi_color);
     126        if (rc != EOK)
     127                goto error;
     128
     129        rc = gfx_color_new_rgb_i16(0, 0, 0, &wnd_frame_sh_color);
     130        if (rc != EOK)
     131                goto error;
     132
     133        rc = gfx_color_new_rgb_i16(0xffff, 0xffff, 0xffff,
     134            &wnd_highlight_color);
     135        if (rc != EOK)
     136                goto error;
     137
     138        rc = gfx_color_new_rgb_i16(0x8888, 0x8888, 0x8888, &wnd_shadow_color);
     139        if (rc != EOK)
     140                goto error;
     141
     142        rc = gfx_color_new_rgb_i16(0x5858, 0x6a6a, 0xc4c4, &tbar_act_bg_color);
     143        if (rc != EOK)
     144                goto error;
     145
     146        rc = gfx_color_new_rgb_i16(0xffff, 0xffff, 0xffff,
     147            &tbar_act_text_color);
     148        if (rc != EOK)
     149                goto error;
     150
     151        rc = gfx_color_new_rgb_i16(0xdddd, 0xdddd, 0xdddd,
     152            &tbar_inact_bg_color);
     153        if (rc != EOK)
     154                goto error;
     155
     156        rc = gfx_color_new_rgb_i16(0x5858, 0x5858, 0x5858,
     157            &tbar_inact_text_color);
     158        if (rc != EOK)
     159                goto error;
     160
    107161        resource->gc = gc;
    108162        resource->tface = tface;
    109163        resource->font = font;
     164
    110165        resource->btn_frame_color = btn_frame_color;
    111166        resource->btn_face_color = btn_face_color;
     
    113168        resource->btn_highlight_color = btn_highlight_color;
    114169        resource->btn_shadow_color = btn_shadow_color;
     170
     171        resource->wnd_face_color = wnd_face_color;
     172        resource->wnd_text_color = wnd_text_color;
     173        resource->wnd_frame_hi_color = wnd_frame_hi_color;
     174        resource->wnd_frame_sh_color = wnd_frame_sh_color;
     175        resource->wnd_highlight_color = wnd_highlight_color;
     176        resource->wnd_shadow_color = wnd_shadow_color;
     177
     178        resource->tbar_act_bg_color = tbar_act_bg_color;
     179        resource->tbar_act_text_color = tbar_act_text_color;
     180        resource->tbar_inact_bg_color = tbar_inact_bg_color;
     181        resource->tbar_inact_text_color = tbar_inact_text_color;
     182
    115183        *rresource = resource;
    116184        return EOK;
     
    126194        if (btn_shadow_color != NULL)
    127195                gfx_color_delete(btn_shadow_color);
     196
     197        if (wnd_face_color != NULL)
     198                gfx_color_delete(wnd_face_color);
     199        if (wnd_text_color != NULL)
     200                gfx_color_delete(wnd_text_color);
     201        if (wnd_frame_hi_color != NULL)
     202                gfx_color_delete(wnd_frame_hi_color);
     203        if (wnd_frame_sh_color != NULL)
     204                gfx_color_delete(wnd_frame_sh_color);
     205        if (wnd_highlight_color != NULL)
     206                gfx_color_delete(wnd_highlight_color);
     207        if (wnd_shadow_color != NULL)
     208                gfx_color_delete(wnd_shadow_color);
     209
     210        if (tbar_act_bg_color != NULL)
     211                gfx_color_delete(tbar_act_bg_color);
     212        if (tbar_act_text_color != NULL)
     213                gfx_color_delete(tbar_act_text_color);
     214        if (tbar_inact_bg_color != NULL)
     215                gfx_color_delete(tbar_inact_bg_color);
     216        if (tbar_inact_text_color != NULL)
     217                gfx_color_delete(tbar_inact_text_color);
     218
    128219        if (tface != NULL)
    129220                gfx_typeface_destroy(tface);
     
    147238        gfx_color_delete(resource->btn_shadow_color);
    148239
     240        gfx_color_delete(resource->wnd_face_color);
     241        gfx_color_delete(resource->wnd_text_color);
     242        gfx_color_delete(resource->wnd_frame_hi_color);
     243        gfx_color_delete(resource->wnd_frame_sh_color);
     244        gfx_color_delete(resource->wnd_highlight_color);
     245        gfx_color_delete(resource->wnd_shadow_color);
     246
     247        gfx_color_delete(resource->tbar_act_bg_color);
     248        gfx_color_delete(resource->tbar_act_text_color);
     249        gfx_color_delete(resource->tbar_inact_bg_color);
     250        gfx_color_delete(resource->tbar_inact_text_color);
     251
    149252        gfx_font_close(resource->font);
    150253        gfx_typeface_destroy(resource->tface);
  • uspace/lib/ui/test/main.c

    rde9992c r1769693  
    3434PCUT_IMPORT(pbutton);
    3535PCUT_IMPORT(resource);
     36PCUT_IMPORT(wdecor);
    3637
    3738PCUT_MAIN();
Note: See TracChangeset for help on using the changeset viewer.