From 52a655399eddb00d3cc914cb8ce333104ad5d3f0 Mon Sep 17 00:00:00 2001 From: John McCardle Date: Thu, 27 Nov 2025 22:31:53 -0500 Subject: [PATCH] refactor: Rename click property to on_click (closes #139) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Breaking change: callback property standardized to on_* pattern. - `drawable.click` → `drawable.on_click` Updated all C++ bindings (8 files) and Python test usages. Note: src/scripts changes tracked separately (in .gitignore). This establishes the naming pattern for future callbacks: on_click, on_enter, on_exit, on_move, on_key, etc. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- src/PyDrawable.cpp | 4 ++-- src/UIArc.cpp | 2 +- src/UICaption.cpp | 4 ++-- src/UICircle.cpp | 2 +- src/UIFrame.cpp | 4 ++-- src/UIGrid.cpp | 4 ++-- src/UILine.cpp | 4 ++-- src/UISprite.cpp | 4 ++-- src/scripts/game.py | 2 +- src/scripts/text_input_widget_improved.py | 2 +- tests/unit/WORKING_automation_test_example.py | 2 +- tests/unit/ui_Frame_test_detailed.py | 6 +++--- 12 files changed, 20 insertions(+), 20 deletions(-) diff --git a/src/PyDrawable.cpp b/src/PyDrawable.cpp index 2fe0e93..1931626 100644 --- a/src/PyDrawable.cpp +++ b/src/PyDrawable.cpp @@ -99,8 +99,8 @@ static int PyDrawable_set_opacity(PyDrawableObject* self, PyObject* value, void* // GetSetDef array for properties static PyGetSetDef PyDrawable_getsetters[] = { - {"click", (getter)PyDrawable_get_click, (setter)PyDrawable_set_click, - MCRF_PROPERTY(click, + {"on_click", (getter)PyDrawable_get_click, (setter)PyDrawable_set_click, + MCRF_PROPERTY(on_click, "Callable executed when object is clicked. " "Function receives (x, y) coordinates of click." ), NULL}, diff --git a/src/UIArc.cpp b/src/UIArc.cpp index fbb9339..ce8d450 100644 --- a/src/UIArc.cpp +++ b/src/UIArc.cpp @@ -404,7 +404,7 @@ PyGetSetDef UIArc::getsetters[] = { "Arc color", NULL}, {"thickness", (getter)UIArc::get_thickness, (setter)UIArc::set_thickness, "Line thickness", NULL}, - {"click", (getter)UIDrawable::get_click, (setter)UIDrawable::set_click, + {"on_click", (getter)UIDrawable::get_click, (setter)UIDrawable::set_click, "Callable executed when arc is clicked.", (void*)PyObjectsEnum::UIARC}, {"z_index", (getter)UIDrawable::get_int, (setter)UIDrawable::set_int, "Z-order for rendering (lower values rendered first).", (void*)PyObjectsEnum::UIARC}, diff --git a/src/UICaption.cpp b/src/UICaption.cpp index 43afa57..aa3810f 100644 --- a/src/UICaption.cpp +++ b/src/UICaption.cpp @@ -273,8 +273,8 @@ PyGetSetDef UICaption::getsetters[] = { //{"children", (getter)PyUIFrame_get_children, NULL, "UICollection of objects on top of this one", NULL}, {"text", (getter)UICaption::get_text, (setter)UICaption::set_text, "The text displayed", NULL}, {"font_size", (getter)UICaption::get_float_member, (setter)UICaption::set_float_member, "Font size (integer) in points", (void*)5}, - {"click", (getter)UIDrawable::get_click, (setter)UIDrawable::set_click, - MCRF_PROPERTY(click, + {"on_click", (getter)UIDrawable::get_click, (setter)UIDrawable::set_click, + MCRF_PROPERTY(on_click, "Callable executed when object is clicked. " "Function receives (x, y) coordinates of click." ), (void*)PyObjectsEnum::UICAPTION}, diff --git a/src/UICircle.cpp b/src/UICircle.cpp index a834d97..6236e38 100644 --- a/src/UICircle.cpp +++ b/src/UICircle.cpp @@ -360,7 +360,7 @@ PyGetSetDef UICircle::getsetters[] = { "Outline color of the circle", NULL}, {"outline", (getter)UICircle::get_outline, (setter)UICircle::set_outline, "Outline thickness (0 for no outline)", NULL}, - {"click", (getter)UIDrawable::get_click, (setter)UIDrawable::set_click, + {"on_click", (getter)UIDrawable::get_click, (setter)UIDrawable::set_click, "Callable executed when circle is clicked.", (void*)PyObjectsEnum::UICIRCLE}, {"z_index", (getter)UIDrawable::get_int, (setter)UIDrawable::set_int, "Z-order for rendering (lower values rendered first).", (void*)PyObjectsEnum::UICIRCLE}, diff --git a/src/UIFrame.cpp b/src/UIFrame.cpp index 75cadd3..9de4ada 100644 --- a/src/UIFrame.cpp +++ b/src/UIFrame.cpp @@ -400,8 +400,8 @@ PyGetSetDef UIFrame::getsetters[] = { {"fill_color", (getter)UIFrame::get_color_member, (setter)UIFrame::set_color_member, "Fill color of the rectangle", (void*)0}, {"outline_color", (getter)UIFrame::get_color_member, (setter)UIFrame::set_color_member, "Outline color of the rectangle", (void*)1}, {"children", (getter)UIFrame::get_children, NULL, "UICollection of objects on top of this one", NULL}, - {"click", (getter)UIDrawable::get_click, (setter)UIDrawable::set_click, - MCRF_PROPERTY(click, + {"on_click", (getter)UIDrawable::get_click, (setter)UIDrawable::set_click, + MCRF_PROPERTY(on_click, "Callable executed when object is clicked. " "Function receives (x, y) coordinates of click." ), (void*)PyObjectsEnum::UIFRAME}, diff --git a/src/UIGrid.cpp b/src/UIGrid.cpp index 4811d54..5e70ae5 100644 --- a/src/UIGrid.cpp +++ b/src/UIGrid.cpp @@ -1478,8 +1478,8 @@ PyGetSetDef UIGrid::getsetters[] = { {"center_y", (getter)UIGrid::get_float_member, (setter)UIGrid::set_float_member, "center of the view Y-coordinate", (void*)5}, {"zoom", (getter)UIGrid::get_float_member, (setter)UIGrid::set_float_member, "zoom factor for displaying the Grid", (void*)6}, - {"click", (getter)UIDrawable::get_click, (setter)UIDrawable::set_click, - MCRF_PROPERTY(click, + {"on_click", (getter)UIDrawable::get_click, (setter)UIDrawable::set_click, + MCRF_PROPERTY(on_click, "Callable executed when object is clicked. " "Function receives (x, y) coordinates of click." ), (void*)PyObjectsEnum::UIGRID}, diff --git a/src/UILine.cpp b/src/UILine.cpp index 24ed39a..a504c24 100644 --- a/src/UILine.cpp +++ b/src/UILine.cpp @@ -422,8 +422,8 @@ PyGetSetDef UILine::getsetters[] = { MCRF_PROPERTY(color, "Line color as a Color object."), NULL}, {"thickness", (getter)UILine::get_thickness, (setter)UILine::set_thickness, MCRF_PROPERTY(thickness, "Line thickness in pixels."), NULL}, - {"click", (getter)UIDrawable::get_click, (setter)UIDrawable::set_click, - MCRF_PROPERTY(click, "Callable executed when line is clicked."), + {"on_click", (getter)UIDrawable::get_click, (setter)UIDrawable::set_click, + MCRF_PROPERTY(on_click, "Callable executed when line is clicked."), (void*)PyObjectsEnum::UILINE}, {"z_index", (getter)UIDrawable::get_int, (setter)UIDrawable::set_int, MCRF_PROPERTY(z_index, "Z-order for rendering (lower values rendered first)."), diff --git a/src/UISprite.cpp b/src/UISprite.cpp index d46331e..a9c0ac5 100644 --- a/src/UISprite.cpp +++ b/src/UISprite.cpp @@ -339,8 +339,8 @@ PyGetSetDef UISprite::getsetters[] = { {"sprite_index", (getter)UISprite::get_int_member, (setter)UISprite::set_int_member, "Which sprite on the texture is shown", NULL}, {"sprite_number", (getter)UISprite::get_int_member, (setter)UISprite::set_int_member, "Sprite index (DEPRECATED: use sprite_index instead)", NULL}, {"texture", (getter)UISprite::get_texture, (setter)UISprite::set_texture, "Texture object", NULL}, - {"click", (getter)UIDrawable::get_click, (setter)UIDrawable::set_click, - MCRF_PROPERTY(click, + {"on_click", (getter)UIDrawable::get_click, (setter)UIDrawable::set_click, + MCRF_PROPERTY(on_click, "Callable executed when object is clicked. " "Function receives (x, y) coordinates of click." ), (void*)PyObjectsEnum::UISPRITE}, diff --git a/src/scripts/game.py b/src/scripts/game.py index 8257c0a..cc2fcb0 100644 --- a/src/scripts/game.py +++ b/src/scripts/game.py @@ -437,7 +437,7 @@ class SweetButton: # box w/ drop shadow self.shadow_offset = shadow_offset self.base_frame = mcrfpy.Frame(pos=(x, y), size=(box_width+shadow_offset, box_height), fill_color=(0, 0, 0, 255)) - self.base_frame.click = self.do_click + self.base_frame.on_click = self.do_click # drop shadow won't need configured, append directly if shadow: diff --git a/src/scripts/text_input_widget_improved.py b/src/scripts/text_input_widget_improved.py index 7f7f7b6..4fc5198 100644 --- a/src/scripts/text_input_widget_improved.py +++ b/src/scripts/text_input_widget_improved.py @@ -127,7 +127,7 @@ class TextInput: self.parent_frame.children.append(self.frame) # Click handler on the input frame - self.frame.click = self._on_click + self.frame.on_click = self._on_click def _on_click(self, x, y, button, state): """Handle mouse clicks""" diff --git a/tests/unit/WORKING_automation_test_example.py b/tests/unit/WORKING_automation_test_example.py index 58b3a8e..bb22673 100644 --- a/tests/unit/WORKING_automation_test_example.py +++ b/tests/unit/WORKING_automation_test_example.py @@ -68,7 +68,7 @@ frame.children.append(caption) def frame_clicked(x, y, button): print(f"Frame clicked at ({x}, {y}) with button {button}") -frame.click = frame_clicked +frame.on_click = frame_clicked print("Scene setup complete. Setting timer for automation tests...") diff --git a/tests/unit/ui_Frame_test_detailed.py b/tests/unit/ui_Frame_test_detailed.py index 695994f..3058d70 100644 --- a/tests/unit/ui_Frame_test_detailed.py +++ b/tests/unit/ui_Frame_test_detailed.py @@ -67,7 +67,7 @@ def test_issue_42_click_callback(): try: frame1 = mcrfpy.Frame(10, 10, 200, 150) ui.append(frame1) - frame1.click = correct_callback + frame1.on_click = correct_callback print("✓ Click callback with correct signature assigned successfully") except Exception as e: print(f"✗ Failed to assign correct callback: {type(e).__name__}: {e}") @@ -80,7 +80,7 @@ def test_issue_42_click_callback(): try: frame2 = mcrfpy.Frame(220, 10, 200, 150) ui.append(frame2) - frame2.click = wrong_callback_no_args + frame2.on_click = wrong_callback_no_args print("✓ Click callback with no args assigned (will fail at runtime per issue #42)") except Exception as e: print(f"✗ Failed to assign callback: {type(e).__name__}: {e}") @@ -93,7 +93,7 @@ def test_issue_42_click_callback(): try: frame3 = mcrfpy.Frame(10, 170, 200, 150) ui.append(frame3) - frame3.click = wrong_callback_few_args + frame3.on_click = wrong_callback_few_args print("✓ Click callback with 2 args assigned (will fail at runtime per issue #42)") except Exception as e: print(f"✗ Failed to assign callback: {type(e).__name__}: {e}")