@@ -210,8 +210,8 @@ update_size (MetaShapedTexture *stex)
210210 }
211211}
212212
213- static void
214- ensure_size_valid (MetaShapedTexture * stex )
213+ void
214+ meta_shaped_texture_ensure_size_valid (MetaShapedTexture * stex )
215215{
216216 if (stex -> size_invalid )
217217 update_size (stex );
@@ -545,7 +545,7 @@ do_paint_content (MetaShapedTexture *stex,
545545 CoglFramebuffer * framebuffer ;
546546 int sample_width , sample_height ;
547547
548- ensure_size_valid (stex );
548+ meta_shaped_texture_ensure_size_valid (stex );
549549
550550 dst_width = stex -> dst_width ;
551551 dst_height = stex -> dst_height ;
@@ -822,7 +822,7 @@ meta_shaped_texture_get_preferred_size (ClutterContent *content,
822822{
823823 MetaShapedTexture * stex = META_SHAPED_TEXTURE (content );
824824
825- ensure_size_valid (stex );
825+ meta_shaped_texture_ensure_size_valid (stex );
826826
827827 if (width )
828828 * width = stex -> dst_width ;
@@ -897,6 +897,8 @@ meta_shaped_texture_update_area (MetaShapedTexture *stex,
897897 cairo_rectangle_int_t * clip )
898898{
899899 MetaMonitorTransform inverted_transform ;
900+ int scaled_and_transformed_width ;
901+ int scaled_and_transformed_height ;
900902
901903 if (stex -> texture == NULL )
902904 return FALSE;
@@ -913,12 +915,22 @@ meta_shaped_texture_update_area (MetaShapedTexture *stex,
913915 META_ROUNDING_STRATEGY_SHRINK ,
914916 clip );
915917
918+ if (meta_monitor_transform_is_rotated (stex -> transform ))
919+ {
920+ scaled_and_transformed_width = stex -> tex_height / stex -> buffer_scale ;
921+ scaled_and_transformed_height = stex -> tex_width / stex -> buffer_scale ;
922+ }
923+ else
924+ {
925+ scaled_and_transformed_width = stex -> tex_width / stex -> buffer_scale ;
926+ scaled_and_transformed_height = stex -> tex_height / stex -> buffer_scale ;
927+ }
928+
916929 inverted_transform = meta_monitor_transform_invert (stex -> transform );
917- ensure_size_valid (stex );
918930 meta_rectangle_transform (clip ,
919931 inverted_transform ,
920- stex -> dst_width ,
921- stex -> dst_height ,
932+ scaled_and_transformed_width ,
933+ scaled_and_transformed_height ,
922934 clip );
923935
924936 if (stex -> has_viewport_src_rect || stex -> has_viewport_dst_size )
@@ -939,8 +951,8 @@ meta_shaped_texture_update_area (MetaShapedTexture *stex,
939951 viewport = (graphene_rect_t ) {
940952 .origin .x = 0 ,
941953 .origin .y = 0 ,
942- .size .width = stex -> tex_width ,
943- .size .height = stex -> tex_height ,
954+ .size .width = scaled_and_transformed_width ,
955+ .size .height = scaled_and_transformed_height ,
944956 };
945957 }
946958
@@ -951,8 +963,8 @@ meta_shaped_texture_update_area (MetaShapedTexture *stex,
951963 }
952964 else
953965 {
954- dst_width = (float ) stex -> tex_width ;
955- dst_height = (float ) stex -> tex_height ;
966+ dst_width = (float ) viewport . size . width ;
967+ dst_height = (float ) viewport . size . height ;
956968 }
957969
958970 inverted_viewport = (graphene_rect_t ) {
@@ -1133,7 +1145,7 @@ meta_shaped_texture_is_opaque (MetaShapedTexture *stex)
11331145
11341146 cairo_region_get_extents (stex -> opaque_region , & opaque_rect );
11351147
1136- ensure_size_valid (stex );
1148+ meta_shaped_texture_ensure_size_valid (stex );
11371149
11381150 return meta_rectangle_equal (& opaque_rect ,
11391151 & (MetaRectangle ) {
@@ -1160,10 +1172,14 @@ meta_shaped_texture_set_viewport_src_rect (MetaShapedTexture *stex,
11601172 graphene_rect_t * src_rect )
11611173{
11621174 if (!stex -> has_viewport_src_rect ||
1163- stex -> viewport_src_rect .origin .x != src_rect -> origin .x ||
1164- stex -> viewport_src_rect .origin .y != src_rect -> origin .y ||
1165- stex -> viewport_src_rect .size .width != src_rect -> size .width ||
1166- stex -> viewport_src_rect .size .height != src_rect -> size .height )
1175+ !G_APPROX_VALUE (stex -> viewport_src_rect .origin .x ,
1176+ src_rect -> origin .x , FLT_EPSILON ) ||
1177+ !G_APPROX_VALUE (stex -> viewport_src_rect .origin .y ,
1178+ src_rect -> origin .y , FLT_EPSILON ) ||
1179+ !G_APPROX_VALUE (stex -> viewport_src_rect .size .width ,
1180+ src_rect -> size .width , FLT_EPSILON ) ||
1181+ !G_APPROX_VALUE (stex -> viewport_src_rect .size .height ,
1182+ src_rect -> size .height , FLT_EPSILON ))
11671183 {
11681184 stex -> has_viewport_src_rect = TRUE;
11691185 stex -> viewport_src_rect = * src_rect ;
@@ -1360,7 +1376,7 @@ meta_shaped_texture_get_image (MetaShapedTexture *stex,
13601376 if (texture == NULL )
13611377 return NULL ;
13621378
1363- ensure_size_valid (stex );
1379+ meta_shaped_texture_ensure_size_valid (stex );
13641380
13651381 if (stex -> dst_width == 0 || stex -> dst_height == 0 )
13661382 return NULL ;
@@ -1503,7 +1519,7 @@ meta_shaped_texture_get_width (MetaShapedTexture *stex)
15031519{
15041520 g_return_val_if_fail (META_IS_SHAPED_TEXTURE (stex ), 0 );
15051521
1506- ensure_size_valid (stex );
1522+ meta_shaped_texture_ensure_size_valid (stex );
15071523
15081524 return stex -> dst_width ;
15091525}
@@ -1513,7 +1529,7 @@ meta_shaped_texture_get_height (MetaShapedTexture *stex)
15131529{
15141530 g_return_val_if_fail (META_IS_SHAPED_TEXTURE (stex ), 0 );
15151531
1516- ensure_size_valid (stex );
1532+ meta_shaped_texture_ensure_size_valid (stex );
15171533
15181534 return stex -> dst_height ;
15191535}
0 commit comments