Ignore:
File:
1 edited

Legend:

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

    rd17a4a9 r111d2d6  
    9292        sysarg_t id;
    9393        uint8_t state;
    94         desktop_point_t pos;
     94        sysarg_t hpos;
     95        sysarg_t vpos;
    9596        sysarg_t btn_num;
    96         desktop_point_t btn_pos;
    97         desktop_vector_t accum;
     97        sysarg_t btn_hpos;
     98        sysarg_t btn_vpos;
     99        int accum_dx;
     100        int accum_dy;
    98101        sysarg_t grab_flags;
    99102        bool pressed;
     
    132135        vslmode_t mode;
    133136        async_sess_t *sess;
    134         desktop_point_t pos;
     137        sysarg_t hpos;
     138        sysarg_t vpos;
    135139        surface_t *surface;
    136140} viewport_t;
     
    170174
    171175        link_initialize(&p->link);
    172         p->pos.x = coord_origin;
    173         p->pos.y = coord_origin;
     176        p->hpos = coord_origin;
     177        p->vpos = coord_origin;
    174178        p->btn_num = 1;
    175         p->btn_pos = p->pos;
    176         p->accum.x = 0;
    177         p->accum.y = 0;
     179        p->btn_hpos = p->hpos;
     180        p->btn_vpos = p->vpos;
     181        p->accum_dx = 0;
     182        p->accum_dy = 0;
    178183        p->grab_flags = GF_EMPTY;
    179184        p->pressed = false;
     
    302307                bool isec_vp = rectangle_intersect(
    303308                    x_dmg_glob, y_dmg_glob, w_dmg_glob, h_dmg_glob,
    304                     vp->pos.x, vp->pos.y, w_dmg_vp, h_dmg_vp,
     309                    vp->hpos, vp->vpos, w_dmg_vp, h_dmg_vp,
    305310                    &x_dmg_vp, &y_dmg_vp, &w_dmg_vp, &h_dmg_vp);
    306311
     
    308313
    309314                        /* Paint background color. */
    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) {
     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) {
    312317                                        surface_put_pixel(vp->surface, x, y, bg_color);
    313318                                }
     
    347352                                         * coordinates. */
    348353                                        transform = win->transform;
    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);
     354                                        double hpos = vp->hpos;
     355                                        double vpos = vp->vpos;
     356                                        transform_translate(&transform, -hpos, -vpos);
    353357
    354358                                        source_set_transform(&source, transform);                               
     
    357361
    358362                                        drawctx_transfer(&context,
    359                                             x_dmg_win - vp->pos.x, y_dmg_win - vp->pos.y, w_dmg_win, h_dmg_win);
     363                                            x_dmg_win - vp->hpos, y_dmg_win - vp->vpos, w_dmg_win, h_dmg_win);
    360364                                }
    361365                        }
     
    371375                                bool isec_ptr = rectangle_intersect(
    372376                                    x_dmg_vp, y_dmg_vp, w_dmg_vp, h_dmg_vp,
    373                                     ptr->pos.x, ptr->pos.y, w_dmg_ptr, h_dmg_ptr,
     377                                    ptr->hpos, ptr->vpos, w_dmg_ptr, h_dmg_ptr,
    374378                                    &x_dmg_ptr, &y_dmg_ptr, &w_dmg_ptr, &h_dmg_ptr);
    375379
     
    382386
    383387                                        pixel_t pix = 0;
    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;
     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;
    388392
    389393                                        for (sysarg_t y = 0; y < h_dmg_ptr; ++y) {
     
    897901
    898902        link_initialize(&vp->link);
    899         vp->pos.x = coord_origin;
    900         vp->pos.y = coord_origin;
     903        vp->hpos = coord_origin;
     904        vp->vpos = coord_origin;
    901905
    902906        /* Establish output bidirectional connection. */
     
    9981002        /* window_list_mtx locked by caller */
    9991003
    1000         int dx = pointer->accum.x;
    1001         int dy = pointer->accum.y;
    1002         pointer->accum.x = 0;
    1003         pointer->accum.y = 0;
     1004        int dx = pointer->accum_dx;
     1005        int dy = pointer->accum_dy;
     1006        pointer->accum_dx = 0;
     1007        pointer->accum_dy = 0;
    10041008
    10051009        bool move = (pointer->grab_flags & GF_MOVE_X) || (pointer->grab_flags & GF_MOVE_Y);
     
    10751079    unsigned max_x, unsigned max_y)
    10761080{
    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);
     1081        /* XXX TODO */
     1082        return EOK;
    11071083}
    11081084
     
    11131089        /* Update pointer position. */
    11141090        fibril_mutex_lock(&pointer_list_mtx);
    1115         desktop_point_t old_pos = pointer->pos;
     1091        sysarg_t old_hpos = pointer->hpos;
     1092        sysarg_t old_vpos = pointer->vpos;
    11161093        sysarg_t cursor_width;
    11171094        sysarg_t cursor_height;
    11181095        surface_get_resolution(pointer->cursor.states[pointer->state],
    11191096             &cursor_width, &cursor_height);
    1120         pointer->pos.x += dx;
    1121         pointer->pos.y += dy;
     1097        pointer->hpos += dx;
     1098        pointer->vpos += dy;
    11221099        fibril_mutex_unlock(&pointer_list_mtx);
    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);
     1100        comp_damage(old_hpos, old_vpos, cursor_width, cursor_height);
     1101        comp_damage(old_hpos + dx, old_vpos + dy, cursor_width, cursor_height);
    11251102
    11261103        fibril_mutex_lock(&window_list_mtx);
     
    11341111                        sysarg_t width, height;
    11351112                        surface_get_resolution(top->surface, &width, &height);
    1136                         within_client = comp_coord_to_client(pointer->pos.x, pointer->pos.y,
     1113                        within_client = comp_coord_to_client(pointer->hpos, pointer->vpos,
    11371114                            top->transform, width, height, &point_x, &point_y);
    11381115                        fibril_mutex_unlock(&window_list_mtx);
     
    11531130                } else {
    11541131                        /* Pointer is grabbed by top-level window action. */
    1155                         pointer->accum.x += dx;
    1156                         pointer->accum.y += dy;
     1132                        pointer->accum_dx += dx;
     1133                        pointer->accum_dy += dy;
    11571134#if ANIMATE_WINDOW_TRANSFORMS == 1
    11581135                        sysarg_t x, y, width, height;
     
    11761153
    11771154        if (bpress) {
    1178                 pointer->btn_pos = pointer->pos;
     1155                pointer->btn_hpos = pointer->hpos;
     1156                pointer->btn_vpos = pointer->vpos;
    11791157                pointer->btn_num = bnum;
    11801158                pointer->pressed = true;
     
    11891167                sysarg_t x, y, width, height;
    11901168                surface_get_resolution(win->surface, &width, &height);
    1191                 bool within_client = comp_coord_to_client(pointer->pos.x, pointer->pos.y,
     1169                bool within_client = comp_coord_to_client(pointer->hpos, pointer->vpos,
    11921170                    win->transform, width, height, &x, &y);
    11931171                fibril_mutex_unlock(&window_list_mtx);
     
    12241202                        if (win->surface) {
    12251203                                surface_get_resolution(win->surface, &width, &height);
    1226                                 within_client = comp_coord_to_client(pointer->pos.x, pointer->pos.y,
     1204                                within_client = comp_coord_to_client(pointer->hpos, pointer->vpos,
    12271205                                    win->transform, width, height, &point_x, &point_y);
    12281206                        }
     
    15401518                        switch (key) {
    15411519                        case KC_I:
    1542                                 vp->pos.x += 0;
    1543                                 vp->pos.y += -20;
     1520                                vp->hpos += 0;
     1521                                vp->vpos += -20;
    15441522                                break;
    15451523                        case KC_K:
    1546                                 vp->pos.x += 0;
    1547                                 vp->pos.y += 20;
     1524                                vp->hpos += 0;
     1525                                vp->vpos += 20;
    15481526                                break;
    15491527                        case KC_J:
    1550                                 vp->pos.x += -20;
    1551                                 vp->pos.y += 0;
     1528                                vp->hpos += -20;
     1529                                vp->vpos += 0;
    15521530                                break;
    15531531                        case KC_L:
    1554                                 vp->pos.x += 20;
    1555                                 vp->pos.y += 0;
     1532                                vp->hpos += 20;
     1533                                vp->vpos += 0;
    15561534                                break;
    15571535                        default:
    1558                                 vp->pos.x += 0;
    1559                                 vp->pos.y += 0;
     1536                                vp->hpos += 0;
     1537                                vp->vpos += 0;
    15601538                                break;
    15611539                        }
    15621540                       
    1563                         sysarg_t x = vp->pos.x;
    1564                         sysarg_t y = vp->pos.y;
     1541                        sysarg_t x = vp->hpos;
     1542                        sysarg_t y = vp->vpos;
    15651543                        sysarg_t width, height;
    15661544                        surface_get_resolution(vp->surface, &width, &height);
Note: See TracChangeset for help on using the changeset viewer.