mirror of
https://github.com/RPCS3/rpcs3.git
synced 2026-03-17 18:55:19 +01:00
rsx/overlays: Implement checkbox and switch controls
This commit is contained in:
parent
5d28ff5df1
commit
cff9b5b65e
|
|
@ -502,6 +502,7 @@ target_sources(rpcs3_emu PRIVATE
|
|||
RSX/Overlays/overlay_animated_icon.cpp
|
||||
RSX/Overlays/overlay_animation.cpp
|
||||
RSX/Overlays/overlay_audio.cpp
|
||||
RSX/Overlays/overlay_checkbox.cpp
|
||||
RSX/Overlays/overlay_compile_notification.cpp
|
||||
RSX/Overlays/overlay_controls.cpp
|
||||
RSX/Overlays/overlay_cursor.cpp
|
||||
|
|
@ -518,6 +519,8 @@ target_sources(rpcs3_emu PRIVATE
|
|||
RSX/Overlays/overlay_perf_metrics.cpp
|
||||
RSX/Overlays/overlay_progress_bar.cpp
|
||||
RSX/Overlays/overlay_save_dialog.cpp
|
||||
RSX/Overlays/overlay_select.cpp
|
||||
RSX/Overlays/overlay_slider.cpp
|
||||
RSX/Overlays/overlay_tabs.cpp
|
||||
RSX/Overlays/overlay_trophy_notification.cpp
|
||||
RSX/Overlays/overlay_user_list_dialog.cpp
|
||||
|
|
|
|||
151
rpcs3/Emu/RSX/Overlays/overlay_checkbox.cpp
Normal file
151
rpcs3/Emu/RSX/Overlays/overlay_checkbox.cpp
Normal file
|
|
@ -0,0 +1,151 @@
|
|||
#include "stdafx.h"
|
||||
#include "overlay_checkbox.h"
|
||||
|
||||
namespace rsx::overlays
|
||||
{
|
||||
checkbox::checkbox()
|
||||
{
|
||||
fore_color = color4f(1.f);
|
||||
back_color = color4f(0.3f, 0.3f, 0.3f, 1.f);
|
||||
}
|
||||
|
||||
void checkbox::set_checked(bool checked)
|
||||
{
|
||||
if (m_is_checked == checked)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
m_is_checked = checked;
|
||||
refresh();
|
||||
}
|
||||
|
||||
void checkbox::set_size(u16 w, u16 h)
|
||||
{
|
||||
const u16 dim = std::min(w, h);
|
||||
box_layout::set_size(w, h);
|
||||
|
||||
clear_items();
|
||||
refresh();
|
||||
|
||||
m_border_box = nullptr;
|
||||
m_inner_box = nullptr;
|
||||
|
||||
if (dim < 3)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
auto border_widget = std::make_unique<overlay_element>();
|
||||
auto inner_widget = std::make_unique<overlay_element>();
|
||||
|
||||
border_widget->set_size(dim, dim);
|
||||
inner_widget->set_size(dim - 2, dim - 2);
|
||||
inner_widget->set_pos(1, 1);
|
||||
|
||||
m_border_box = add_element(border_widget);
|
||||
m_inner_box = add_element(inner_widget);
|
||||
}
|
||||
|
||||
compiled_resource& checkbox::get_compiled()
|
||||
{
|
||||
if (is_compiled())
|
||||
{
|
||||
return compiled_resources;
|
||||
}
|
||||
|
||||
compiled_resources.clear();
|
||||
|
||||
if (!m_border_box || !m_inner_box)
|
||||
{
|
||||
m_is_compiled = true;
|
||||
return compiled_resources;
|
||||
}
|
||||
|
||||
m_border_box->back_color = this->fore_color;
|
||||
m_inner_box->back_color = this->back_color;
|
||||
m_inner_box->set_visible(!m_is_checked);
|
||||
|
||||
m_border_box->refresh();
|
||||
m_inner_box->refresh();
|
||||
|
||||
compiled_resources.add(m_border_box->get_compiled());
|
||||
compiled_resources.add(m_inner_box->get_compiled());
|
||||
|
||||
m_is_compiled = true;
|
||||
return compiled_resources;
|
||||
}
|
||||
|
||||
switchbox::switchbox()
|
||||
{
|
||||
fore_color = color4f(0.5647f, 0.7922f, 0.9765f, 1.f);
|
||||
back_color = color4f(0.75f, 0.75f, 0.75f, 1.f);
|
||||
}
|
||||
|
||||
void switchbox::set_size(u16 w, u16 h)
|
||||
{
|
||||
const u16 dim = std::min(w, h);
|
||||
box_layout::set_size(w, h);
|
||||
|
||||
clear_items();
|
||||
refresh();
|
||||
|
||||
m_back_ellipse = nullptr;
|
||||
m_front_circle = nullptr;
|
||||
|
||||
if (dim < 4)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
auto ellipse_part = std::make_unique<rounded_rect>();
|
||||
auto circle_part = std::make_unique<rounded_rect>();
|
||||
|
||||
ellipse_part->set_size(dim * 2, dim / 2);
|
||||
ellipse_part->set_pos(0, dim / 4);
|
||||
ellipse_part->radius = dim / 4;
|
||||
|
||||
circle_part->set_size(dim, dim);
|
||||
circle_part->set_pos(0, 0);
|
||||
circle_part->radius = dim / 2;
|
||||
|
||||
m_back_ellipse = add_element(ellipse_part);
|
||||
m_front_circle = add_element(circle_part);
|
||||
}
|
||||
|
||||
compiled_resource& switchbox::get_compiled()
|
||||
{
|
||||
if (is_compiled())
|
||||
{
|
||||
return compiled_resources;
|
||||
}
|
||||
|
||||
compiled_resources.clear();
|
||||
|
||||
if (!m_back_ellipse || !m_front_circle)
|
||||
{
|
||||
m_is_compiled = true;
|
||||
return compiled_resources;
|
||||
}
|
||||
|
||||
if (m_is_checked)
|
||||
{
|
||||
m_back_ellipse->back_color = this->fore_color * 0.5f;
|
||||
m_front_circle->back_color = this->fore_color;
|
||||
m_front_circle->set_pos(this->x + m_front_circle->w, this->y);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_back_ellipse->back_color = this->back_color * 0.5f;
|
||||
m_front_circle->back_color = this->back_color;
|
||||
m_front_circle->set_pos(this->x, this->y);
|
||||
}
|
||||
|
||||
m_back_ellipse->refresh();
|
||||
m_front_circle->refresh();
|
||||
|
||||
compiled_resources.add(m_back_ellipse->get_compiled());
|
||||
compiled_resources.add(m_front_circle->get_compiled());
|
||||
return compiled_resources;
|
||||
}
|
||||
}
|
||||
36
rpcs3/Emu/RSX/Overlays/overlay_checkbox.h
Normal file
36
rpcs3/Emu/RSX/Overlays/overlay_checkbox.h
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
#pragma once
|
||||
|
||||
#include "overlay_controls.h"
|
||||
|
||||
namespace rsx::overlays
|
||||
{
|
||||
struct checkbox : public box_layout
|
||||
{
|
||||
checkbox();
|
||||
|
||||
void set_checked(bool checked);
|
||||
bool is_checked() const { return m_is_checked; }
|
||||
|
||||
void set_size(u16 w, u16 h) override;
|
||||
compiled_resource& get_compiled() override;
|
||||
|
||||
protected:
|
||||
bool m_is_checked = false;
|
||||
|
||||
private:
|
||||
overlay_element* m_border_box = nullptr;
|
||||
overlay_element* m_inner_box = nullptr;
|
||||
};
|
||||
|
||||
struct switchbox : public checkbox
|
||||
{
|
||||
switchbox();
|
||||
|
||||
void set_size(u16 w, u16 h) override;
|
||||
compiled_resource& get_compiled() override;
|
||||
|
||||
private:
|
||||
overlay_element* m_back_ellipse = nullptr;
|
||||
overlay_element* m_front_circle = nullptr;
|
||||
};
|
||||
}
|
||||
1
rpcs3/Emu/RSX/Overlays/overlay_select.cpp
Normal file
1
rpcs3/Emu/RSX/Overlays/overlay_select.cpp
Normal file
|
|
@ -0,0 +1 @@
|
|||
#include "stdafx.h"
|
||||
10
rpcs3/Emu/RSX/Overlays/overlay_select.h
Normal file
10
rpcs3/Emu/RSX/Overlays/overlay_select.h
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
#pragma once
|
||||
|
||||
#include "overlay_controls.h"
|
||||
|
||||
namespace rsx::overlays
|
||||
{
|
||||
struct select : public overlay_element
|
||||
{
|
||||
};
|
||||
}
|
||||
1
rpcs3/Emu/RSX/Overlays/overlay_slider.cpp
Normal file
1
rpcs3/Emu/RSX/Overlays/overlay_slider.cpp
Normal file
|
|
@ -0,0 +1 @@
|
|||
#include "stdafx.h"
|
||||
10
rpcs3/Emu/RSX/Overlays/overlay_slider.h
Normal file
10
rpcs3/Emu/RSX/Overlays/overlay_slider.h
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
#pragma once
|
||||
|
||||
#include "overlay_controls.h"
|
||||
|
||||
namespace rsx::overlays
|
||||
{
|
||||
struct slider : public overlay_element
|
||||
{
|
||||
};
|
||||
}
|
||||
|
|
@ -147,6 +147,7 @@
|
|||
<ClCompile Include="Emu\RSX\Overlays\Network\overlay_sendmessage_dialog.cpp" />
|
||||
<ClCompile Include="Emu\RSX\Overlays\overlay_animated_icon.cpp" />
|
||||
<ClCompile Include="Emu\RSX\Overlays\overlay_audio.cpp" />
|
||||
<ClCompile Include="Emu\RSX\Overlays\overlay_checkbox.cpp" />
|
||||
<ClCompile Include="Emu\RSX\Overlays\overlay_controls.cpp" />
|
||||
<ClCompile Include="Emu\RSX\Overlays\overlay_cursor.cpp" />
|
||||
<ClCompile Include="Emu\RSX\Overlays\overlay_debug_overlay.cpp" />
|
||||
|
|
@ -154,6 +155,8 @@
|
|||
<ClCompile Include="Emu\RSX\Overlays\overlay_media_list_dialog.cpp" />
|
||||
<ClCompile Include="Emu\RSX\Overlays\overlay_osk_panel.cpp" />
|
||||
<ClCompile Include="Emu\RSX\Overlays\overlay_compile_notification.cpp" />
|
||||
<ClCompile Include="Emu\RSX\Overlays\overlay_select.cpp" />
|
||||
<ClCompile Include="Emu\RSX\Overlays\overlay_slider.cpp" />
|
||||
<ClCompile Include="Emu\RSX\Overlays\overlay_tabs.cpp" />
|
||||
<ClCompile Include="Emu\RSX\Overlays\overlay_user_list_dialog.cpp" />
|
||||
<ClCompile Include="Emu\RSX\Overlays\overlay_utils.cpp" />
|
||||
|
|
@ -709,6 +712,7 @@
|
|||
<ClInclude Include="Emu\RSX\Overlays\Network\overlay_sendmessage_dialog.h" />
|
||||
<ClInclude Include="Emu\RSX\Overlays\overlay_animated_icon.h" />
|
||||
<ClInclude Include="Emu\RSX\Overlays\overlay_audio.h" />
|
||||
<ClInclude Include="Emu\RSX\Overlays\overlay_checkbox.h" />
|
||||
<ClInclude Include="Emu\RSX\Overlays\overlay_cursor.h" />
|
||||
<ClInclude Include="Emu\RSX\Overlays\overlay_debug_overlay.h" />
|
||||
<ClInclude Include="Emu\RSX\Overlays\overlay_edit_text.hpp" />
|
||||
|
|
@ -717,6 +721,8 @@
|
|||
<ClInclude Include="Emu\RSX\Overlays\overlay_manager.h" />
|
||||
<ClInclude Include="Emu\RSX\Overlays\overlay_media_list_dialog.h" />
|
||||
<ClInclude Include="Emu\RSX\Overlays\overlay_progress_bar.hpp" />
|
||||
<ClInclude Include="Emu\RSX\Overlays\overlay_select.h" />
|
||||
<ClInclude Include="Emu\RSX\Overlays\overlay_slider.h" />
|
||||
<ClInclude Include="Emu\RSX\Overlays\overlay_tabs.h" />
|
||||
<ClInclude Include="Emu\RSX\Overlays\overlay_video.h" />
|
||||
<ClInclude Include="Emu\RSX\Overlays\Trophies\overlay_trophy_list_dialog.h" />
|
||||
|
|
|
|||
|
|
@ -1420,6 +1420,15 @@
|
|||
<ClCompile Include="Emu\RSX\Overlays\HomeMenu\overlay_home_icons.cpp">
|
||||
<Filter>Emu\GPU\RSX\Overlays\HomeMenu</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Emu\RSX\Overlays\overlay_checkbox.cpp">
|
||||
<Filter>Emu\GPU\RSX\Overlays</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Emu\RSX\Overlays\overlay_slider.cpp">
|
||||
<Filter>Emu\GPU\RSX\Overlays</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Emu\RSX\Overlays\overlay_select.cpp">
|
||||
<Filter>Emu\GPU\RSX\Overlays</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="Crypto\aes.h">
|
||||
|
|
@ -2851,6 +2860,15 @@
|
|||
<ClInclude Include="Emu\RSX\Overlays\HomeMenu\overlay_home_icons.h">
|
||||
<Filter>Emu\GPU\RSX\Overlays\HomeMenu</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Emu\RSX\Overlays\overlay_checkbox.h">
|
||||
<Filter>Emu\GPU\RSX\Overlays</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Emu\RSX\Overlays\overlay_slider.h">
|
||||
<Filter>Emu\GPU\RSX\Overlays</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Emu\RSX\Overlays\overlay_select.h">
|
||||
<Filter>Emu\GPU\RSX\Overlays</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="Emu\RSX\Program\GLSLSnippets\GPUDeswizzle.glsl">
|
||||
|
|
|
|||
Loading…
Reference in a new issue