Changeset a2e104e in mainline for uspace/srv/hid/display/window.c


Ignore:
Timestamp:
2020-03-05T11:23:41Z (5 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
1e4a937
Parents:
338d0935
git-author:
Jiri Svoboda <jiri@…> (2020-03-04 19:23:29)
git-committer:
Jiri Svoboda <jiri@…> (2020-03-05 11:23:41)
Message:

Move windows by dragging decoration

Or dragging anywhere with button 2. Need to add Ctrl/Alt/Shift state
to pos_event_t and change the latter to Alt-drag/Shift-drag.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/hid/display/window.c

    r338d0935 ra2e104e  
    436436}
    437437
     438/** Start moving a window, detected by client.
     439 *
     440 * @param wnd Window
     441 * @param pos Position where the pointer was when the move started
     442 *            relative to the window
     443 * @param event Button press event
     444 */
     445void ds_window_move_req(ds_window_t *wnd, gfx_coord2_t *pos)
     446{
     447        log_msg(LOG_DEFAULT, LVL_DEBUG, "ds_window_move_req (%d, %d)",
     448            (int) pos->x, (int) pos->y);
     449
     450        if (wnd->state != dsw_idle)
     451                return;
     452
     453        gfx_coord2_add(&wnd->dpos, pos, &wnd->orig_pos);
     454        wnd->state = dsw_moving;
     455}
     456
    438457/** Start moving a window by mouse drag.
    439458 *
     
    446465            (int) event->hpos, (int) event->vpos);
    447466
    448         assert(wnd->state == dsw_idle);
     467        if (wnd->state != dsw_idle)
     468                return;
    449469
    450470        wnd->orig_pos.x = event->hpos;
     
    467487            (int) event->hpos, (int) event->vpos);
    468488
    469         assert(wnd->state == dsw_moving);
     489        if (wnd->state != dsw_moving)
     490                return;
     491
    470492        pos.x = event->hpos;
    471493        pos.y = event->vpos;
     
    497519            (int) event->hpos, (int) event->vpos);
    498520
     521        if (wnd->state != dsw_moving)
     522                return;
     523
    499524        gfx_rect_translate(&wnd->dpos, &wnd->rect, &drect);
    500525
     
    505530        }
    506531
    507         assert(wnd->state == dsw_moving);
    508532        pos.x = event->hpos;
    509533        pos.y = event->vpos;
     
    559583{
    560584        pos_event_t tevent;
     585        gfx_coord2_t pos;
     586        gfx_rect_t drect;
     587        bool inside;
    561588
    562589        log_msg(LOG_DEFAULT, LVL_DEBUG,
     
    564591            (int) event->hpos, (int) event->vpos);
    565592
    566         if (event->type == POS_PRESS) {
    567                 if (wnd->state == dsw_idle)
    568                         ds_window_start_move(wnd, event);
    569         }
    570 
    571         if (event->type == POS_RELEASE) {
    572                 if (wnd->state == dsw_moving)
    573                         ds_window_finish_move(wnd, event);
    574         }
    575 
    576         if (event->type == POS_UPDATE) {
    577                 if (wnd->state == dsw_moving)
    578                         ds_window_update_move(wnd, event);
    579         }
     593        pos.x = event->hpos;
     594        pos.y = event->vpos;
     595        gfx_rect_translate(&wnd->dpos, &wnd->rect, &drect);
     596        inside = gfx_pix_inside_rect(&pos, &drect);
     597
     598        if (event->type == POS_PRESS && event->btn_num == 2 && inside)
     599                ds_window_start_move(wnd, event);
     600
     601        if (event->type == POS_RELEASE)
     602                ds_window_finish_move(wnd, event);
     603
     604        if (event->type == POS_UPDATE)
     605                ds_window_update_move(wnd, event);
    580606
    581607        /* Transform event coordinates to window-local */
Note: See TracChangeset for help on using the changeset viewer.