diff --git a/rpcs3/Emu/RSX/Overlays/overlay_checkbox.cpp b/rpcs3/Emu/RSX/Overlays/overlay_checkbox.cpp index e3cc2689ed..0c5c087ce0 100644 --- a/rpcs3/Emu/RSX/Overlays/overlay_checkbox.cpp +++ b/rpcs3/Emu/RSX/Overlays/overlay_checkbox.cpp @@ -84,7 +84,7 @@ namespace rsx::overlays void switchbox::set_size(u16 w, u16 h) { - const u16 dim = std::max(std::min(w, h), 14) & ~1u; + const u16 dim = std::max(std::min(w, h), 14); box_layout::set_size(w, h); clear_items(); @@ -99,7 +99,7 @@ namespace rsx::overlays ellipse_part->set_size(dim * 2, dim); ellipse_part->set_padding(1); ellipse_part->set_pos(0, 0); - ellipse_part->radius = (dim - 2) / 2; + ellipse_part->border_radius = (dim - 2) / 2; circle_part->set_size(dim, dim); circle_part->set_padding(4); diff --git a/rpcs3/Emu/RSX/Overlays/overlay_controls.cpp b/rpcs3/Emu/RSX/Overlays/overlay_controls.cpp index e6643915cd..93148d655c 100644 --- a/rpcs3/Emu/RSX/Overlays/overlay_controls.cpp +++ b/rpcs3/Emu/RSX/Overlays/overlay_controls.cpp @@ -68,7 +68,10 @@ namespace rsx br *= scale_av; bw *= scale_av; - // Account for flipped viewport + // Border radius clamp + br = std::min({ br, hx, hy }); + + // Compute the function's origin. Account for flipped viewports as well. if (target_viewport.x2 < target_viewport.x1) { cx = target_viewport.width() - (cx * scale_x) + target_viewport.x2; @@ -1171,7 +1174,7 @@ namespace rsx overlay_element::get_compiled(); auto& config = compiled_resources.draw_commands.front().config; configure_sdf(config, sdf_function::rounded_box); - config.sdf_config.br = radius; + config.sdf_config.br = std::min({ static_cast(border_radius), config.sdf_config.hx, config.sdf_config.hy }); m_is_compiled = true; return compiled_resources; diff --git a/rpcs3/Emu/RSX/Overlays/overlay_controls.h b/rpcs3/Emu/RSX/Overlays/overlay_controls.h index 7b88af2e12..04b6820287 100644 --- a/rpcs3/Emu/RSX/Overlays/overlay_controls.h +++ b/rpcs3/Emu/RSX/Overlays/overlay_controls.h @@ -350,7 +350,7 @@ namespace rsx struct rounded_rect : public overlay_element { - u8 radius = 5; + u16 border_radius = 5; using overlay_element::overlay_element; compiled_resource& get_compiled() override; diff --git a/rpcs3/Emu/RSX/Overlays/overlay_list_view.cpp b/rpcs3/Emu/RSX/Overlays/overlay_list_view.cpp index 23c45d29bb..943da6271b 100644 --- a/rpcs3/Emu/RSX/Overlays/overlay_list_view.cpp +++ b/rpcs3/Emu/RSX/Overlays/overlay_list_view.cpp @@ -17,7 +17,7 @@ namespace rsx scroll_indicator_grip->set_pos(1, 0); scroll_indicator_grip->set_size(5, 5); - scroll_indicator_grip->radius = 2; + scroll_indicator_grip->border_radius = 2; scroll_indicator_track->set_size(7, height); m_scroll_indicator = std::make_unique(); diff --git a/rpcs3/Emu/RSX/Overlays/overlay_select.cpp b/rpcs3/Emu/RSX/Overlays/overlay_select.cpp index 5ef6eb254c..6e0d4a4c6c 100644 --- a/rpcs3/Emu/RSX/Overlays/overlay_select.cpp +++ b/rpcs3/Emu/RSX/Overlays/overlay_select.cpp @@ -144,7 +144,7 @@ namespace rsx::overlays auto background = std::make_unique(); background->set_size(w, h); - background->radius = std::min(h / 4, 5); + background->border_radius = std::min(h / 4, 5); background->back_color = color4f(0.3f, 0.3f, 0.3f, 1.0f); const u16 arrow_size = std::min(h / 2, max_dropdown_arrow_dimension); diff --git a/rpcs3/Emu/RSX/Overlays/overlay_slider.cpp b/rpcs3/Emu/RSX/Overlays/overlay_slider.cpp index ff09af7994..3a3b2698be 100644 --- a/rpcs3/Emu/RSX/Overlays/overlay_slider.cpp +++ b/rpcs3/Emu/RSX/Overlays/overlay_slider.cpp @@ -34,22 +34,22 @@ namespace rsx::overlays auto min_label = std::make_unique