Changeset e022819 in mainline for uspace/lib


Ignore:
Timestamp:
2020-03-14T00:30:53Z (6 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
03c8081
Parents:
1e4a937
Message:

Resizing windows

Location:
uspace/lib
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/display/include/types/display.h

    r1e4a937 re022819  
    7070        /** Position event */
    7171        void (*pos_event)(void *, pos_event_t *);
     72        /** Resize event */
     73        void (*resize_event)(void *, gfx_rect_t *);
    7274        /** Unfocus event */
    7375        void (*unfocus_event)(void *);
  • uspace/lib/display/include/types/display/event.h

    r1e4a937 re022819  
    3636#define _LIBDISPLAY_TYPES_DISPLAY_EVENT_H_
    3737
     38#include <gfx/coord.h>
    3839#include <io/kbd_event.h>
    3940#include <io/pos_event.h>
     
    4950        /** Position event */
    5051        wev_pos,
     52        /** Resize event */
     53        wev_resize,
    5154        /** Window lost focus */
    5255        wev_unfocus
    5356} display_wnd_ev_type_t;
     57
     58/** Display window resize event */
     59typedef struct {
     60        gfx_rect_t rect;
     61} display_wnd_resize_ev_t;
    5462
    5563/** Display window event */
     
    6270                /** Position event data */
    6371                pos_event_t pos;
     72                /** Resize event data */
     73                display_wnd_resize_ev_t resize;
    6474        } ev;
    6575} display_wnd_ev_t;
  • uspace/lib/display/src/display.c

    r1e4a937 re022819  
    460460                        }
    461461                        break;
     462                case wev_resize:
     463                        if (window->cb != NULL && window->cb->resize_event != NULL) {
     464                                window->cb->resize_event(window->cb_arg,
     465                                    &event.ev.resize.rect);
     466                        }
     467                        break;
    462468                case wev_unfocus:
    463469                        if (window->cb != NULL && window->cb->unfocus_event != NULL) {
  • uspace/lib/gui/window.c

    r1e4a937 re022819  
    8787static void window_kbd_event(void *, kbd_event_t *);
    8888static void window_pos_event(void *, pos_event_t *);
     89static void window_resize_event(void *, gfx_rect_t *);
    8990static void window_unfocus_event(void *);
    9091
     
    9495        .kbd_event = window_kbd_event,
    9596        .pos_event = window_pos_event,
     97        .resize_event = window_resize_event,
    9698        .unfocus_event = window_unfocus_event
    9799};
     
    313315                } else if (left && btn_left) {
    314316                        (void) display_window_resize_req(widget->window->dwindow,
    315                             display_wr_bottom, &pos);
     317                            display_wr_left, &pos);
    316318                } else if (bottom && btn_left) {
    317319                        (void) display_window_resize_req(widget->window->dwindow,
     
    319321                } else if (right && btn_left) {
    320322                        (void) display_window_resize_req(widget->window->dwindow,
    321                             display_wr_bottom, &pos);
     323                            display_wr_right, &pos);
    322324                } else if (close && btn_left) {
    323325                        window_close(widget->window);
     
    815817}
    816818
     819static void window_resize_event(void *arg, gfx_rect_t *nrect)
     820{
     821        window_t *win = (window_t *) arg;
     822        window_event_t *event;
     823
     824        event = (window_event_t *) calloc(1, sizeof(window_event_t));
     825        if (event == NULL)
     826                return;
     827
     828        link_initialize(&event->link);
     829        event->type = ET_WINDOW_RESIZE;
     830        event->data.resize.offset_x = nrect->p0.x;
     831        event->data.resize.offset_y = nrect->p0.y;
     832        event->data.resize.width = nrect->p1.x - nrect->p0.x;
     833        event->data.resize.height = nrect->p1.y - nrect->p0.y;
     834        event->data.resize.placement_flags = WINDOW_PLACEMENT_ANY;
     835        prodcons_produce(&win->events, &event->link);
     836}
     837
    817838static void window_unfocus_event(void *arg)
    818839{
Note: See TracChangeset for help on using the changeset viewer.