mirror of
https://github.com/hrydgard/ppsspp.git
synced 2024-11-23 13:30:02 +00:00
Also move out the global stuff from view.cpp/h to root.cpp/h
This commit is contained in:
parent
271f79ea63
commit
c176c6c114
@ -1,4 +1,5 @@
|
|||||||
#include "ppsspp_config.h"
|
#include "ppsspp_config.h"
|
||||||
|
#include "ui/root.h"
|
||||||
#include "ui/ui_context.h"
|
#include "ui/ui_context.h"
|
||||||
#include "ui/view.h"
|
#include "ui/view.h"
|
||||||
#include "ui/viewgroup.h"
|
#include "ui/viewgroup.h"
|
||||||
|
@ -31,7 +31,7 @@
|
|||||||
#include "ui/view.h"
|
#include "ui/view.h"
|
||||||
#include "ui/viewgroup.h"
|
#include "ui/viewgroup.h"
|
||||||
|
|
||||||
void Combo_keyScreen::CreateViews() {
|
void ComboKeyScreen::CreateViews() {
|
||||||
using namespace UI;
|
using namespace UI;
|
||||||
auto co = GetI18NCategory("Controls");
|
auto co = GetI18NCategory("Controls");
|
||||||
root_ = new LinearLayout(ORIENT_VERTICAL);
|
root_ = new LinearLayout(ORIENT_VERTICAL);
|
||||||
@ -51,7 +51,7 @@ void Combo_keyScreen::CreateViews() {
|
|||||||
comboselect->AddChoice(comboKeyImages[i]);
|
comboselect->AddChoice(comboKeyImages[i]);
|
||||||
}
|
}
|
||||||
comboselect->SetSelection(*mode);
|
comboselect->SetSelection(*mode);
|
||||||
comboselect->OnChoice.Handle(this, &Combo_keyScreen::onCombo);
|
comboselect->OnChoice.Handle(this, &ComboKeyScreen::onCombo);
|
||||||
leftColumn->Add(comboselect);
|
leftColumn->Add(comboselect);
|
||||||
root__->Add(leftColumn);
|
root__->Add(leftColumn);
|
||||||
rightScroll_ = new ScrollView(ORIENT_VERTICAL, new LinearLayoutParams(FILL_PARENT, FILL_PARENT, 1.0f));
|
rightScroll_ = new ScrollView(ORIENT_VERTICAL, new LinearLayoutParams(FILL_PARENT, FILL_PARENT, 1.0f));
|
||||||
@ -175,7 +175,7 @@ static int arrayToInt(bool ary[16]) {
|
|||||||
return value >> 1;
|
return value >> 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Combo_keyScreen::onFinish(DialogResult result) {
|
void ComboKeyScreen::onFinish(DialogResult result) {
|
||||||
switch (*mode) {
|
switch (*mode) {
|
||||||
case 0:
|
case 0:
|
||||||
g_Config.iCombokey0 = arrayToInt(array);
|
g_Config.iCombokey0 = arrayToInt(array);
|
||||||
@ -193,17 +193,17 @@ void Combo_keyScreen::onFinish(DialogResult result) {
|
|||||||
g_Config.iCombokey4 = arrayToInt(array);
|
g_Config.iCombokey4 = arrayToInt(array);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
g_Config.Save("Combo_keyScreen::onFInish");
|
g_Config.Save("ComboKeyScreen::onFInish");
|
||||||
}
|
}
|
||||||
|
|
||||||
UI::EventReturn Combo_keyScreen::ChoiceEventHandler::onChoiceClick(UI::EventParams &e){
|
UI::EventReturn ComboKeyScreen::ChoiceEventHandler::onChoiceClick(UI::EventParams &e){
|
||||||
checkbox_->Toggle();
|
checkbox_->Toggle();
|
||||||
|
|
||||||
|
|
||||||
return UI::EVENT_DONE;
|
return UI::EVENT_DONE;
|
||||||
};
|
};
|
||||||
|
|
||||||
UI::EventReturn Combo_keyScreen::onCombo(UI::EventParams &e) {
|
UI::EventReturn ComboKeyScreen::onCombo(UI::EventParams &e) {
|
||||||
switch (*mode){
|
switch (*mode){
|
||||||
case 0:g_Config.iCombokey0 = arrayToInt(array);
|
case 0:g_Config.iCombokey0 = arrayToInt(array);
|
||||||
break;
|
break;
|
||||||
|
@ -25,9 +25,9 @@ namespace UI {
|
|||||||
class CheckBox;
|
class CheckBox;
|
||||||
}
|
}
|
||||||
|
|
||||||
class Combo_keyScreen : public UIDialogScreenWithBackground {
|
class ComboKeyScreen : public UIDialogScreenWithBackground {
|
||||||
public:
|
public:
|
||||||
Combo_keyScreen(int *key): mode(key) {}
|
ComboKeyScreen(int *key): mode(key) {}
|
||||||
|
|
||||||
void CreateViews() override;
|
void CreateViews() override;
|
||||||
void onFinish(DialogResult result) override;
|
void onFinish(DialogResult result) override;
|
||||||
|
@ -26,6 +26,7 @@
|
|||||||
#include "i18n/i18n.h"
|
#include "i18n/i18n.h"
|
||||||
#include "input/keycodes.h"
|
#include "input/keycodes.h"
|
||||||
#include "input/input_state.h"
|
#include "input/input_state.h"
|
||||||
|
#include "ui/root.h"
|
||||||
#include "ui/ui.h"
|
#include "ui/ui.h"
|
||||||
#include "ui/ui_context.h"
|
#include "ui/ui_context.h"
|
||||||
#include "ui/view.h"
|
#include "ui/view.h"
|
||||||
|
@ -28,6 +28,7 @@
|
|||||||
#include "gfx_es2/draw_buffer.h"
|
#include "gfx_es2/draw_buffer.h"
|
||||||
#include "i18n/i18n.h"
|
#include "i18n/i18n.h"
|
||||||
#include "util/text/utf8.h"
|
#include "util/text/utf8.h"
|
||||||
|
#include "ui/root.h"
|
||||||
#include "ui/view.h"
|
#include "ui/view.h"
|
||||||
#include "ui/viewgroup.h"
|
#include "ui/viewgroup.h"
|
||||||
#include "ui/ui_context.h"
|
#include "ui/ui_context.h"
|
||||||
@ -1403,7 +1404,7 @@ UI::EventReturn GameSettingsScreen::OnChangeMacAddress(UI::EventParams &e) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
UI::EventReturn GameSettingsScreen::OnComboKey(UI::EventParams &e) {
|
UI::EventReturn GameSettingsScreen::OnComboKey(UI::EventParams &e) {
|
||||||
screenManager()->push(new Combo_keyScreen(&g_Config.iComboMode));
|
screenManager()->push(new ComboKeyScreen(&g_Config.iComboMode));
|
||||||
return UI::EVENT_DONE;
|
return UI::EVENT_DONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -27,6 +27,7 @@
|
|||||||
#include "gfx_es2/draw_buffer.h"
|
#include "gfx_es2/draw_buffer.h"
|
||||||
#include "math/curves.h"
|
#include "math/curves.h"
|
||||||
#include "base/stringutil.h"
|
#include "base/stringutil.h"
|
||||||
|
#include "ui/root.h"
|
||||||
#include "ui/ui_context.h"
|
#include "ui/ui_context.h"
|
||||||
#include "ui/view.h"
|
#include "ui/view.h"
|
||||||
#include "ui/viewgroup.h"
|
#include "ui/viewgroup.h"
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
#include <mutex>
|
#include <mutex>
|
||||||
|
#include <deque>
|
||||||
|
|
||||||
#include "base/timeutil.h"
|
#include "base/timeutil.h"
|
||||||
#include "ui/root.h"
|
#include "ui/root.h"
|
||||||
@ -10,6 +11,94 @@ static std::mutex focusLock;
|
|||||||
static std::vector<int> focusMoves;
|
static std::vector<int> focusMoves;
|
||||||
extern bool focusForced;
|
extern bool focusForced;
|
||||||
|
|
||||||
|
static View *focusedView;
|
||||||
|
static bool focusMovementEnabled;
|
||||||
|
bool focusForced;
|
||||||
|
static std::mutex eventMutex_; // needs recursivity!
|
||||||
|
|
||||||
|
struct DispatchQueueItem {
|
||||||
|
Event *e;
|
||||||
|
EventParams params;
|
||||||
|
};
|
||||||
|
|
||||||
|
std::deque<DispatchQueueItem> g_dispatchQueue;
|
||||||
|
|
||||||
|
void EventTriggered(Event *e, EventParams params) {
|
||||||
|
DispatchQueueItem item;
|
||||||
|
item.e = e;
|
||||||
|
item.params = params;
|
||||||
|
|
||||||
|
std::unique_lock<std::mutex> guard(eventMutex_);
|
||||||
|
g_dispatchQueue.push_front(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DispatchEvents() {
|
||||||
|
while (true) {
|
||||||
|
DispatchQueueItem item;
|
||||||
|
{
|
||||||
|
std::unique_lock<std::mutex> guard(eventMutex_);
|
||||||
|
if (g_dispatchQueue.empty())
|
||||||
|
break;
|
||||||
|
item = g_dispatchQueue.back();
|
||||||
|
g_dispatchQueue.pop_back();
|
||||||
|
}
|
||||||
|
if (item.e) {
|
||||||
|
item.e->Dispatch(item.params);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void RemoveQueuedEventsByView(View *view) {
|
||||||
|
for (auto it = g_dispatchQueue.begin(); it != g_dispatchQueue.end(); ) {
|
||||||
|
if (it->params.v == view) {
|
||||||
|
it = g_dispatchQueue.erase(it);
|
||||||
|
} else {
|
||||||
|
++it;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void RemoveQueuedEventsByEvent(Event *event) {
|
||||||
|
for (auto it = g_dispatchQueue.begin(); it != g_dispatchQueue.end(); ) {
|
||||||
|
if (it->e == event) {
|
||||||
|
it = g_dispatchQueue.erase(it);
|
||||||
|
} else {
|
||||||
|
++it;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
View *GetFocusedView() {
|
||||||
|
return focusedView;
|
||||||
|
}
|
||||||
|
|
||||||
|
void SetFocusedView(View *view, bool force) {
|
||||||
|
if (focusedView) {
|
||||||
|
focusedView->FocusChanged(FF_LOSTFOCUS);
|
||||||
|
}
|
||||||
|
focusedView = view;
|
||||||
|
if (focusedView) {
|
||||||
|
focusedView->FocusChanged(FF_GOTFOCUS);
|
||||||
|
if (force) {
|
||||||
|
focusForced = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void EnableFocusMovement(bool enable) {
|
||||||
|
focusMovementEnabled = enable;
|
||||||
|
if (!enable) {
|
||||||
|
if (focusedView) {
|
||||||
|
focusedView->FocusChanged(FF_LOSTFOCUS);
|
||||||
|
}
|
||||||
|
focusedView = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool IsFocusMovementEnabled() {
|
||||||
|
return focusMovementEnabled;
|
||||||
|
}
|
||||||
|
|
||||||
void LayoutViewHierarchy(const UIContext &dc, ViewGroup *root) {
|
void LayoutViewHierarchy(const UIContext &dc, ViewGroup *root) {
|
||||||
if (!root) {
|
if (!root) {
|
||||||
ELOG("Tried to layout a view hierarchy from a zero pointer root");
|
ELOG("Tried to layout a view hierarchy from a zero pointer root");
|
||||||
|
@ -5,6 +5,18 @@
|
|||||||
|
|
||||||
namespace UI {
|
namespace UI {
|
||||||
|
|
||||||
|
// The ONLY global is the currently focused item.
|
||||||
|
// Can be and often is null.
|
||||||
|
void EnableFocusMovement(bool enable);
|
||||||
|
bool IsFocusMovementEnabled();
|
||||||
|
View *GetFocusedView();
|
||||||
|
void SetFocusedView(View *view, bool force = false);
|
||||||
|
void RemoveQueuedEventsByEvent(Event *e);
|
||||||
|
void RemoveQueuedEventsByView(View * v);
|
||||||
|
|
||||||
|
void EventTriggered(Event *e, EventParams params);
|
||||||
|
void DispatchEvents();
|
||||||
|
|
||||||
class ViewGroup;
|
class ViewGroup;
|
||||||
|
|
||||||
void LayoutViewHierarchy(const UIContext &dc, ViewGroup *root);
|
void LayoutViewHierarchy(const UIContext &dc, ViewGroup *root);
|
||||||
@ -14,4 +26,4 @@ bool KeyEvent(const KeyInput &key, ViewGroup *root);
|
|||||||
bool TouchEvent(const TouchInput &touch, ViewGroup *root);
|
bool TouchEvent(const TouchInput &touch, ViewGroup *root);
|
||||||
bool AxisEvent(const AxisInput &axis, ViewGroup *root);
|
bool AxisEvent(const AxisInput &axis, ViewGroup *root);
|
||||||
|
|
||||||
}
|
} // namespace UI
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
#include "base/logging.h"
|
#include "base/logging.h"
|
||||||
#include "base/timeutil.h"
|
#include "base/timeutil.h"
|
||||||
#include "input/input_state.h"
|
#include "input/input_state.h"
|
||||||
|
#include "ui/root.h"
|
||||||
#include "ui/screen.h"
|
#include "ui/screen.h"
|
||||||
#include "ui/ui.h"
|
#include "ui/ui.h"
|
||||||
#include "ui/view.h"
|
#include "ui/view.h"
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
#include <queue>
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <mutex>
|
#include <mutex>
|
||||||
|
|
||||||
@ -13,103 +12,16 @@
|
|||||||
#include "ui/view.h"
|
#include "ui/view.h"
|
||||||
#include "ui/ui_context.h"
|
#include "ui/ui_context.h"
|
||||||
#include "ui/ui_tween.h"
|
#include "ui/ui_tween.h"
|
||||||
|
#include "ui/root.h"
|
||||||
#include "thin3d/thin3d.h"
|
#include "thin3d/thin3d.h"
|
||||||
#include "base/NativeApp.h"
|
#include "base/NativeApp.h"
|
||||||
|
|
||||||
namespace UI {
|
namespace UI {
|
||||||
|
|
||||||
static View *focusedView;
|
|
||||||
static bool focusMovementEnabled;
|
|
||||||
bool focusForced;
|
|
||||||
static std::mutex eventMutex_; // needs recursivity!
|
|
||||||
|
|
||||||
const float ITEM_HEIGHT = 64.f;
|
const float ITEM_HEIGHT = 64.f;
|
||||||
const float MIN_TEXT_SCALE = 0.8f;
|
const float MIN_TEXT_SCALE = 0.8f;
|
||||||
const float MAX_ITEM_SIZE = 65535.0f;
|
const float MAX_ITEM_SIZE = 65535.0f;
|
||||||
|
|
||||||
struct DispatchQueueItem {
|
|
||||||
Event *e;
|
|
||||||
EventParams params;
|
|
||||||
};
|
|
||||||
|
|
||||||
std::deque<DispatchQueueItem> g_dispatchQueue;
|
|
||||||
|
|
||||||
void EventTriggered(Event *e, EventParams params) {
|
|
||||||
DispatchQueueItem item;
|
|
||||||
item.e = e;
|
|
||||||
item.params = params;
|
|
||||||
|
|
||||||
std::unique_lock<std::mutex> guard(eventMutex_);
|
|
||||||
g_dispatchQueue.push_front(item);
|
|
||||||
}
|
|
||||||
|
|
||||||
void DispatchEvents() {
|
|
||||||
while (true) {
|
|
||||||
DispatchQueueItem item;
|
|
||||||
{
|
|
||||||
std::unique_lock<std::mutex> guard(eventMutex_);
|
|
||||||
if (g_dispatchQueue.empty())
|
|
||||||
break;
|
|
||||||
item = g_dispatchQueue.back();
|
|
||||||
g_dispatchQueue.pop_back();
|
|
||||||
}
|
|
||||||
if (item.e) {
|
|
||||||
item.e->Dispatch(item.params);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void RemoveQueuedEvents(View *v) {
|
|
||||||
for (auto it = g_dispatchQueue.begin(); it != g_dispatchQueue.end(); ) {
|
|
||||||
if (it->params.v == v) {
|
|
||||||
it = g_dispatchQueue.erase(it);
|
|
||||||
} else {
|
|
||||||
++it;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void RemoveQueuedEvents(Event *e) {
|
|
||||||
for (auto it = g_dispatchQueue.begin(); it != g_dispatchQueue.end(); ) {
|
|
||||||
if (it->e == e) {
|
|
||||||
it = g_dispatchQueue.erase(it);
|
|
||||||
} else {
|
|
||||||
++it;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
View *GetFocusedView() {
|
|
||||||
return focusedView;
|
|
||||||
}
|
|
||||||
|
|
||||||
void SetFocusedView(View *view, bool force) {
|
|
||||||
if (focusedView) {
|
|
||||||
focusedView->FocusChanged(FF_LOSTFOCUS);
|
|
||||||
}
|
|
||||||
focusedView = view;
|
|
||||||
if (focusedView) {
|
|
||||||
focusedView->FocusChanged(FF_GOTFOCUS);
|
|
||||||
if (force) {
|
|
||||||
focusForced = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void EnableFocusMovement(bool enable) {
|
|
||||||
focusMovementEnabled = enable;
|
|
||||||
if (!enable) {
|
|
||||||
if (focusedView) {
|
|
||||||
focusedView->FocusChanged(FF_LOSTFOCUS);
|
|
||||||
}
|
|
||||||
focusedView = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bool IsFocusMovementEnabled() {
|
|
||||||
return focusMovementEnabled;
|
|
||||||
}
|
|
||||||
|
|
||||||
void MeasureBySpec(Size sz, float contentWidth, MeasureSpec spec, float *measured) {
|
void MeasureBySpec(Size sz, float contentWidth, MeasureSpec spec, float *measured) {
|
||||||
*measured = sz;
|
*measured = sz;
|
||||||
if (sz == WRAP_CONTENT) {
|
if (sz == WRAP_CONTENT) {
|
||||||
@ -172,13 +84,13 @@ EventReturn Event::Dispatch(EventParams &e) {
|
|||||||
|
|
||||||
Event::~Event() {
|
Event::~Event() {
|
||||||
handlers_.clear();
|
handlers_.clear();
|
||||||
RemoveQueuedEvents(this);
|
RemoveQueuedEventsByEvent(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
View::~View() {
|
View::~View() {
|
||||||
if (HasFocus())
|
if (HasFocus())
|
||||||
SetFocusedView(0);
|
SetFocusedView(0);
|
||||||
RemoveQueuedEvents(this);
|
RemoveQueuedEventsByView(this);
|
||||||
|
|
||||||
// Could use unique_ptr, but then we have to include tween everywhere.
|
// Could use unique_ptr, but then we have to include tween everywhere.
|
||||||
for (auto &tween : tweens_)
|
for (auto &tween : tweens_)
|
||||||
|
@ -45,13 +45,6 @@ namespace UI {
|
|||||||
|
|
||||||
class View;
|
class View;
|
||||||
|
|
||||||
// The ONLY global is the currently focused item.
|
|
||||||
// Can be and often is null.
|
|
||||||
void EnableFocusMovement(bool enable);
|
|
||||||
bool IsFocusMovementEnabled();
|
|
||||||
View *GetFocusedView();
|
|
||||||
void SetFocusedView(View *view, bool force = false);
|
|
||||||
|
|
||||||
enum DrawableType {
|
enum DrawableType {
|
||||||
DRAW_NOTHING,
|
DRAW_NOTHING,
|
||||||
DRAW_SOLID_COLOR,
|
DRAW_SOLID_COLOR,
|
||||||
@ -908,8 +901,6 @@ private:
|
|||||||
|
|
||||||
void MeasureBySpec(Size sz, float contentWidth, MeasureSpec spec, float *measured);
|
void MeasureBySpec(Size sz, float contentWidth, MeasureSpec spec, float *measured);
|
||||||
|
|
||||||
void EventTriggered(Event *e, EventParams params);
|
|
||||||
void DispatchEvents();
|
|
||||||
bool IsDPadKey(const KeyInput &key);
|
bool IsDPadKey(const KeyInput &key);
|
||||||
bool IsAcceptKey(const KeyInput &key);
|
bool IsAcceptKey(const KeyInput &key);
|
||||||
bool IsEscapeKey(const KeyInput &key);
|
bool IsEscapeKey(const KeyInput &key);
|
||||||
|
Loading…
Reference in New Issue
Block a user