ivi-shell: convert from screen to global coordinates
In single screen, the coordinates of layer local coordinates are the same as global coordinates. However, to support multi screens, the layer-local coordinates shall be transformed to multi screen coordinates, which is global coordinates. The abosolute coordinates of a screen in global stored in (x,y) of output of its weston output so it shall be used to transform layer-local to global coordinates. Signed-off-by: Nobuhiko Tanibata <nobuhiko_tanibata@xddp.denso.co.jp> Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
This commit is contained in:
committed by
Pekka Paalanen
parent
b4cb25dc26
commit
29babdf099
@@ -532,6 +532,7 @@ calc_inverse_matrix_transform(const struct weston_matrix *matrix,
|
|||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
calc_surface_to_global_matrix_and_mask_to_weston_surface(
|
calc_surface_to_global_matrix_and_mask_to_weston_surface(
|
||||||
|
struct ivi_layout_screen *iviscrn,
|
||||||
struct ivi_layout_layer *ivilayer,
|
struct ivi_layout_layer *ivilayer,
|
||||||
struct ivi_layout_surface *ivisurf,
|
struct ivi_layout_surface *ivisurf,
|
||||||
struct weston_matrix *m,
|
struct weston_matrix *m,
|
||||||
@@ -539,6 +540,7 @@ calc_surface_to_global_matrix_and_mask_to_weston_surface(
|
|||||||
{
|
{
|
||||||
const struct ivi_layout_surface_properties *sp = &ivisurf->prop;
|
const struct ivi_layout_surface_properties *sp = &ivisurf->prop;
|
||||||
const struct ivi_layout_layer_properties *lp = &ivilayer->prop;
|
const struct ivi_layout_layer_properties *lp = &ivilayer->prop;
|
||||||
|
struct weston_output *output = iviscrn->output;
|
||||||
struct ivi_rectangle weston_surface_rect = { 0,
|
struct ivi_rectangle weston_surface_rect = { 0,
|
||||||
0,
|
0,
|
||||||
ivisurf->surface->width,
|
ivisurf->surface->width,
|
||||||
@@ -566,7 +568,9 @@ calc_surface_to_global_matrix_and_mask_to_weston_surface(
|
|||||||
* coordinates to global coordinates, which is computed by
|
* coordinates to global coordinates, which is computed by
|
||||||
* two steps,
|
* two steps,
|
||||||
* - surface-local coordinates to layer-local coordinates
|
* - surface-local coordinates to layer-local coordinates
|
||||||
* - layer-local coordinates to global coordinates
|
* - layer-local coordinates to a single screen-local coordinates
|
||||||
|
* - a single screen-local coordinates to multi screen coordinates,
|
||||||
|
* which is global coordinates.
|
||||||
*/
|
*/
|
||||||
calc_transformation_matrix(&surface_source_rect,
|
calc_transformation_matrix(&surface_source_rect,
|
||||||
&surface_dest_rect,
|
&surface_dest_rect,
|
||||||
@@ -576,6 +580,8 @@ calc_surface_to_global_matrix_and_mask_to_weston_surface(
|
|||||||
&layer_dest_rect,
|
&layer_dest_rect,
|
||||||
lp->orientation, m);
|
lp->orientation, m);
|
||||||
|
|
||||||
|
weston_matrix_translate(m, output->x, output->y, 0.0f);
|
||||||
|
|
||||||
/* this intersected ivi_rectangle would be used for masking
|
/* this intersected ivi_rectangle would be used for masking
|
||||||
* weston_surface
|
* weston_surface
|
||||||
*/
|
*/
|
||||||
@@ -622,7 +628,7 @@ update_prop(struct ivi_layout_screen *iviscrn,
|
|||||||
weston_matrix_init(&ivisurf->transform.matrix);
|
weston_matrix_init(&ivisurf->transform.matrix);
|
||||||
|
|
||||||
calc_surface_to_global_matrix_and_mask_to_weston_surface(
|
calc_surface_to_global_matrix_and_mask_to_weston_surface(
|
||||||
ivilayer, ivisurf, &ivisurf->transform.matrix, &r);
|
iviscrn, ivilayer, ivisurf, &ivisurf->transform.matrix, &r);
|
||||||
|
|
||||||
weston_view_set_mask(tmpview, r.x, r.y, r.width, r.height);
|
weston_view_set_mask(tmpview, r.x, r.y, r.width, r.height);
|
||||||
wl_list_insert(&tmpview->geometry.transformation_list,
|
wl_list_insert(&tmpview->geometry.transformation_list,
|
||||||
|
|||||||
Reference in New Issue
Block a user