Skip to content

Commit d0c2176

Browse files
authored
Fix a crash when removing layouts and layout options (#58)
* Fix a crash when removing layouts and layout opts * Clean up code * Move everything into methods
1 parent 48fbca3 commit d0c2176

File tree

2 files changed

+49
-11
lines changed

2 files changed

+49
-11
lines changed

src/DevTools.hpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,14 @@ class DevTools {
5858
void drawAdvancedSettings();
5959
void drawNodeAttributes(CCNode* node);
6060
void drawAttributes();
61+
void drawBasicAttributes(CCNode* node);
62+
void drawColorAttributes(CCNode* node);
63+
void drawLabelAttributes(CCNode* node);
64+
void drawAxisGapAttribute(CCNode* node);
65+
void drawTextureAttributes(CCNode* node);
66+
void drawMenuItemAttributes(CCNode* node);
67+
void drawLayoutOptionsAttributes(CCNode* node);
68+
void drawLayoutAttributes(CCNode* node);
6169
void drawPreview();
6270
void drawNodePreview(CCNode* node);
6371
void drawHighlight(CCNode* node, HighlightMode mode);

src/pages/Attributes.cpp

Lines changed: 41 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,28 @@ bool checkbox(const char* text, T* ptr, bool(T::* get)() const, R(T::* set)(bool
3535
}
3636

3737
void DevTools::drawNodeAttributes(CCNode* node) {
38+
drawBasicAttributes(node);
39+
drawColorAttributes(node);
40+
drawLabelAttributes(node);
41+
drawAxisGapAttribute(node);
42+
43+
ImGui::NewLine();
44+
ImGui::Separator();
45+
ImGui::NewLine();
46+
47+
drawTextureAttributes(node);
48+
drawMenuItemAttributes(node);
49+
50+
drawLayoutOptionsAttributes(node);
51+
52+
ImGui::NewLine();
53+
ImGui::Separator();
54+
ImGui::NewLine();
55+
56+
drawLayoutAttributes(node);
57+
}
58+
59+
void DevTools::drawBasicAttributes(CCNode* node) {
3860
if (ImGui::Button("Deselect")) {
3961
return this->selectNode(nullptr);
4062
}
@@ -138,7 +160,9 @@ void DevTools::drawNodeAttributes(CCNode* node) {
138160
&CCNode::isIgnoreAnchorPointForPosition,
139161
&CCNode::ignoreAnchorPointForPosition
140162
);
141-
163+
}
164+
165+
void DevTools::drawColorAttributes(CCNode* node) {
142166
if (auto rgbaNode = typeinfo_cast<CCRGBAProtocol*>(node)) {
143167

144168
if (auto gradient = typeinfo_cast<CCLayerGradient*>(node)) {
@@ -194,14 +218,18 @@ void DevTools::drawNodeAttributes(CCNode* node) {
194218
ImGui::SameLine();
195219
checkbox("Cascade Opacity", rgbaNode, &CCRGBAProtocol::isCascadeOpacityEnabled, &CCRGBAProtocol::setCascadeOpacityEnabled);
196220
}
221+
}
197222

223+
void DevTools::drawLabelAttributes(CCNode* node) {
198224
if (auto labelNode = typeinfo_cast<CCLabelProtocol*>(node)) {
199225
std::string str = labelNode->getString();
200226
if (ImGui::InputText("Text", &str, 256)) {
201227
labelNode->setString(str.c_str());
202228
}
203229
}
204-
230+
}
231+
232+
void DevTools::drawAxisGapAttribute(CCNode* node) {
205233
if (auto gap = typeinfo_cast<AxisGap*>(node)){
206234
float axisGap = gap->getGap();
207235
if (ImGui::DragFloat("Axis Gap", &axisGap)) {
@@ -211,11 +239,9 @@ void DevTools::drawNodeAttributes(CCNode* node) {
211239
}
212240
}
213241
}
242+
}
214243

215-
ImGui::NewLine();
216-
ImGui::Separator();
217-
ImGui::NewLine();
218-
244+
void DevTools::drawTextureAttributes(CCNode* node) {
219245
if (auto textureProtocol = typeinfo_cast<CCTextureProtocol*>(node)) {
220246
if (auto texture = textureProtocol->getTexture()) {
221247
if (auto spriteNode = typeinfo_cast<CCSprite*>(node)) {
@@ -268,7 +294,9 @@ void DevTools::drawNodeAttributes(CCNode* node) {
268294
ImGui::Separator();
269295
ImGui::NewLine();
270296
}
271-
297+
}
298+
299+
void DevTools::drawMenuItemAttributes(CCNode* node) {
272300
if (auto menuItemNode = typeinfo_cast<CCMenuItem*>(node)) {
273301
const auto selector = menuItemNode->m_pfnSelector;
274302
if (!selector) {
@@ -311,7 +339,9 @@ void DevTools::drawNodeAttributes(CCNode* node) {
311339
ImGui::Separator();
312340
ImGui::NewLine();
313341
}
342+
}
314343

344+
void DevTools::drawLayoutOptionsAttributes(CCNode* node) {
315345
if (auto rawOpts = node->getLayoutOptions()) {
316346
ImGui::Text("Layout options: %s", typeid(*rawOpts).name());
317347

@@ -323,6 +353,7 @@ void DevTools::drawNodeAttributes(CCNode* node) {
323353
ImGui::SameLine();
324354
if (ImGui::Button(U8STR(FEATHER_TRASH_2 " Remove Layout Options"))) {
325355
node->setLayoutOptions(nullptr);
356+
return;
326357
}
327358
if (auto opts = typeinfo_cast<SimpleAxisLayoutOptions*>(rawOpts)) {
328359
bool updateLayout = false;
@@ -636,11 +667,9 @@ void DevTools::drawNodeAttributes(CCNode* node) {
636667
node->setLayoutOptions(AnchorLayoutOptions::create());
637668
}
638669
}
670+
}
639671

640-
ImGui::NewLine();
641-
ImGui::Separator();
642-
ImGui::NewLine();
643-
672+
void DevTools::drawLayoutAttributes(CCNode* node){
644673
if (auto rawLayout = node->getLayout()) {
645674
ImGui::Text("Layout: %s", typeid(*rawLayout).name());
646675

@@ -650,6 +679,7 @@ void DevTools::drawNodeAttributes(CCNode* node) {
650679
ImGui::SameLine();
651680
if (ImGui::Button(U8STR(FEATHER_TRASH_2 " Remove Layout"))) {
652681
node->setLayout(nullptr);
682+
return;
653683
}
654684
ImGui::SameLine();
655685
if (ImGui::Button(U8STR(FEATHER_PLUS " Add Test Child"))) {

0 commit comments

Comments
 (0)