mirror of
https://github.com/hrydgard/ppsspp.git
synced 2026-07-11 01:25:07 +02:00
Doesn't yet work
This commit is contained in:
@@ -51,11 +51,11 @@ PopupScreen::PopupScreen(std::string_view title, std::string_view button1, std::
|
|||||||
alpha_ = 0.0f; // inherited
|
alpha_ = 0.0f; // inherited
|
||||||
}
|
}
|
||||||
|
|
||||||
void PopupScreen::touch(const TouchInput &touch) {
|
bool PopupScreen::touch(const TouchInput &touch) {
|
||||||
if (!box_ || (touch.flags & TouchInputFlags::DOWN) == 0) {
|
if (!box_ || (touch.flags & TouchInputFlags::DOWN) == 0) {
|
||||||
// Handle down-presses here.
|
// Handle down-presses here.
|
||||||
UIDialogScreen::touch(touch);
|
UIDialogScreen::touch(touch);
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Extra bounds to avoid closing the dialog while trying to aim for something
|
// Extra bounds to avoid closing the dialog while trying to aim for something
|
||||||
@@ -65,7 +65,7 @@ void PopupScreen::touch(const TouchInput &touch) {
|
|||||||
TriggerFinish(DR_CANCEL);
|
TriggerFinish(DR_CANCEL);
|
||||||
}
|
}
|
||||||
|
|
||||||
UIDialogScreen::touch(touch);
|
return UIDialogScreen::touch(touch);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool PopupScreen::key(const KeyInput &key) {
|
bool PopupScreen::key(const KeyInput &key) {
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ public:
|
|||||||
virtual void CreatePopupContents(UI::ViewGroup *parent) = 0;
|
virtual void CreatePopupContents(UI::ViewGroup *parent) = 0;
|
||||||
void CreateViews() override;
|
void CreateViews() override;
|
||||||
bool isTransparent() const override { return true; }
|
bool isTransparent() const override { return true; }
|
||||||
void touch(const TouchInput &touch) override;
|
bool touch(const TouchInput &touch) override;
|
||||||
bool key(const KeyInput &key) override;
|
bool key(const KeyInput &key) override;
|
||||||
|
|
||||||
void TriggerFinish(DialogResult result) override;
|
void TriggerFinish(DialogResult result) override;
|
||||||
|
|||||||
+77
-31
@@ -108,7 +108,6 @@ void ScreenManager::cancelScreensAbove(Screen *screen) {
|
|||||||
void ScreenManager::update() {
|
void ScreenManager::update() {
|
||||||
std::lock_guard<std::recursive_mutex> guard(inputLock_);
|
std::lock_guard<std::recursive_mutex> guard(inputLock_);
|
||||||
|
|
||||||
|
|
||||||
if (cancelScreensAbove_) {
|
if (cancelScreensAbove_) {
|
||||||
bool found = false;
|
bool found = false;
|
||||||
for (int i = (int)stack_.size() - 1; i >= 0; i--) {
|
for (int i = (int)stack_.size() - 1; i >= 0; i--) {
|
||||||
@@ -136,6 +135,67 @@ void ScreenManager::update() {
|
|||||||
stack_.back().screen->update();
|
stack_.back().screen->update();
|
||||||
passInputToMapper_ = stack_.back().screen->PassInputToMapper();
|
passInputToMapper_ = stack_.back().screen->PassInputToMapper();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Process queued events.
|
||||||
|
|
||||||
|
std::lock_guard<std::mutex> eventGuard(eventQueueLock_);
|
||||||
|
|
||||||
|
for (const QueuedEvent &ev : eventQueue_) {
|
||||||
|
switch (ev.type) {
|
||||||
|
case QueuedEventType::TOUCH:
|
||||||
|
{
|
||||||
|
const TouchInput &touch = ev.touch;
|
||||||
|
|
||||||
|
// Send release all events to every screen layer.
|
||||||
|
if (touch.flags & TouchInputFlags::RELEASE_ALL) {
|
||||||
|
for (auto &layer : stack_) {
|
||||||
|
Screen *screen = layer.screen;
|
||||||
|
layer.screen->touch(screen->transformTouch(touch));
|
||||||
|
}
|
||||||
|
} else if (!stack_.empty()) {
|
||||||
|
// Let the overlay know about touch-downs, to be able to dismiss popups.
|
||||||
|
bool skip = false;
|
||||||
|
if (overlayScreen_ && (touch.flags & TouchInputFlags::DOWN)) {
|
||||||
|
skip = overlayScreen_->touch(overlayScreen_->transformTouch(touch));
|
||||||
|
}
|
||||||
|
if (!skip) {
|
||||||
|
Screen *screen = stack_.back().screen;
|
||||||
|
stack_.back().screen->touch(screen->transformTouch(touch));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case QueuedEventType::KEY:
|
||||||
|
{
|
||||||
|
const KeyInput &key = ev.key;
|
||||||
|
|
||||||
|
std::lock_guard<std::recursive_mutex> guard(inputLock_);
|
||||||
|
// Send key up to every screen layer, to avoid stuck keys.
|
||||||
|
if (key.flags & KeyInputFlags::UP) {
|
||||||
|
for (auto &layer : stack_) {
|
||||||
|
layer.screen->key(key);
|
||||||
|
}
|
||||||
|
} else if (!stack_.empty()) {
|
||||||
|
stack_.back().screen->key(key);
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case QueuedEventType::AXIS:
|
||||||
|
{
|
||||||
|
const AxisInput &axis = ev.axis;
|
||||||
|
|
||||||
|
std::lock_guard<std::recursive_mutex> guard(inputLock_);
|
||||||
|
if (!stack_.empty()) {
|
||||||
|
stack_.back().screen->axis(axis);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
ERROR_LOG(Log::UI, "Unknown queued event type: %d", (int)ev.type);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScreenManager::switchToNext() {
|
void ScreenManager::switchToNext() {
|
||||||
@@ -163,42 +223,28 @@ void ScreenManager::switchToNext() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void ScreenManager::touch(const TouchInput &touch) {
|
void ScreenManager::touch(const TouchInput &touch) {
|
||||||
std::lock_guard<std::recursive_mutex> guard(inputLock_);
|
QueuedEvent ev{};
|
||||||
// Send release all events to every screen layer.
|
ev.type = QueuedEventType::TOUCH;
|
||||||
if (touch.flags & TouchInputFlags::RELEASE_ALL) {
|
ev.touch = touch;
|
||||||
for (auto &layer : stack_) {
|
std::lock_guard<std::mutex> guard(eventQueueLock_);
|
||||||
Screen *screen = layer.screen;
|
eventQueue_.push_back(ev);
|
||||||
layer.screen->UnsyncTouch(screen->transformTouch(touch));
|
|
||||||
}
|
|
||||||
} else if (!stack_.empty()) {
|
|
||||||
// Let the overlay know about touch-downs, to be able to dismiss popups.
|
|
||||||
bool skip = false;
|
|
||||||
if (overlayScreen_ && (touch.flags & TouchInputFlags::DOWN)) {
|
|
||||||
skip = overlayScreen_->UnsyncTouch(overlayScreen_->transformTouch(touch));
|
|
||||||
}
|
|
||||||
if (!skip) {
|
|
||||||
Screen *screen = stack_.back().screen;
|
|
||||||
stack_.back().screen->UnsyncTouch(screen->transformTouch(touch));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScreenManager::key(const KeyInput &key) {
|
void ScreenManager::key(const KeyInput &key) {
|
||||||
std::lock_guard<std::recursive_mutex> guard(inputLock_);
|
QueuedEvent ev{};
|
||||||
// Send key up to every screen layer, to avoid stuck keys.
|
ev.type = QueuedEventType::KEY;
|
||||||
if (key.flags & KeyInputFlags::UP) {
|
ev.key = key;
|
||||||
for (auto &layer : stack_) {
|
std::lock_guard<std::mutex> guard(eventQueueLock_);
|
||||||
layer.screen->UnsyncKey(key);
|
eventQueue_.push_back(ev);
|
||||||
}
|
|
||||||
} else if (!stack_.empty()) {
|
|
||||||
stack_.back().screen->UnsyncKey(key);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScreenManager::axis(const AxisInput *axes, size_t count) {
|
void ScreenManager::axis(const AxisInput *axes, size_t count) {
|
||||||
std::lock_guard<std::recursive_mutex> guard(inputLock_);
|
QueuedEvent ev{};
|
||||||
if (!stack_.empty()) {
|
ev.type = QueuedEventType::AXIS;
|
||||||
stack_.back().screen->UnsyncAxis(axes, count);
|
std::lock_guard<std::mutex> guard(eventQueueLock_);
|
||||||
|
for (size_t i = 0; i < count; i++) {
|
||||||
|
ev.axis = axes[i];
|
||||||
|
eventQueue_.push_back(ev);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+22
-6
@@ -16,6 +16,7 @@
|
|||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
#include <mutex>
|
#include <mutex>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
#include <deque>
|
||||||
#include <unordered_map>
|
#include <unordered_map>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
@@ -84,6 +85,21 @@ enum class InputMode {
|
|||||||
};
|
};
|
||||||
ENUM_CLASS_BITOPS(InputMode);
|
ENUM_CLASS_BITOPS(InputMode);
|
||||||
|
|
||||||
|
enum class QueuedEventType : u8 {
|
||||||
|
KEY,
|
||||||
|
AXIS,
|
||||||
|
TOUCH,
|
||||||
|
};
|
||||||
|
|
||||||
|
struct QueuedEvent {
|
||||||
|
QueuedEventType type;
|
||||||
|
union {
|
||||||
|
TouchInput touch;
|
||||||
|
KeyInput key;
|
||||||
|
AxisInput axis;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
class Screen {
|
class Screen {
|
||||||
public:
|
public:
|
||||||
Screen() = default;
|
Screen() = default;
|
||||||
@@ -103,11 +119,9 @@ public:
|
|||||||
|
|
||||||
virtual void focusChanged(ScreenFocusChange focusChange);
|
virtual void focusChanged(ScreenFocusChange focusChange);
|
||||||
|
|
||||||
// Return value of UnsyncTouch is only used to let the overlay screen block touches.
|
virtual bool touch(const TouchInput &touch) = 0;
|
||||||
virtual bool UnsyncTouch(const TouchInput &touch) = 0;
|
virtual bool key(const KeyInput &key) = 0;
|
||||||
// Return value of UnsyncKey is used to not block certain system keys like volume when unhandled, on Android.
|
virtual void axis(const AxisInput &axis) = 0;
|
||||||
virtual void UnsyncKey(const KeyInput &touch) = 0;
|
|
||||||
virtual void UnsyncAxis(const AxisInput *axes, size_t count) = 0;
|
|
||||||
|
|
||||||
virtual void RecreateViews() {}
|
virtual void RecreateViews() {}
|
||||||
|
|
||||||
@@ -208,7 +222,6 @@ public:
|
|||||||
InputMode PassInputToMapper() const {
|
InputMode PassInputToMapper() const {
|
||||||
return passInputToMapper_;
|
return passInputToMapper_;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::recursive_mutex inputLock_;
|
std::recursive_mutex inputLock_;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@@ -243,5 +256,8 @@ private:
|
|||||||
|
|
||||||
std::unordered_map<int64_t, int> lastAxis_;
|
std::unordered_map<int64_t, int> lastAxis_;
|
||||||
|
|
||||||
|
std::mutex eventQueueLock_;
|
||||||
|
std::deque<QueuedEvent> eventQueue_;
|
||||||
|
|
||||||
InputMode passInputToMapper_ = InputMode::None;
|
InputMode passInputToMapper_ = InputMode::None;
|
||||||
};
|
};
|
||||||
|
|||||||
+2
-63
@@ -66,7 +66,7 @@ void UIScreen::DoRecreateViews() {
|
|||||||
WipeRequesterToken();
|
WipeRequesterToken();
|
||||||
}
|
}
|
||||||
|
|
||||||
void UIScreen::touch(const TouchInput &touch) {
|
bool UIScreen::touch(const TouchInput &touch) {
|
||||||
if (ClickDebug && root_ && (touch.flags & TouchInputFlags::DOWN)) {
|
if (ClickDebug && root_ && (touch.flags & TouchInputFlags::DOWN)) {
|
||||||
INFO_LOG(Log::System, "Touch down!");
|
INFO_LOG(Log::System, "Touch down!");
|
||||||
std::vector<UI::View *> views;
|
std::vector<UI::View *> views;
|
||||||
@@ -79,6 +79,7 @@ void UIScreen::touch(const TouchInput &touch) {
|
|||||||
if (!ignoreInput_ && root_) {
|
if (!ignoreInput_ && root_) {
|
||||||
UI::TouchEvent(touch, root_);
|
UI::TouchEvent(touch, root_);
|
||||||
}
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void UIScreen::axis(const AxisInput &axis) {
|
void UIScreen::axis(const AxisInput &axis) {
|
||||||
@@ -95,33 +96,6 @@ bool UIScreen::key(const KeyInput &key) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool UIScreen::UnsyncTouch(const TouchInput &touch) {
|
|
||||||
QueuedEvent ev{};
|
|
||||||
ev.type = QueuedEventType::TOUCH;
|
|
||||||
ev.touch = touch;
|
|
||||||
std::lock_guard<std::mutex> guard(eventQueueLock_);
|
|
||||||
eventQueue_.push_back(ev);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void UIScreen::UnsyncAxis(const AxisInput *axes, size_t count) {
|
|
||||||
QueuedEvent ev{};
|
|
||||||
ev.type = QueuedEventType::AXIS;
|
|
||||||
std::lock_guard<std::mutex> guard(eventQueueLock_);
|
|
||||||
for (size_t i = 0; i < count; i++) {
|
|
||||||
ev.axis = axes[i];
|
|
||||||
eventQueue_.push_back(ev);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void UIScreen::UnsyncKey(const KeyInput &key) {
|
|
||||||
QueuedEvent ev{};
|
|
||||||
ev.type = QueuedEventType::KEY;
|
|
||||||
ev.key = key;
|
|
||||||
std::lock_guard<std::mutex> guard(eventQueueLock_);
|
|
||||||
eventQueue_.push_back(ev);
|
|
||||||
}
|
|
||||||
|
|
||||||
void UIScreen::update() {
|
void UIScreen::update() {
|
||||||
DeviceOrientation orientation = GetDeviceOrientation();
|
DeviceOrientation orientation = GetDeviceOrientation();
|
||||||
if (orientation != lastOrientation_) {
|
if (orientation != lastOrientation_) {
|
||||||
@@ -131,41 +105,6 @@ void UIScreen::update() {
|
|||||||
|
|
||||||
DoRecreateViews();
|
DoRecreateViews();
|
||||||
|
|
||||||
while (true) {
|
|
||||||
QueuedEvent ev{};
|
|
||||||
{
|
|
||||||
std::lock_guard<std::mutex> guard(eventQueueLock_);
|
|
||||||
if (!eventQueue_.empty()) {
|
|
||||||
ev = eventQueue_.front();
|
|
||||||
eventQueue_.pop_front();
|
|
||||||
} else {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (ignoreInput_) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
switch (ev.type) {
|
|
||||||
case QueuedEventType::KEY:
|
|
||||||
key(ev.key);
|
|
||||||
break;
|
|
||||||
case QueuedEventType::TOUCH:
|
|
||||||
if (ClickDebug && (ev.touch.flags & TouchInputFlags::DOWN)) {
|
|
||||||
INFO_LOG(Log::System, "Touch down!");
|
|
||||||
std::vector<UI::View *> views;
|
|
||||||
root_->Query(ev.touch.x, ev.touch.y, views);
|
|
||||||
for (auto view : views) {
|
|
||||||
INFO_LOG(Log::System, "%s", view->DescribeLog().c_str());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
touch(ev.touch);
|
|
||||||
break;
|
|
||||||
case QueuedEventType::AXIS:
|
|
||||||
axis(ev.axis);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (root_) {
|
if (root_) {
|
||||||
DialogResult result = UpdateViewHierarchy(root_);
|
DialogResult result = UpdateViewHierarchy(root_);
|
||||||
if (result != DR_NONE) {
|
if (result != DR_NONE) {
|
||||||
|
|||||||
+3
-26
@@ -17,21 +17,6 @@ namespace Draw {
|
|||||||
class DrawContext;
|
class DrawContext;
|
||||||
}
|
}
|
||||||
|
|
||||||
enum class QueuedEventType : u8 {
|
|
||||||
KEY,
|
|
||||||
AXIS,
|
|
||||||
TOUCH,
|
|
||||||
};
|
|
||||||
|
|
||||||
struct QueuedEvent {
|
|
||||||
QueuedEventType type;
|
|
||||||
union {
|
|
||||||
TouchInput touch;
|
|
||||||
KeyInput key;
|
|
||||||
AxisInput axis;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
class UIScreen : public Screen {
|
class UIScreen : public Screen {
|
||||||
public:
|
public:
|
||||||
UIScreen();
|
UIScreen();
|
||||||
@@ -42,13 +27,9 @@ public:
|
|||||||
void deviceLost() override;
|
void deviceLost() override;
|
||||||
void deviceRestored(Draw::DrawContext *draw) override;
|
void deviceRestored(Draw::DrawContext *draw) override;
|
||||||
|
|
||||||
virtual void touch(const TouchInput &touch);
|
bool touch(const TouchInput &touch) override;
|
||||||
virtual bool key(const KeyInput &key);
|
bool key(const KeyInput &key) override;
|
||||||
virtual void axis(const AxisInput &axis);
|
void axis(const AxisInput &axis) override;
|
||||||
|
|
||||||
bool UnsyncTouch(const TouchInput &touch) override;
|
|
||||||
void UnsyncKey(const KeyInput &key) override;
|
|
||||||
void UnsyncAxis(const AxisInput *axes, size_t count) override;
|
|
||||||
|
|
||||||
TouchInput transformTouch(const TouchInput &touch) override;
|
TouchInput transformTouch(const TouchInput &touch) override;
|
||||||
|
|
||||||
@@ -92,10 +73,6 @@ protected:
|
|||||||
|
|
||||||
bool recreateViews_ = true;
|
bool recreateViews_ = true;
|
||||||
DeviceOrientation lastOrientation_ = DeviceOrientation::Landscape;
|
DeviceOrientation lastOrientation_ = DeviceOrientation::Landscape;
|
||||||
|
|
||||||
private:
|
|
||||||
std::mutex eventQueueLock_;
|
|
||||||
std::deque<QueuedEvent> eventQueue_;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class UIDialogScreen : public UIScreen {
|
class UIDialogScreen : public UIScreen {
|
||||||
|
|||||||
@@ -615,7 +615,7 @@ static void load_integration_callback(int result, const char *error_message, rc_
|
|||||||
}
|
}
|
||||||
case RC_MISSING_VALUE:
|
case RC_MISSING_VALUE:
|
||||||
// This is fine, proceeding to login.
|
// This is fine, proceeding to login.
|
||||||
g_OSD.Show(OSDType::MESSAGE_WARNING, ac->T("RAIntegration is enabled, but %1 was not found."));
|
g_OSD.Show(OSDType::MESSAGE_WARNING, ApplySafeSubstitutions(ac->T("RAIntegration is enabled, but %1 was not found."), RAINTEGRATION_FILENAME));
|
||||||
break;
|
break;
|
||||||
case RC_ABORTED:
|
case RC_ABORTED:
|
||||||
// This is fine(-ish), proceeding to login.
|
// This is fine(-ish), proceeding to login.
|
||||||
|
|||||||
+2
-1
@@ -629,7 +629,7 @@ void FrameDumpTestScreen::update() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void TouchTestScreen::touch(const TouchInput &touch) {
|
bool TouchTestScreen::touch(const TouchInput &touch) {
|
||||||
UIBaseDialogScreen::touch(touch);
|
UIBaseDialogScreen::touch(touch);
|
||||||
if (touch.flags & TouchInputFlags::DOWN) {
|
if (touch.flags & TouchInputFlags::DOWN) {
|
||||||
bool found = false;
|
bool found = false;
|
||||||
@@ -678,6 +678,7 @@ void TouchTestScreen::touch(const TouchInput &touch) {
|
|||||||
WARN_LOG(Log::System, "Touch release without touch down");
|
WARN_LOG(Log::System, "Touch release without touch down");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Move this screen out into its own file.
|
// TODO: Move this screen out into its own file.
|
||||||
|
|||||||
+1
-1
@@ -169,7 +169,7 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void touch(const TouchInput &touch) override;
|
bool touch(const TouchInput &touch) override;
|
||||||
void DrawForeground(UIContext &dc) override;
|
void DrawForeground(UIContext &dc) override;
|
||||||
|
|
||||||
bool key(const KeyInput &key) override;
|
bool key(const KeyInput &key) override;
|
||||||
|
|||||||
+4
-3
@@ -1212,7 +1212,7 @@ bool EmuScreen::key(const KeyInput &key) {
|
|||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
void EmuScreen::touch(const TouchInput &touch) {
|
bool EmuScreen::touch(const TouchInput &touch) {
|
||||||
System_Notify(SystemNotification::ACTIVITY);
|
System_Notify(SystemNotification::ACTIVITY);
|
||||||
|
|
||||||
bool ignoreGamepad = false;
|
bool ignoreGamepad = false;
|
||||||
@@ -1234,7 +1234,7 @@ void EmuScreen::touch(const TouchInput &touch) {
|
|||||||
if (g_Config.bShowImDebugger && imguiInited_) {
|
if (g_Config.bShowImDebugger && imguiInited_) {
|
||||||
ImGui_ImplPlatform_TouchEvent(touch);
|
ImGui_ImplPlatform_TouchEvent(touch);
|
||||||
if (!ImGui::GetIO().WantCaptureMouse) {
|
if (!ImGui::GetIO().WantCaptureMouse) {
|
||||||
UIScreen::touch(touch);
|
return UIScreen::touch(touch);
|
||||||
}
|
}
|
||||||
} else if (g_Config.bMouseControl && !(touch.flags & TouchInputFlags::UP) && (touch.flags & TouchInputFlags::MOUSE)) {
|
} else if (g_Config.bMouseControl && !(touch.flags & TouchInputFlags::UP) && (touch.flags & TouchInputFlags::MOUSE)) {
|
||||||
// don't do anything as the mouse pointer is hidden in this case.
|
// don't do anything as the mouse pointer is hidden in this case.
|
||||||
@@ -1252,8 +1252,9 @@ void EmuScreen::touch(const TouchInput &touch) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
UIScreen::touch(touch);
|
return UIScreen::touch(touch);
|
||||||
}
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Shouldn't actually need bounds for this, Anchor can center too.
|
// TODO: Shouldn't actually need bounds for this, Anchor can center too.
|
||||||
|
|||||||
+1
-1
@@ -56,7 +56,7 @@ public:
|
|||||||
|
|
||||||
// We also need to do some special handling of queued UI events to handle closing the chat window.
|
// We also need to do some special handling of queued UI events to handle closing the chat window.
|
||||||
bool key(const KeyInput &key) override;
|
bool key(const KeyInput &key) override;
|
||||||
void touch(const TouchInput &key) override;
|
bool touch(const TouchInput &key) override;
|
||||||
|
|
||||||
void deviceLost() override;
|
void deviceLost() override;
|
||||||
void deviceRestored(Draw::DrawContext *draw) override;
|
void deviceRestored(Draw::DrawContext *draw) override;
|
||||||
|
|||||||
+3
-1
@@ -419,10 +419,12 @@ bool LogoScreen::key(const KeyInput &key) {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void LogoScreen::touch(const TouchInput &touch) {
|
bool LogoScreen::touch(const TouchInput &touch) {
|
||||||
if (touch.flags & TouchInputFlags::DOWN) {
|
if (touch.flags & TouchInputFlags::DOWN) {
|
||||||
Next();
|
Next();
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void LogoScreen::DrawForeground(UIContext &dc) {
|
void LogoScreen::DrawForeground(UIContext &dc) {
|
||||||
|
|||||||
+1
-1
@@ -101,7 +101,7 @@ public:
|
|||||||
LogoScreen(AfterLogoScreen afterLogoScreen = AfterLogoScreen::DEFAULT);
|
LogoScreen(AfterLogoScreen afterLogoScreen = AfterLogoScreen::DEFAULT);
|
||||||
|
|
||||||
bool key(const KeyInput &key) override;
|
bool key(const KeyInput &key) override;
|
||||||
void touch(const TouchInput &touch) override;
|
bool touch(const TouchInput &touch) override;
|
||||||
void update() override;
|
void update() override;
|
||||||
void DrawForeground(UIContext &ui) override;
|
void DrawForeground(UIContext &ui) override;
|
||||||
void sendMessage(UIMessage message, const char *value) override;
|
void sendMessage(UIMessage message, const char *value) override;
|
||||||
|
|||||||
+10
-10
@@ -1478,6 +1478,16 @@ bool NativeKey(const KeyInput &key) {
|
|||||||
g_controlMapper.Key(key);
|
g_controlMapper.Key(key);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Ignore volume keys and stuff here - though we do send them through to the control mapper, so they can be mapped to PSP buttons.
|
||||||
|
switch (key.keyCode) {
|
||||||
|
case NKCODE_VOLUME_DOWN:
|
||||||
|
case NKCODE_VOLUME_UP:
|
||||||
|
case NKCODE_VOLUME_MUTE:
|
||||||
|
return false;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
// Track modifier keys.
|
// Track modifier keys.
|
||||||
if (key.flags & KeyInputFlags::DOWN) {
|
if (key.flags & KeyInputFlags::DOWN) {
|
||||||
switch (key.keyCode) {
|
switch (key.keyCode) {
|
||||||
@@ -1526,16 +1536,6 @@ bool NativeKey(const KeyInput &key) {
|
|||||||
KeyInput modKey = key;
|
KeyInput modKey = key;
|
||||||
modKey.flags |= modifierFlags;
|
modKey.flags |= modifierFlags;
|
||||||
|
|
||||||
// Ignore volume keys and stuff here. Not elegant but need to propagate bools through the view hierarchy as well...
|
|
||||||
switch (key.keyCode) {
|
|
||||||
case NKCODE_VOLUME_DOWN:
|
|
||||||
case NKCODE_VOLUME_UP:
|
|
||||||
case NKCODE_VOLUME_MUTE:
|
|
||||||
return false;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool retval = false;
|
bool retval = false;
|
||||||
|
|
||||||
UI::KeyEventResult kev = UI::KeyEventToFocusMoves(key);
|
UI::KeyEventResult kev = UI::KeyEventToFocusMoves(key);
|
||||||
|
|||||||
@@ -389,7 +389,7 @@ bool OnScreenMessagesView::Dismiss(float x, float y) {
|
|||||||
return dismissed;
|
return dismissed;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool OSDOverlayScreen::UnsyncTouch(const TouchInput &touch) {
|
bool OSDOverlayScreen::touch(const TouchInput &touch) {
|
||||||
// Don't really need to forward.
|
// Don't really need to forward.
|
||||||
// UIScreen::UnsyncTouch(touch);
|
// UIScreen::UnsyncTouch(touch);
|
||||||
if ((touch.flags & TouchInputFlags::DOWN) && osmView_) {
|
if ((touch.flags & TouchInputFlags::DOWN) && osmView_) {
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ class OSDOverlayScreen : public UIScreen {
|
|||||||
public:
|
public:
|
||||||
const char *tag() const override { return "OSDOverlayScreen"; }
|
const char *tag() const override { return "OSDOverlayScreen"; }
|
||||||
|
|
||||||
bool UnsyncTouch(const TouchInput &touch) override;
|
bool touch(const TouchInput &touch) override;
|
||||||
|
|
||||||
void CreateViews() override;
|
void CreateViews() override;
|
||||||
void DrawForeground(UIContext &ui) override;
|
void DrawForeground(UIContext &ui) override;
|
||||||
|
|||||||
Reference in New Issue
Block a user