@ -230,6 +230,15 @@ exposay_surface_and_inner_pad_size(pixman_rectangle32_t exposay_area, struct exp
eoutput - > surface_size = exposay_area . height / 2 ;
eoutput - > surface_size = exposay_area . height / 2 ;
}
}
/* Compute the exposay top/left margin in order to centralize it */
static void
exposay_margin_size ( struct desktop_shell * shell , pixman_rectangle32_t exposay_area ,
int row_size , int column_size , int * left_margin , int * top_margin )
{
( * left_margin ) = exposay_area . x + ( exposay_area . width - row_size ) / 2 ;
( * top_margin ) = exposay_area . y + ( exposay_area . height - column_size ) / 2 ;
}
/* Pretty lame layout for now; just tries to make a square. Should take
/* Pretty lame layout for now; just tries to make a square. Should take
* aspect ratio into account really . Also needs to be notified of surface
* aspect ratio into account really . Also needs to be notified of surface
* addition and removal and adjust layout / animate accordingly .
* addition and removal and adjust layout / animate accordingly .
@ -252,7 +261,8 @@ exposay_layout(struct desktop_shell *shell, struct shell_output *shell_output)
struct weston_view * view ;
struct weston_view * view ;
struct exposay_surface * esurface , * highlight = NULL ;
struct exposay_surface * esurface , * highlight = NULL ;
pixman_rectangle32_t exposay_area ;
pixman_rectangle32_t exposay_area ;
int pad ;
int pad , row_size , column_size , left_margin , top_margin ;
int populated_rows ;
int i ;
int i ;
int last_row_removed = 0 ;
int last_row_removed = 0 ;
@ -291,7 +301,16 @@ exposay_layout(struct desktop_shell *shell, struct shell_output *shell_output)
/* Compute each surface size and the inner padding between them */
/* Compute each surface size and the inner padding between them */
exposay_surface_and_inner_pad_size ( exposay_area , eoutput ) ;
exposay_surface_and_inner_pad_size ( exposay_area , eoutput ) ;
/* Compute each row/column size */
pad = eoutput - > surface_size + eoutput - > padding_inner ;
pad = eoutput - > surface_size + eoutput - > padding_inner ;
row_size = ( pad * eoutput - > grid_size ) - eoutput - > padding_inner ;
/* We may have empty rows that should be desconsidered to compute
* column size */
populated_rows = ceil ( eoutput - > num_surfaces / ( float ) eoutput - > grid_size ) ;
column_size = ( pad * populated_rows ) - eoutput - > padding_inner ;
/* Compute a top/left margin to centralize the exposay */
exposay_margin_size ( shell , exposay_area , row_size , column_size , & left_margin , & top_margin ) ;
i = 0 ;
i = 0 ;
wl_list_for_each ( view , & workspace - > layer . view_list . link , layer_link . link ) {
wl_list_for_each ( view , & workspace - > layer . view_list . link , layer_link . link ) {
@ -316,10 +335,8 @@ exposay_layout(struct desktop_shell *shell, struct shell_output *shell_output)
esurface - > row = i / eoutput - > grid_size ;
esurface - > row = i / eoutput - > grid_size ;
esurface - > column = i % eoutput - > grid_size ;
esurface - > column = i % eoutput - > grid_size ;
esurface - > x = exposay_area . x + eoutput - > hpadding_outer ;
esurface - > x = left_margin + ( pad * esurface - > column ) ;
esurface - > x + = pad * esurface - > column ;
esurface - > y = top_margin + ( pad * esurface - > row ) ;
esurface - > y = exposay_area . y + eoutput - > vpadding_outer ;
esurface - > y + = pad * esurface - > row ;
if ( esurface - > row = = eoutput - > grid_size - 1 )
if ( esurface - > row = = eoutput - > grid_size - 1 )
esurface - > x + = ( eoutput - > surface_size + eoutput - > padding_inner ) * last_row_removed / 2 ;
esurface - > x + = ( eoutput - > surface_size + eoutput - > padding_inner ) * last_row_removed / 2 ;