Changes in uspace/srv/hid/compositor/compositor.c [d17a4a9:111d2d6] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/hid/compositor/compositor.c
rd17a4a9 r111d2d6 92 92 sysarg_t id; 93 93 uint8_t state; 94 desktop_point_t pos; 94 sysarg_t hpos; 95 sysarg_t vpos; 95 96 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; 98 101 sysarg_t grab_flags; 99 102 bool pressed; … … 132 135 vslmode_t mode; 133 136 async_sess_t *sess; 134 desktop_point_t pos; 137 sysarg_t hpos; 138 sysarg_t vpos; 135 139 surface_t *surface; 136 140 } viewport_t; … … 170 174 171 175 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; 174 178 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; 178 183 p->grab_flags = GF_EMPTY; 179 184 p->pressed = false; … … 302 307 bool isec_vp = rectangle_intersect( 303 308 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, 305 310 &x_dmg_vp, &y_dmg_vp, &w_dmg_vp, &h_dmg_vp); 306 311 … … 308 313 309 314 /* 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) { 312 317 surface_put_pixel(vp->surface, x, y, bg_color); 313 318 } … … 347 352 * coordinates. */ 348 353 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); 353 357 354 358 source_set_transform(&source, transform); … … 357 361 358 362 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); 360 364 } 361 365 } … … 371 375 bool isec_ptr = rectangle_intersect( 372 376 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, 374 378 &x_dmg_ptr, &y_dmg_ptr, &w_dmg_ptr, &h_dmg_ptr); 375 379 … … 382 386 383 387 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; 388 392 389 393 for (sysarg_t y = 0; y < h_dmg_ptr; ++y) { … … 897 901 898 902 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; 901 905 902 906 /* Establish output bidirectional connection. */ … … 998 1002 /* window_list_mtx locked by caller */ 999 1003 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; 1004 1008 1005 1009 bool move = (pointer->grab_flags & GF_MOVE_X) || (pointer->grab_flags & GF_MOVE_Y); … … 1075 1079 unsigned max_x, unsigned max_y) 1076 1080 { 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; 1107 1083 } 1108 1084 … … 1113 1089 /* Update pointer position. */ 1114 1090 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; 1116 1093 sysarg_t cursor_width; 1117 1094 sysarg_t cursor_height; 1118 1095 surface_get_resolution(pointer->cursor.states[pointer->state], 1119 1096 &cursor_width, &cursor_height); 1120 pointer-> pos.x+= dx;1121 pointer-> pos.y+= dy;1097 pointer->hpos += dx; 1098 pointer->vpos += dy; 1122 1099 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); 1125 1102 1126 1103 fibril_mutex_lock(&window_list_mtx); … … 1134 1111 sysarg_t width, height; 1135 1112 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, 1137 1114 top->transform, width, height, &point_x, &point_y); 1138 1115 fibril_mutex_unlock(&window_list_mtx); … … 1153 1130 } else { 1154 1131 /* 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; 1157 1134 #if ANIMATE_WINDOW_TRANSFORMS == 1 1158 1135 sysarg_t x, y, width, height; … … 1176 1153 1177 1154 if (bpress) { 1178 pointer->btn_pos = pointer->pos; 1155 pointer->btn_hpos = pointer->hpos; 1156 pointer->btn_vpos = pointer->vpos; 1179 1157 pointer->btn_num = bnum; 1180 1158 pointer->pressed = true; … … 1189 1167 sysarg_t x, y, width, height; 1190 1168 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, 1192 1170 win->transform, width, height, &x, &y); 1193 1171 fibril_mutex_unlock(&window_list_mtx); … … 1224 1202 if (win->surface) { 1225 1203 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, 1227 1205 win->transform, width, height, &point_x, &point_y); 1228 1206 } … … 1540 1518 switch (key) { 1541 1519 case KC_I: 1542 vp-> pos.x+= 0;1543 vp-> pos.y+= -20;1520 vp->hpos += 0; 1521 vp->vpos += -20; 1544 1522 break; 1545 1523 case KC_K: 1546 vp-> pos.x+= 0;1547 vp-> pos.y+= 20;1524 vp->hpos += 0; 1525 vp->vpos += 20; 1548 1526 break; 1549 1527 case KC_J: 1550 vp-> pos.x+= -20;1551 vp-> pos.y+= 0;1528 vp->hpos += -20; 1529 vp->vpos += 0; 1552 1530 break; 1553 1531 case KC_L: 1554 vp-> pos.x+= 20;1555 vp-> pos.y+= 0;1532 vp->hpos += 20; 1533 vp->vpos += 0; 1556 1534 break; 1557 1535 default: 1558 vp-> pos.x+= 0;1559 vp-> pos.y+= 0;1536 vp->hpos += 0; 1537 vp->vpos += 0; 1560 1538 break; 1561 1539 } 1562 1540 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; 1565 1543 sysarg_t width, height; 1566 1544 surface_get_resolution(vp->surface, &width, &height);
Note:
See TracChangeset
for help on using the changeset viewer.