@@ -1041,6 +1041,59 @@ namespace rsx
10411041 return result;
10421042 }
10431043
1044+ void image_view::adjust_padding ()
1045+ {
1046+ overlay_element::set_padding (m_original_padding_left, m_original_padding_right, m_original_padding_top, m_original_padding_bottom);
1047+
1048+ if (!m_keep_aspect_ratio || !external_ref || external_ref->w <= 0 || external_ref->h <= 0 )
1049+ {
1050+ return ;
1051+ }
1052+
1053+ // Adjust padding so that the image keeps its aspect ratio
1054+
1055+ const u16 p_left = m_original_padding_left;
1056+ const u16 p_right = m_original_padding_right;
1057+ const u16 p_top = m_original_padding_top;
1058+ const u16 p_bottom = m_original_padding_bottom;
1059+
1060+ const u16 target_width = w - (p_left + p_right);
1061+ const u16 target_height = h - (p_top + p_bottom);
1062+ const f32 target_ratio = target_width / static_cast <f32 >(target_height);
1063+ const f32 image_ratio = external_ref->w / static_cast <f32 >(external_ref->h );
1064+
1065+ if (image_ratio > target_ratio)
1066+ {
1067+ const u16 new_padding = static_cast <u16 >(target_height - target_width / image_ratio) / 2 ;
1068+ overlay_element::set_padding (p_left, p_right, p_top + new_padding, p_bottom + new_padding);
1069+ }
1070+ else if (image_ratio < target_ratio)
1071+ {
1072+ const u16 new_padding = static_cast <u16 >(target_width - target_height * image_ratio) / 2 ;
1073+ overlay_element::set_padding (p_left + new_padding, p_right + new_padding, p_top, p_bottom);
1074+ }
1075+ }
1076+
1077+ void image_view::set_padding (u16 left, u16 right, u16 top, u16 bottom)
1078+ {
1079+ m_original_padding_left = left;
1080+ m_original_padding_right = right;
1081+ m_original_padding_top = top;
1082+ m_original_padding_bottom = bottom;
1083+
1084+ adjust_padding ();
1085+ }
1086+
1087+ void image_view::set_padding (u16 padding)
1088+ {
1089+ m_original_padding_left = padding;
1090+ m_original_padding_right = padding;
1091+ m_original_padding_top = padding;
1092+ m_original_padding_bottom = padding;
1093+
1094+ adjust_padding ();
1095+ }
1096+
10441097 compiled_resource& image_view::get_compiled ()
10451098 {
10461099 if (is_compiled ())
@@ -1086,6 +1139,8 @@ namespace rsx
10861139 {
10871140 image_resource_ref = image_resource_id::raw_image;
10881141 external_ref = raw_image;
1142+
1143+ adjust_padding ();
10891144 }
10901145
10911146 void image_view::clear_image ()
@@ -1099,6 +1154,15 @@ namespace rsx
10991154 blur_strength = strength;
11001155 }
11011156
1157+ void image_view::set_keep_aspect_ratio (bool enabled)
1158+ {
1159+ if (m_keep_aspect_ratio != enabled)
1160+ {
1161+ m_keep_aspect_ratio = enabled;
1162+ adjust_padding ();
1163+ }
1164+ }
1165+
11021166 image_button::image_button ()
11031167 {
11041168 // Do not clip text to region extents
0 commit comments