Skip to content

Commit 72c5156

Browse files
committed
Add a viewer for touch priority
1 parent 492429c commit 72c5156

4 files changed

Lines changed: 82 additions & 1 deletion

File tree

src/DevTools.cpp

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ struct matjson::Serialize<Settings> {
3636
assign(value["button_game"], s.buttonInGame);
3737
assign(value["button_enabled"], s.buttonEnabled);
3838
assign(value["tree_drag_reorder"], s.treeDragReorder);
39+
assign(value["show_touch_prio"], s.showTouchPrio);
3940

4041
return Ok(s);
4142
}
@@ -58,7 +59,8 @@ struct matjson::Serialize<Settings> {
5859
{ "button_editor", settings.buttonInEditor },
5960
{ "button_game", settings.buttonInGame },
6061
{ "button_enabled", settings.buttonEnabled },
61-
{ "tree_drag_reorder", settings.treeDragReorder }
62+
{ "tree_drag_reorder", settings.treeDragReorder },
63+
{ "show_touch_prio", settings.showTouchPrio },
6264
});
6365
}
6466
};
@@ -254,6 +256,13 @@ void DevTools::drawPages() {
254256
&DevTools::drawMemory
255257
);
256258
}
259+
260+
if (m_settings.showTouchPrio) {
261+
this->drawPage(
262+
U8STR(FEATHER_TABLET " Touch Priority Viewer###devtools/touchprio"),
263+
&DevTools::drawPrioTree
264+
);
265+
}
257266
}
258267

259268
void DevTools::draw(GLRenderCtx* ctx) {

src/DevTools.hpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ struct Settings {
3636
bool buttonInGame = false;
3737
bool buttonEnabled = false;
3838
bool treeDragReorder = false;
39+
bool showTouchPrio = false;
3940
};
4041

4142
class DevTools {
@@ -66,6 +67,8 @@ class DevTools {
6667
void setupPlatform();
6768

6869
void drawTree();
70+
void drawPrioTree();
71+
void drawPrioHandler(CCTouchHandler* handler);
6972
void drawTreeBranch(CCNode* node, size_t index, bool drag, bool visible);
7073
void drawSettings();
7174
void drawAdvancedSettings();

src/pages/PrioTree.cpp

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
#include <Geode/utils/cocos.hpp>
2+
#include "../DevTools.hpp"
3+
#include <misc/cpp/imgui_stdlib.h>
4+
#include <Geode/utils/string.hpp>
5+
6+
using namespace geode::prelude;
7+
8+
std::string formatNodeName(CCNode* node, int prio) {
9+
std::string name = fmt::format("[{}] {} ", prio, geode::cocos::getObjectName(node));
10+
if (node->getTag() != -1) {
11+
name += fmt::format("({}) ", node->getTag());
12+
}
13+
if (node->getID().size()) {
14+
name += fmt::format("\"{}\" ", node->getID());
15+
}
16+
return name;
17+
}
18+
19+
void DevTools::drawPrioHandler(CCTouchHandler* handler) {
20+
auto node = typeinfo_cast<CCNode*>(handler->getDelegate());
21+
if (node) {
22+
bool selected = DevTools::get()->getSelectedNode() == node;
23+
24+
ImGuiTreeNodeFlags flags = ImGuiTreeNodeFlags_Leaf;
25+
if (selected) {
26+
flags |= ImGuiTreeNodeFlags_Selected;
27+
}
28+
29+
const auto name = formatNodeName(node, handler->getPriority());
30+
bool expanded = ImGui::TreeNodeEx(node, flags, "%s", name.c_str());
31+
32+
if (ImGui::IsItemClicked()) {
33+
DevTools::get()->selectNode(node);
34+
selected = true;
35+
36+
CCNode* parent = node->getParent();
37+
while (parent) {
38+
m_nodeOpen[parent] = true;
39+
parent = parent->getParent();
40+
}
41+
}
42+
if (expanded) {
43+
ImGui::TreePop();
44+
}
45+
}
46+
}
47+
48+
void DevTools::drawPrioTree() {
49+
#ifdef GEODE_IS_MOBILE
50+
ImGui::Dummy({0.f, 60.f});
51+
#endif
52+
ImGui::Text("Standard Handlers");
53+
54+
for (auto d : CCTouchDispatcher::get()->m_pStandardHandlers->asExt<CCTouchHandler>()) {
55+
drawPrioHandler(d);
56+
}
57+
58+
ImGui::Text("Targeted Handlers");
59+
60+
for (auto d : CCTouchDispatcher::get()->m_pTargetedHandlers->asExt<CCTouchHandler>()) {
61+
drawPrioHandler(d);
62+
}
63+
}

src/pages/Settings.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,12 @@ void DevTools::drawSettings() {
8282
"Shows the mod graph window."
8383
);
8484
}
85+
ImGui::Checkbox("Show Touch Priority Viewer", &m_settings.showTouchPrio);
86+
if (ImGui::IsItemHovered()) {
87+
ImGui::SetTooltip(
88+
"Shows the touch priority viewer window."
89+
);
90+
}
8591
ImGui::PopStyleVar();
8692

8793
ImGui::Separator();

0 commit comments

Comments
 (0)