summaryrefslogtreecommitdiff
path: root/src/input_common
diff options
context:
space:
mode:
authorGravatar Narr the Reg2021-12-14 19:10:39 -0600
committerGravatar GitHub2021-12-14 19:10:39 -0600
commit5e732e7aecc38e863674120ee28842a719f35896 (patch)
tree917f7c75447bc11f36778d1af4fced7e8fcef80c /src/input_common
parentMerge pull request #7577 from v1993/patch-2 (diff)
parentcommon/input: Avoid numerous large copies of CallbackStatus (diff)
downloadyuzu-5e732e7aecc38e863674120ee28842a719f35896.tar.gz
yuzu-5e732e7aecc38e863674120ee28842a719f35896.tar.xz
yuzu-5e732e7aecc38e863674120ee28842a719f35896.zip
Merge pull request #7581 from lioncash/input-iface
common/input: Avoid numerous large copies of CallbackStatus
Diffstat (limited to 'src/input_common')
-rw-r--r--src/input_common/helpers/stick_from_buttons.cpp75
-rw-r--r--src/input_common/helpers/touch_from_buttons.cpp11
-rw-r--r--src/input_common/input_poller.cpp39
3 files changed, 70 insertions, 55 deletions
diff --git a/src/input_common/helpers/stick_from_buttons.cpp b/src/input_common/helpers/stick_from_buttons.cpp
index 77fcd655e..e23394f5f 100644
--- a/src/input_common/helpers/stick_from_buttons.cpp
+++ b/src/input_common/helpers/stick_from_buttons.cpp
@@ -19,23 +19,36 @@ public:
19 : up(std::move(up_)), down(std::move(down_)), left(std::move(left_)), 19 : up(std::move(up_)), down(std::move(down_)), left(std::move(left_)),
20 right(std::move(right_)), modifier(std::move(modifier_)), modifier_scale(modifier_scale_), 20 right(std::move(right_)), modifier(std::move(modifier_)), modifier_scale(modifier_scale_),
21 modifier_angle(modifier_angle_) { 21 modifier_angle(modifier_angle_) {
22 Common::Input::InputCallback button_up_callback{ 22 up->SetCallback({
23 [this](Common::Input::CallbackStatus callback_) { UpdateUpButtonStatus(callback_); }}; 23 .on_change =
24 Common::Input::InputCallback button_down_callback{ 24 [this](const Common::Input::CallbackStatus& callback_) {
25 [this](Common::Input::CallbackStatus callback_) { UpdateDownButtonStatus(callback_); }}; 25 UpdateUpButtonStatus(callback_);
26 Common::Input::InputCallback button_left_callback{ 26 },
27 [this](Common::Input::CallbackStatus callback_) { UpdateLeftButtonStatus(callback_); }}; 27 });
28 Common::Input::InputCallback button_right_callback{ 28 down->SetCallback({
29 [this](Common::Input::CallbackStatus callback_) { 29 .on_change =
30 UpdateRightButtonStatus(callback_); 30 [this](const Common::Input::CallbackStatus& callback_) {
31 }}; 31 UpdateDownButtonStatus(callback_);
32 Common::Input::InputCallback button_modifier_callback{ 32 },
33 [this](Common::Input::CallbackStatus callback_) { UpdateModButtonStatus(callback_); }}; 33 });
34 up->SetCallback(button_up_callback); 34 left->SetCallback({
35 down->SetCallback(button_down_callback); 35 .on_change =
36 left->SetCallback(button_left_callback); 36 [this](const Common::Input::CallbackStatus& callback_) {
37 right->SetCallback(button_right_callback); 37 UpdateLeftButtonStatus(callback_);
38 modifier->SetCallback(button_modifier_callback); 38 },
39 });
40 right->SetCallback({
41 .on_change =
42 [this](const Common::Input::CallbackStatus& callback_) {
43 UpdateRightButtonStatus(callback_);
44 },
45 });
46 modifier->SetCallback({
47 .on_change =
48 [this](const Common::Input::CallbackStatus& callback_) {
49 UpdateModButtonStatus(callback_);
50 },
51 });
39 last_x_axis_value = 0.0f; 52 last_x_axis_value = 0.0f;
40 last_y_axis_value = 0.0f; 53 last_y_axis_value = 0.0f;
41 } 54 }
@@ -133,27 +146,27 @@ public:
133 } 146 }
134 } 147 }
135 148
136 void UpdateUpButtonStatus(Common::Input::CallbackStatus button_callback) { 149 void UpdateUpButtonStatus(const Common::Input::CallbackStatus& button_callback) {
137 up_status = button_callback.button_status.value; 150 up_status = button_callback.button_status.value;
138 UpdateStatus(); 151 UpdateStatus();
139 } 152 }
140 153
141 void UpdateDownButtonStatus(Common::Input::CallbackStatus button_callback) { 154 void UpdateDownButtonStatus(const Common::Input::CallbackStatus& button_callback) {
142 down_status = button_callback.button_status.value; 155 down_status = button_callback.button_status.value;
143 UpdateStatus(); 156 UpdateStatus();
144 } 157 }
145 158
146 void UpdateLeftButtonStatus(Common::Input::CallbackStatus button_callback) { 159 void UpdateLeftButtonStatus(const Common::Input::CallbackStatus& button_callback) {
147 left_status = button_callback.button_status.value; 160 left_status = button_callback.button_status.value;
148 UpdateStatus(); 161 UpdateStatus();
149 } 162 }
150 163
151 void UpdateRightButtonStatus(Common::Input::CallbackStatus button_callback) { 164 void UpdateRightButtonStatus(const Common::Input::CallbackStatus& button_callback) {
152 right_status = button_callback.button_status.value; 165 right_status = button_callback.button_status.value;
153 UpdateStatus(); 166 UpdateStatus();
154 } 167 }
155 168
156 void UpdateModButtonStatus(Common::Input::CallbackStatus button_callback) { 169 void UpdateModButtonStatus(const Common::Input::CallbackStatus& button_callback) {
157 modifier_status = button_callback.button_status.value; 170 modifier_status = button_callback.button_status.value;
158 UpdateStatus(); 171 UpdateStatus();
159 } 172 }
@@ -265,18 +278,18 @@ private:
265 Button left; 278 Button left;
266 Button right; 279 Button right;
267 Button modifier; 280 Button modifier;
268 float modifier_scale; 281 float modifier_scale{};
269 float modifier_angle; 282 float modifier_angle{};
270 float angle{}; 283 float angle{};
271 float goal_angle{}; 284 float goal_angle{};
272 float amplitude{}; 285 float amplitude{};
273 bool up_status; 286 bool up_status{};
274 bool down_status; 287 bool down_status{};
275 bool left_status; 288 bool left_status{};
276 bool right_status; 289 bool right_status{};
277 bool modifier_status; 290 bool modifier_status{};
278 float last_x_axis_value; 291 float last_x_axis_value{};
279 float last_y_axis_value; 292 float last_y_axis_value{};
280 const Common::Input::AnalogProperties properties{0.0f, 1.0f, 0.5f, 0.0f, false}; 293 const Common::Input::AnalogProperties properties{0.0f, 1.0f, 0.5f, 0.0f, false};
281 std::chrono::time_point<std::chrono::steady_clock> last_update; 294 std::chrono::time_point<std::chrono::steady_clock> last_update;
282}; 295};
diff --git a/src/input_common/helpers/touch_from_buttons.cpp b/src/input_common/helpers/touch_from_buttons.cpp
index 35d60bc90..ece1e3b32 100644
--- a/src/input_common/helpers/touch_from_buttons.cpp
+++ b/src/input_common/helpers/touch_from_buttons.cpp
@@ -14,10 +14,13 @@ public:
14 using Button = std::unique_ptr<Common::Input::InputDevice>; 14 using Button = std::unique_ptr<Common::Input::InputDevice>;
15 TouchFromButtonDevice(Button button_, int touch_id_, float x_, float y_) 15 TouchFromButtonDevice(Button button_, int touch_id_, float x_, float y_)
16 : button(std::move(button_)), touch_id(touch_id_), x(x_), y(y_) { 16 : button(std::move(button_)), touch_id(touch_id_), x(x_), y(y_) {
17 Common::Input::InputCallback button_up_callback{
18 [this](Common::Input::CallbackStatus callback_) { UpdateButtonStatus(callback_); }};
19 last_button_value = false; 17 last_button_value = false;
20 button->SetCallback(button_up_callback); 18 button->SetCallback({
19 .on_change =
20 [this](const Common::Input::CallbackStatus& callback_) {
21 UpdateButtonStatus(callback_);
22 },
23 });
21 button->ForceUpdate(); 24 button->ForceUpdate();
22 } 25 }
23 26
@@ -47,7 +50,7 @@ public:
47 return status; 50 return status;
48 } 51 }
49 52
50 void UpdateButtonStatus(Common::Input::CallbackStatus button_callback) { 53 void UpdateButtonStatus(const Common::Input::CallbackStatus& button_callback) {
51 const Common::Input::CallbackStatus status{ 54 const Common::Input::CallbackStatus status{
52 .type = Common::Input::InputType::Touch, 55 .type = Common::Input::InputType::Touch,
53 .touch_status = GetStatus(button_callback.button_status.value), 56 .touch_status = GetStatus(button_callback.button_status.value),
diff --git a/src/input_common/input_poller.cpp b/src/input_common/input_poller.cpp
index c56d5e0c2..7b370335f 100644
--- a/src/input_common/input_poller.cpp
+++ b/src/input_common/input_poller.cpp
@@ -12,8 +12,7 @@ namespace InputCommon {
12 12
13class DummyInput final : public Common::Input::InputDevice { 13class DummyInput final : public Common::Input::InputDevice {
14public: 14public:
15 explicit DummyInput() {} 15 explicit DummyInput() = default;
16 ~DummyInput() {}
17}; 16};
18 17
19class InputFromButton final : public Common::Input::InputDevice { 18class InputFromButton final : public Common::Input::InputDevice {
@@ -33,7 +32,7 @@ public:
33 callback_key = input_engine->SetCallback(input_identifier); 32 callback_key = input_engine->SetCallback(input_identifier);
34 } 33 }
35 34
36 ~InputFromButton() { 35 ~InputFromButton() override {
37 input_engine->DeleteCallback(callback_key); 36 input_engine->DeleteCallback(callback_key);
38 } 37 }
39 38
@@ -45,7 +44,7 @@ public:
45 }; 44 };
46 } 45 }
47 46
48 void ForceUpdate() { 47 void ForceUpdate() override {
49 const Common::Input::CallbackStatus status{ 48 const Common::Input::CallbackStatus status{
50 .type = Common::Input::InputType::Button, 49 .type = Common::Input::InputType::Button,
51 .button_status = GetStatus(), 50 .button_status = GetStatus(),
@@ -94,7 +93,7 @@ public:
94 callback_key = input_engine->SetCallback(input_identifier); 93 callback_key = input_engine->SetCallback(input_identifier);
95 } 94 }
96 95
97 ~InputFromHatButton() { 96 ~InputFromHatButton() override {
98 input_engine->DeleteCallback(callback_key); 97 input_engine->DeleteCallback(callback_key);
99 } 98 }
100 99
@@ -106,7 +105,7 @@ public:
106 }; 105 };
107 } 106 }
108 107
109 void ForceUpdate() { 108 void ForceUpdate() override {
110 const Common::Input::CallbackStatus status{ 109 const Common::Input::CallbackStatus status{
111 .type = Common::Input::InputType::Button, 110 .type = Common::Input::InputType::Button,
112 .button_status = GetStatus(), 111 .button_status = GetStatus(),
@@ -167,7 +166,7 @@ public:
167 callback_key_y = input_engine->SetCallback(y_input_identifier); 166 callback_key_y = input_engine->SetCallback(y_input_identifier);
168 } 167 }
169 168
170 ~InputFromStick() { 169 ~InputFromStick() override {
171 input_engine->DeleteCallback(callback_key_x); 170 input_engine->DeleteCallback(callback_key_x);
172 input_engine->DeleteCallback(callback_key_y); 171 input_engine->DeleteCallback(callback_key_y);
173 } 172 }
@@ -190,7 +189,7 @@ public:
190 return status; 189 return status;
191 } 190 }
192 191
193 void ForceUpdate() { 192 void ForceUpdate() override {
194 const Common::Input::CallbackStatus status{ 193 const Common::Input::CallbackStatus status{
195 .type = Common::Input::InputType::Stick, 194 .type = Common::Input::InputType::Stick,
196 .stick_status = GetStatus(), 195 .stick_status = GetStatus(),
@@ -266,7 +265,7 @@ public:
266 callback_key_y = input_engine->SetCallback(y_input_identifier); 265 callback_key_y = input_engine->SetCallback(y_input_identifier);
267 } 266 }
268 267
269 ~InputFromTouch() { 268 ~InputFromTouch() override {
270 input_engine->DeleteCallback(callback_key_button); 269 input_engine->DeleteCallback(callback_key_button);
271 input_engine->DeleteCallback(callback_key_x); 270 input_engine->DeleteCallback(callback_key_x);
272 input_engine->DeleteCallback(callback_key_y); 271 input_engine->DeleteCallback(callback_key_y);
@@ -352,7 +351,7 @@ public:
352 axis_callback_key = input_engine->SetCallback(axis_input_identifier); 351 axis_callback_key = input_engine->SetCallback(axis_input_identifier);
353 } 352 }
354 353
355 ~InputFromTrigger() { 354 ~InputFromTrigger() override {
356 input_engine->DeleteCallback(callback_key_button); 355 input_engine->DeleteCallback(callback_key_button);
357 input_engine->DeleteCallback(axis_callback_key); 356 input_engine->DeleteCallback(axis_callback_key);
358 } 357 }
@@ -419,7 +418,7 @@ public:
419 callback_key = input_engine->SetCallback(input_identifier); 418 callback_key = input_engine->SetCallback(input_identifier);
420 } 419 }
421 420
422 ~InputFromAnalog() { 421 ~InputFromAnalog() override {
423 input_engine->DeleteCallback(callback_key); 422 input_engine->DeleteCallback(callback_key);
424 } 423 }
425 424
@@ -466,7 +465,7 @@ public:
466 callback_key = input_engine->SetCallback(input_identifier); 465 callback_key = input_engine->SetCallback(input_identifier);
467 } 466 }
468 467
469 ~InputFromBattery() { 468 ~InputFromBattery() override {
470 input_engine->DeleteCallback(callback_key); 469 input_engine->DeleteCallback(callback_key);
471 } 470 }
472 471
@@ -474,7 +473,7 @@ public:
474 return static_cast<Common::Input::BatteryLevel>(input_engine->GetBattery(identifier)); 473 return static_cast<Common::Input::BatteryLevel>(input_engine->GetBattery(identifier));
475 } 474 }
476 475
477 void ForceUpdate() { 476 void ForceUpdate() override {
478 const Common::Input::CallbackStatus status{ 477 const Common::Input::CallbackStatus status{
479 .type = Common::Input::InputType::Battery, 478 .type = Common::Input::InputType::Battery,
480 .battery_status = GetStatus(), 479 .battery_status = GetStatus(),
@@ -518,7 +517,7 @@ public:
518 callback_key = input_engine->SetCallback(input_identifier); 517 callback_key = input_engine->SetCallback(input_identifier);
519 } 518 }
520 519
521 ~InputFromMotion() { 520 ~InputFromMotion() override {
522 input_engine->DeleteCallback(callback_key); 521 input_engine->DeleteCallback(callback_key);
523 } 522 }
524 523
@@ -593,7 +592,7 @@ public:
593 callback_key_z = input_engine->SetCallback(z_input_identifier); 592 callback_key_z = input_engine->SetCallback(z_input_identifier);
594 } 593 }
595 594
596 ~InputFromAxisMotion() { 595 ~InputFromAxisMotion() override {
597 input_engine->DeleteCallback(callback_key_x); 596 input_engine->DeleteCallback(callback_key_x);
598 input_engine->DeleteCallback(callback_key_y); 597 input_engine->DeleteCallback(callback_key_y);
599 input_engine->DeleteCallback(callback_key_z); 598 input_engine->DeleteCallback(callback_key_z);
@@ -618,7 +617,7 @@ public:
618 return status; 617 return status;
619 } 618 }
620 619
621 void ForceUpdate() { 620 void ForceUpdate() override {
622 const Common::Input::CallbackStatus status{ 621 const Common::Input::CallbackStatus status{
623 .type = Common::Input::InputType::Motion, 622 .type = Common::Input::InputType::Motion,
624 .motion_status = GetStatus(), 623 .motion_status = GetStatus(),
@@ -668,16 +667,16 @@ public:
668 explicit OutputFromIdentifier(PadIdentifier identifier_, InputEngine* input_engine_) 667 explicit OutputFromIdentifier(PadIdentifier identifier_, InputEngine* input_engine_)
669 : identifier(identifier_), input_engine(input_engine_) {} 668 : identifier(identifier_), input_engine(input_engine_) {}
670 669
671 virtual void SetLED(const Common::Input::LedStatus& led_status) { 670 void SetLED(const Common::Input::LedStatus& led_status) override {
672 input_engine->SetLeds(identifier, led_status); 671 input_engine->SetLeds(identifier, led_status);
673 } 672 }
674 673
675 virtual Common::Input::VibrationError SetVibration( 674 Common::Input::VibrationError SetVibration(
676 const Common::Input::VibrationStatus& vibration_status) { 675 const Common::Input::VibrationStatus& vibration_status) override {
677 return input_engine->SetRumble(identifier, vibration_status); 676 return input_engine->SetRumble(identifier, vibration_status);
678 } 677 }
679 678
680 virtual Common::Input::PollingError SetPollingMode(Common::Input::PollingMode polling_mode) { 679 Common::Input::PollingError SetPollingMode(Common::Input::PollingMode polling_mode) override {
681 return input_engine->SetPollingMode(identifier, polling_mode); 680 return input_engine->SetPollingMode(identifier, polling_mode);
682 } 681 }
683 682