Changeset 266ec54 in mainline for uspace/lib/ui/src


Ignore:
Timestamp:
2020-11-28T23:06:31Z (5 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
db3c6795
Parents:
554a5f1
git-author:
Jiri Svoboda <jiri@…> (2020-11-27 22:30:28)
git-committer:
Jiri Svoboda <jiri@…> (2020-11-28 23:06:31)
Message:

Viewer fullsreen mode

Fullscreen window placement is more of a stopgap. Proper
solution would probably be via maximizing the window.

Location:
uspace/lib/ui/src
Files:
2 edited

Legend:

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

    r554a5f1 r266ec54  
    173173        ui_wdecor_get_geom(wdecor, &geom);
    174174
    175         rc = ui_paint_bevel(wdecor->res->gc, &rect,
    176             wdecor->res->wnd_frame_hi_color,
    177             wdecor->res->wnd_frame_sh_color, 1, &rect);
    178         if (rc != EOK)
    179                 return rc;
    180 
    181         rc = ui_paint_bevel(wdecor->res->gc, &rect,
    182             wdecor->res->wnd_highlight_color,
    183             wdecor->res->wnd_shadow_color, 1, &rect);
    184         if (rc != EOK)
    185                 return rc;
    186 
    187         rc = ui_paint_bevel(wdecor->res->gc, &rect,
    188             wdecor->res->wnd_face_color,
    189             wdecor->res->wnd_face_color, 2, &rect);
    190         if (rc != EOK)
    191                 return rc;
    192 
    193         trect = geom.title_bar_rect;
    194 
    195         rc = ui_paint_bevel(wdecor->res->gc, &trect,
    196             wdecor->res->wnd_shadow_color,
    197             wdecor->res->wnd_highlight_color, 1, &trect);
    198         if (rc != EOK)
    199                 return rc;
    200 
    201         rc = gfx_set_color(wdecor->res->gc, wdecor->active ?
    202             wdecor->res->tbar_act_bg_color :
    203             wdecor->res->tbar_inact_bg_color);
    204         if (rc != EOK)
    205                 return rc;
    206 
    207         rc = gfx_fill_rect(wdecor->res->gc, &trect);
    208         if (rc != EOK)
    209                 return rc;
    210 
    211         gfx_text_fmt_init(&fmt);
    212         fmt.halign = gfx_halign_center;
    213         fmt.valign = gfx_valign_center;
    214 
    215         pos.x = (trect.p0.x + trect.p1.x) / 2;
    216         pos.y = (trect.p0.y + trect.p1.y) / 2;
    217 
    218         rc = gfx_set_color(wdecor->res->gc, wdecor->active ?
    219             wdecor->res->tbar_act_text_color :
    220             wdecor->res->tbar_inact_text_color);
    221         if (rc != EOK)
    222                 return rc;
    223 
    224         rc = gfx_puttext(wdecor->res->font, &pos, &fmt, wdecor->caption);
    225         if (rc != EOK)
    226                 return rc;
    227 
    228         rc = ui_pbutton_paint(wdecor->btn_close);
    229         if (rc != EOK)
    230                 return rc;
     175        if ((wdecor->style & ui_wds_frame) != 0) {
     176                rc = ui_paint_bevel(wdecor->res->gc, &rect,
     177                    wdecor->res->wnd_frame_hi_color,
     178                    wdecor->res->wnd_frame_sh_color, 1, &rect);
     179                if (rc != EOK)
     180                        return rc;
     181
     182                rc = ui_paint_bevel(wdecor->res->gc, &rect,
     183                    wdecor->res->wnd_highlight_color,
     184                    wdecor->res->wnd_shadow_color, 1, &rect);
     185                if (rc != EOK)
     186                        return rc;
     187
     188                rc = ui_paint_bevel(wdecor->res->gc, &rect,
     189                    wdecor->res->wnd_face_color,
     190                    wdecor->res->wnd_face_color, 2, &rect);
     191                if (rc != EOK)
     192                        return rc;
     193        }
     194
     195        if ((wdecor->style & ui_wds_titlebar) != 0) {
     196                trect = geom.title_bar_rect;
     197
     198                rc = ui_paint_bevel(wdecor->res->gc, &trect,
     199                    wdecor->res->wnd_shadow_color,
     200                    wdecor->res->wnd_highlight_color, 1, &trect);
     201                if (rc != EOK)
     202                        return rc;
     203
     204                rc = gfx_set_color(wdecor->res->gc, wdecor->active ?
     205                    wdecor->res->tbar_act_bg_color :
     206                    wdecor->res->tbar_inact_bg_color);
     207                if (rc != EOK)
     208                        return rc;
     209
     210                rc = gfx_fill_rect(wdecor->res->gc, &trect);
     211                if (rc != EOK)
     212                        return rc;
     213
     214                gfx_text_fmt_init(&fmt);
     215                fmt.halign = gfx_halign_center;
     216                fmt.valign = gfx_valign_center;
     217
     218                pos.x = (trect.p0.x + trect.p1.x) / 2;
     219                pos.y = (trect.p0.y + trect.p1.y) / 2;
     220
     221                rc = gfx_set_color(wdecor->res->gc, wdecor->active ?
     222                    wdecor->res->tbar_act_text_color :
     223                    wdecor->res->tbar_inact_text_color);
     224                if (rc != EOK)
     225                        return rc;
     226
     227                rc = gfx_puttext(wdecor->res->font, &pos, &fmt, wdecor->caption);
     228                if (rc != EOK)
     229                        return rc;
     230
     231                if ((wdecor->style & ui_wds_close_btn) != 0) {
     232                        rc = ui_pbutton_paint(wdecor->btn_close);
     233                        if (rc != EOK)
     234                                return rc;
     235                }
     236        }
    231237
    232238        return EOK;
     
    285291void ui_wdecor_get_geom(ui_wdecor_t *wdecor, ui_wdecor_geom_t *geom)
    286292{
    287         geom->interior_rect.p0.x = wdecor->rect.p0.x + 4;
    288         geom->interior_rect.p0.y = wdecor->rect.p0.y + 4;
    289         geom->interior_rect.p1.x = wdecor->rect.p1.x - 4;
    290         geom->interior_rect.p1.y = wdecor->rect.p1.y - 4;
    291 
    292         geom->title_bar_rect.p0 = geom->interior_rect.p0;
    293         geom->title_bar_rect.p1.x = geom->interior_rect.p1.x;
    294         geom->title_bar_rect.p1.y = geom->interior_rect.p0.y + 22;
    295 
    296         geom->btn_close_rect.p0.x = geom->title_bar_rect.p1.x - 1 - 20;
    297         geom->btn_close_rect.p0.y = geom->title_bar_rect.p0.y + 1;
    298         geom->btn_close_rect.p1.x = geom->title_bar_rect.p1.x - 1;
    299         geom->btn_close_rect.p1.y = geom->title_bar_rect.p0.y + 1 + 20;
    300 
    301         geom->app_area_rect.p0.x = geom->interior_rect.p0.x;
    302         geom->app_area_rect.p0.y = geom->title_bar_rect.p1.y;
    303         geom->app_area_rect.p1 = geom->interior_rect.p1;
     293        /* Does window have a frame? */
     294        if ((wdecor->style & ui_wds_frame) != 0) {
     295                geom->interior_rect.p0.x = wdecor->rect.p0.x + 4;
     296                geom->interior_rect.p0.y = wdecor->rect.p0.y + 4;
     297                geom->interior_rect.p1.x = wdecor->rect.p1.x - 4;
     298                geom->interior_rect.p1.y = wdecor->rect.p1.y - 4;
     299        } else {
     300                geom->interior_rect = wdecor->rect;
     301        }
     302
     303        /* Does window have a title bar? */
     304        if ((wdecor->style & ui_wds_titlebar) != 0) {
     305                geom->title_bar_rect.p0 = geom->interior_rect.p0;
     306                geom->title_bar_rect.p1.x = geom->interior_rect.p1.x;
     307                geom->title_bar_rect.p1.y = geom->interior_rect.p0.y + 22;
     308
     309                geom->app_area_rect.p0.x = geom->interior_rect.p0.x;
     310                geom->app_area_rect.p0.y = geom->title_bar_rect.p1.y;
     311                geom->app_area_rect.p1 = geom->interior_rect.p1;
     312        } else {
     313                geom->title_bar_rect.p0.x = 0;
     314                geom->title_bar_rect.p0.y = 0;
     315                geom->title_bar_rect.p1.x = 0;
     316                geom->title_bar_rect.p1.y = 0;
     317
     318                geom->app_area_rect = geom->interior_rect;
     319        }
     320
     321        /* Does window have a close button? */
     322        if ((wdecor->style & ui_wds_close_btn) != 0) {
     323                geom->btn_close_rect.p0.x = geom->title_bar_rect.p1.x - 1 - 20;
     324                geom->btn_close_rect.p0.y = geom->title_bar_rect.p0.y + 1;
     325                geom->btn_close_rect.p1.x = geom->title_bar_rect.p1.x - 1;
     326                geom->btn_close_rect.p1.y = geom->title_bar_rect.p0.y + 1 + 20;
     327        } else {
     328                geom->btn_close_rect.p0.x = 0;
     329                geom->btn_close_rect.p0.y = 0;
     330                geom->btn_close_rect.p1.x = 0;
     331                geom->btn_close_rect.p1.y = 0;
     332        }
    304333}
    305334
     
    310339 * and its decoration.
    311340 *
     341 * @param style Decoration style
    312342 * @param app Application area rectangle
    313343 * @param rect Place to store (outer) window decoration rectangle
    314344 */
    315 void ui_wdecor_rect_from_app(gfx_rect_t *app, gfx_rect_t *rect)
    316 {
    317         rect->p0.x = app->p0.x - 4;
    318         rect->p0.y = app->p0.y - 22 - 4;
    319         rect->p1.x = app->p1.x + 4;
    320         rect->p1.y = app->p1.y + 4;
     345void ui_wdecor_rect_from_app(ui_wdecor_style_t style, gfx_rect_t *app,
     346    gfx_rect_t *rect)
     347{
     348        *rect = *app;
     349
     350        if ((style & ui_wds_frame) != 0) {
     351                rect->p0.x -= wdecor_edge_w;
     352                rect->p0.y -= wdecor_edge_h;
     353                rect->p1.x += wdecor_edge_w;
     354                rect->p1.y += wdecor_edge_h;
     355        }
     356
     357        if ((style & ui_wds_titlebar) != 0)
     358                rect->p0.y -= 22;
    321359}
    322360
     
    471509        ui_wdecor_get_geom(wdecor, &geom);
    472510
    473         claim = ui_pbutton_pos_event(wdecor->btn_close, event);
    474         if (claim == ui_claimed)
    475                 return;
     511        if ((wdecor->style & ui_wds_close_btn) != 0) {
     512                claim = ui_pbutton_pos_event(wdecor->btn_close, event);
     513                if (claim == ui_claimed)
     514                        return;
     515        }
    476516
    477517        ui_wdecor_frame_pos_event(wdecor, event);
    478518
    479         if (event->type == POS_PRESS &&
    480             gfx_pix_inside_rect(&pos, &geom.title_bar_rect))
    481                 ui_wdecor_move(wdecor, &pos);
     519        if ((wdecor->style & ui_wds_titlebar) != 0)  {
     520                if (event->type == POS_PRESS &&
     521                    gfx_pix_inside_rect(&pos, &geom.title_bar_rect))
     522                        ui_wdecor_move(wdecor, &pos);
     523        }
    482524}
    483525
  • uspace/lib/ui/src/window.c

    r554a5f1 r266ec54  
    8989 *
    9090 * Window parameters structure must always be initialized using this function
    91  * first.
     91 * first. By default, the window will be decorated. To get a non-decorated
     92 * window, one needs to clear ui_wds_decorated
     93 * (e.g. params->style &= ~ui_wds_decorated).
    9294 *
    9395 * @param params Window parameters structure
     
    9698{
    9799        memset(params, 0, sizeof(ui_wnd_params_t));
     100
     101        /* Make window decorated by default. */
     102        params->style = ui_wds_decorated;
    98103}
    99104
     
    111116        display_info_t info;
    112117        gfx_coord2_t pos;
     118        gfx_coord2_t scr_dims;
    113119        display_wnd_params_t dparams;
    114120        display_window_t *dwindow = NULL;
     
    129135
    130136        if (ui->display != NULL) {
     137                if (params->placement != ui_wnd_place_default) {
     138                        rc = display_get_info(ui->display, &info);
     139                        if (rc != EOK)
     140                                goto error;
     141                }
     142
     143                if (params->placement == ui_wnd_place_full_screen) {
     144                        /* Make window the size of the screen */
     145                        gfx_rect_dims(&info.rect, &scr_dims);
     146                        gfx_coord2_add(&dparams.rect.p0, &scr_dims,
     147                            &dparams.rect.p1);
     148                }
     149
    131150                rc = display_window_create(ui->display, &dparams, &dwnd_cb,
    132151                    (void *) window, &dwindow);
     
    135154
    136155                if (params->placement != ui_wnd_place_default) {
    137                         rc = display_get_info(ui->display, &info);
    138                         if (rc != EOK)
    139                                 goto error;
    140 
    141156                        pos.x = 0;
    142157                        pos.y = 0;
     
    146161                                assert(false);
    147162                        case ui_wnd_place_top_left:
     163                        case ui_wnd_place_full_screen:
    148164                                pos.x = info.rect.p0.x - params->rect.p0.x;
    149165                                pos.y = info.rect.p0.y - params->rect.p0.y;
     
    188204                goto error;
    189205
    190         ui_wdecor_set_rect(wdecor, &params->rect);
     206        ui_wdecor_set_rect(wdecor, &dparams.rect);
    191207        ui_wdecor_set_cb(wdecor, &wdecor_cb, (void *) window);
    192208        ui_wdecor_paint(wdecor);
     
    194210        window->ui = ui;
    195211        window->dwindow = dwindow;
    196         window->rect = params->rect;
     212        window->rect = dparams.rect;
    197213        window->gc = gc;
    198214        window->res = res;
Note: See TracChangeset for help on using the changeset viewer.