Ignore:
Timestamp:
2012-08-20T22:46:13Z (12 years ago)
Author:
Maurizio Lombardi <m.lombardi85@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
077dad2
Parents:
971f50e7 (diff), dd13349 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

merge mainline changes

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/hid/compositor/compositor.c

    r971f50e7 r6560960  
    9292        sysarg_t id;
    9393        uint8_t state;
    94         sysarg_t hpos;
    95         sysarg_t vpos;
     94        desktop_point_t pos;
    9695        sysarg_t btn_num;
    97         sysarg_t btn_hpos;
    98         sysarg_t btn_vpos;
    99         int accum_dx;
    100         int accum_dy;
     96        desktop_point_t btn_pos;
     97        desktop_vector_t accum;
    10198        sysarg_t grab_flags;
    10299        bool pressed;
     
    135132        vslmode_t mode;
    136133        async_sess_t *sess;
    137         sysarg_t hpos;
    138         sysarg_t vpos;
     134        desktop_point_t pos;
    139135        surface_t *surface;
    140136} viewport_t;
     
    174170
    175171        link_initialize(&p->link);
    176         p->hpos = coord_origin;
    177         p->vpos = coord_origin;
     172        p->pos.x = coord_origin;
     173        p->pos.y = coord_origin;
    178174        p->btn_num = 1;
    179         p->btn_hpos = p->hpos;
    180         p->btn_vpos = p->vpos;
    181         p->accum_dx = 0;
    182         p->accum_dy = 0;
     175        p->btn_pos = p->pos;
     176        p->accum.x = 0;
     177        p->accum.y = 0;
    183178        p->grab_flags = GF_EMPTY;
    184179        p->pressed = false;
     
    307302                bool isec_vp = rectangle_intersect(
    308303                    x_dmg_glob, y_dmg_glob, w_dmg_glob, h_dmg_glob,
    309                     vp->hpos, vp->vpos, w_dmg_vp, h_dmg_vp,
     304                    vp->pos.x, vp->pos.y, w_dmg_vp, h_dmg_vp,
    310305                    &x_dmg_vp, &y_dmg_vp, &w_dmg_vp, &h_dmg_vp);
    311306
     
    313308
    314309                        /* Paint background color. */
    315                         for (sysarg_t y = y_dmg_vp - vp->vpos; y <  y_dmg_vp - vp->vpos + h_dmg_vp; ++y) {
    316                                 for (sysarg_t x = x_dmg_vp - vp->hpos; x < x_dmg_vp - vp->hpos + w_dmg_vp; ++x) {
     310                        for (sysarg_t y = y_dmg_vp - vp->pos.y; y <  y_dmg_vp - vp->pos.y + h_dmg_vp; ++y) {
     311                                for (sysarg_t x = x_dmg_vp - vp->pos.x; x < x_dmg_vp - vp->pos.x + w_dmg_vp; ++x) {
    317312                                        surface_put_pixel(vp->surface, x, y, bg_color);
    318313                                }
     
    352347                                         * coordinates. */
    353348                                        transform = win->transform;
    354                                         double hpos = vp->hpos;
    355                                         double vpos = vp->vpos;
    356                                         transform_translate(&transform, -hpos, -vpos);
     349                                        double_point_t pos;
     350                                        pos.x = vp->pos.x;
     351                                        pos.y = vp->pos.y;
     352                                        transform_translate(&transform, -pos.x, -pos.y);
    357353
    358354                                        source_set_transform(&source, transform);                               
     
    361357
    362358                                        drawctx_transfer(&context,
    363                                             x_dmg_win - vp->hpos, y_dmg_win - vp->vpos, w_dmg_win, h_dmg_win);
     359                                            x_dmg_win - vp->pos.x, y_dmg_win - vp->pos.y, w_dmg_win, h_dmg_win);
    364360                                }
    365361                        }
     
    375371                                bool isec_ptr = rectangle_intersect(
    376372                                    x_dmg_vp, y_dmg_vp, w_dmg_vp, h_dmg_vp,
    377                                     ptr->hpos, ptr->vpos, w_dmg_ptr, h_dmg_ptr,
     373                                    ptr->pos.x, ptr->pos.y, w_dmg_ptr, h_dmg_ptr,
    378374                                    &x_dmg_ptr, &y_dmg_ptr, &w_dmg_ptr, &h_dmg_ptr);
    379375
     
    386382
    387383                                        pixel_t pix = 0;
    388                                         sysarg_t x_vp = x_dmg_ptr - vp->hpos;
    389                                         sysarg_t y_vp = y_dmg_ptr - vp->vpos;
    390                                         sysarg_t x_ptr = x_dmg_ptr - ptr->hpos;
    391                                         sysarg_t y_ptr = y_dmg_ptr - ptr->vpos;
     384                                        sysarg_t x_vp = x_dmg_ptr - vp->pos.x;
     385                                        sysarg_t y_vp = y_dmg_ptr - vp->pos.y;
     386                                        sysarg_t x_ptr = x_dmg_ptr - ptr->pos.x;
     387                                        sysarg_t y_ptr = y_dmg_ptr - ptr->pos.y;
    392388
    393389                                        for (sysarg_t y = 0; y < h_dmg_ptr; ++y) {
     
    901897
    902898        link_initialize(&vp->link);
    903         vp->hpos = coord_origin;
    904         vp->vpos = coord_origin;
     899        vp->pos.x = coord_origin;
     900        vp->pos.y = coord_origin;
    905901
    906902        /* Establish output bidirectional connection. */
     
    1002998        /* window_list_mtx locked by caller */
    1003999
    1004         int dx = pointer->accum_dx;
    1005         int dy = pointer->accum_dy;
    1006         pointer->accum_dx = 0;
    1007         pointer->accum_dy = 0;
     1000        int dx = pointer->accum.x;
     1001        int dy = pointer->accum.y;
     1002        pointer->accum.x = 0;
     1003        pointer->accum.y = 0;
    10081004
    10091005        bool move = (pointer->grab_flags & GF_MOVE_X) || (pointer->grab_flags & GF_MOVE_Y);
     
    10791075    unsigned max_x, unsigned max_y)
    10801076{
    1081         /* XXX TODO */
    1082         return EOK;
     1077        /* XXX TODO Use absolute coordinates directly */
     1078       
     1079        pointer_t *pointer = input_pointer(input);
     1080       
     1081        sysarg_t width, height;
     1082       
     1083        fibril_mutex_lock(&viewport_list_mtx);
     1084        if (list_empty(&viewport_list)) {
     1085                printf("No viewport found\n");
     1086                fibril_mutex_unlock(&viewport_list_mtx);
     1087                return EOK; /* XXX */
     1088        }
     1089        link_t *link = list_first(&viewport_list);
     1090        viewport_t *vp = list_get_instance(link, viewport_t, link);
     1091        surface_get_resolution(vp->surface, &width, &height);
     1092        desktop_point_t vp_pos = vp->pos;
     1093        fibril_mutex_unlock(&viewport_list_mtx);
     1094
     1095        desktop_point_t pos_in_viewport;
     1096        pos_in_viewport.x = x * width / max_x;
     1097        pos_in_viewport.y = y * height / max_y;
     1098       
     1099        /* Calculate offset from pointer */
     1100        fibril_mutex_lock(&pointer_list_mtx);
     1101        desktop_vector_t delta;
     1102        delta.x = (vp_pos.x + pos_in_viewport.x) - pointer->pos.x;
     1103        delta.y = (vp_pos.y + pos_in_viewport.y) - pointer->pos.y;
     1104        fibril_mutex_unlock(&pointer_list_mtx);
     1105       
     1106        return comp_mouse_move(input, delta.x, delta.y);
    10831107}
    10841108
     
    10891113        /* Update pointer position. */
    10901114        fibril_mutex_lock(&pointer_list_mtx);
    1091         sysarg_t old_hpos = pointer->hpos;
    1092         sysarg_t old_vpos = pointer->vpos;
     1115        desktop_point_t old_pos = pointer->pos;
    10931116        sysarg_t cursor_width;
    10941117        sysarg_t cursor_height;
    10951118        surface_get_resolution(pointer->cursor.states[pointer->state],
    10961119             &cursor_width, &cursor_height);
    1097         pointer->hpos += dx;
    1098         pointer->vpos += dy;
     1120        pointer->pos.x += dx;
     1121        pointer->pos.y += dy;
    10991122        fibril_mutex_unlock(&pointer_list_mtx);
    1100         comp_damage(old_hpos, old_vpos, cursor_width, cursor_height);
    1101         comp_damage(old_hpos + dx, old_vpos + dy, cursor_width, cursor_height);
     1123        comp_damage(old_pos.x, old_pos.y, cursor_width, cursor_height);
     1124        comp_damage(old_pos.x + dx, old_pos.y + dy, cursor_width, cursor_height);
    11021125
    11031126        fibril_mutex_lock(&window_list_mtx);
     
    11111134                        sysarg_t width, height;
    11121135                        surface_get_resolution(top->surface, &width, &height);
    1113                         within_client = comp_coord_to_client(pointer->hpos, pointer->vpos,
     1136                        within_client = comp_coord_to_client(pointer->pos.x, pointer->pos.y,
    11141137                            top->transform, width, height, &point_x, &point_y);
    11151138                        fibril_mutex_unlock(&window_list_mtx);
     
    11301153                } else {
    11311154                        /* Pointer is grabbed by top-level window action. */
    1132                         pointer->accum_dx += dx;
    1133                         pointer->accum_dy += dy;
     1155                        pointer->accum.x += dx;
     1156                        pointer->accum.y += dy;
    11341157#if ANIMATE_WINDOW_TRANSFORMS == 1
    11351158                        sysarg_t x, y, width, height;
     
    11531176
    11541177        if (bpress) {
    1155                 pointer->btn_hpos = pointer->hpos;
    1156                 pointer->btn_vpos = pointer->vpos;
     1178                pointer->btn_pos = pointer->pos;
    11571179                pointer->btn_num = bnum;
    11581180                pointer->pressed = true;
     
    11671189                sysarg_t x, y, width, height;
    11681190                surface_get_resolution(win->surface, &width, &height);
    1169                 bool within_client = comp_coord_to_client(pointer->hpos, pointer->vpos,
     1191                bool within_client = comp_coord_to_client(pointer->pos.x, pointer->pos.y,
    11701192                    win->transform, width, height, &x, &y);
    11711193                fibril_mutex_unlock(&window_list_mtx);
     
    12021224                        if (win->surface) {
    12031225                                surface_get_resolution(win->surface, &width, &height);
    1204                                 within_client = comp_coord_to_client(pointer->hpos, pointer->vpos,
     1226                                within_client = comp_coord_to_client(pointer->pos.x, pointer->pos.y,
    12051227                                    win->transform, width, height, &point_x, &point_y);
    12061228                        }
     
    15181540                        switch (key) {
    15191541                        case KC_I:
    1520                                 vp->hpos += 0;
    1521                                 vp->vpos += -20;
     1542                                vp->pos.x += 0;
     1543                                vp->pos.y += -20;
    15221544                                break;
    15231545                        case KC_K:
    1524                                 vp->hpos += 0;
    1525                                 vp->vpos += 20;
     1546                                vp->pos.x += 0;
     1547                                vp->pos.y += 20;
    15261548                                break;
    15271549                        case KC_J:
    1528                                 vp->hpos += -20;
    1529                                 vp->vpos += 0;
     1550                                vp->pos.x += -20;
     1551                                vp->pos.y += 0;
    15301552                                break;
    15311553                        case KC_L:
    1532                                 vp->hpos += 20;
    1533                                 vp->vpos += 0;
     1554                                vp->pos.x += 20;
     1555                                vp->pos.y += 0;
    15341556                                break;
    15351557                        default:
    1536                                 vp->hpos += 0;
    1537                                 vp->vpos += 0;
     1558                                vp->pos.x += 0;
     1559                                vp->pos.y += 0;
    15381560                                break;
    15391561                        }
    15401562                       
    1541                         sysarg_t x = vp->hpos;
    1542                         sysarg_t y = vp->vpos;
     1563                        sysarg_t x = vp->pos.x;
     1564                        sysarg_t y = vp->pos.y;
    15431565                        sysarg_t width, height;
    15441566                        surface_get_resolution(vp->surface, &width, &height);
Note: See TracChangeset for help on using the changeset viewer.