@ -256,9 +256,31 @@ repaint_region(struct weston_view *ev, struct weston_output *output,
pixman_double_to_fixed ( ( double ) - ev - > geometry . y ) ) ;
pixman_double_to_fixed ( ( double ) - ev - > geometry . y ) ) ;
}
}
if ( ev - > surface - > buffer_viewport . scaler_set ) {
double scaler_x , scaler_y , scaler_width , scaler_height ;
double ratio_x , ratio_y ;
fw = pixman_int_to_fixed ( ev - > surface - > width ) ;
scaler_x = wl_fixed_to_double ( ev - > surface - > buffer_viewport . src_x ) ;
fh = pixman_int_to_fixed ( ev - > surface - > height ) ;
scaler_y = wl_fixed_to_double ( ev - > surface - > buffer_viewport . src_y ) ;
scaler_width = wl_fixed_to_double ( ev - > surface - > buffer_viewport . src_width ) ;
scaler_height = wl_fixed_to_double ( ev - > surface - > buffer_viewport . src_height ) ;
ratio_x = scaler_width / ev - > surface - > buffer_viewport . dst_width ;
ratio_y = scaler_height / ev - > surface - > buffer_viewport . dst_height ;
pixman_transform_scale ( & transform , NULL ,
pixman_double_to_fixed ( ratio_x ) ,
pixman_double_to_fixed ( ratio_y ) ) ;
pixman_transform_translate ( & transform , NULL , pixman_double_to_fixed ( scaler_x ) ,
pixman_double_to_fixed ( scaler_y ) ) ;
}
pixman_transform_scale ( & transform , NULL ,
pixman_double_to_fixed ( ev - > surface - > buffer_viewport . scale ) ,
pixman_double_to_fixed ( ev - > surface - > buffer_viewport . scale ) ) ;
fw = pixman_int_to_fixed ( pixman_image_get_width ( ps - > image ) ) ;
fh = pixman_int_to_fixed ( pixman_image_get_height ( ps - > image ) ) ;
switch ( ev - > surface - > buffer_viewport . transform ) {
switch ( ev - > surface - > buffer_viewport . transform ) {
case WL_OUTPUT_TRANSFORM_FLIPPED :
case WL_OUTPUT_TRANSFORM_FLIPPED :
@ -294,10 +316,6 @@ repaint_region(struct weston_view *ev, struct weston_output *output,
break ;
break ;
}
}
pixman_transform_scale ( & transform , NULL ,
pixman_double_to_fixed ( ( double ) ev - > surface - > buffer_viewport . scale ) ,
pixman_double_to_fixed ( ( double ) ev - > surface - > buffer_viewport . scale ) ) ;
pixman_image_set_transform ( ps - > image , & transform ) ;
pixman_image_set_transform ( ps - > image , & transform ) ;
if ( ev - > transform . enabled | | output - > current_scale ! = ev - > surface - > buffer_viewport . scale )
if ( ev - > transform . enabled | | output - > current_scale ! = ev - > surface - > buffer_viewport . scale )