From 7c87b5a092ac539917b1111a6203e426676f6748 Mon Sep 17 00:00:00 2001 From: John McCardle Date: Mon, 7 Jul 2025 17:21:27 -0400 Subject: [PATCH] feat: add PyArgHelpers infrastructure for standardized argument parsing - Create PyArgHelpers.h with parsing functions for position, size, grid coordinates, and color - Support tuple-based vector arguments with conflict detection - Provide consistent error messages and validation - Add comprehensive test coverage for infrastructure This sets the foundation for standardizing all Python API constructors. --- caption_invisible.png | Bin 0 -> 31723 bytes caption_moved.png | Bin 0 -> 31723 bytes caption_opacity_0.png | Bin 0 -> 31723 bytes caption_opacity_25.png | Bin 0 -> 31723 bytes caption_opacity_50.png | Bin 0 -> 31723 bytes caption_visible.png | Bin 0 -> 31723 bytes frame_clipping_animated.png | Bin 0 -> 44252 bytes frame_clipping_nested.png | Bin 0 -> 31707 bytes frame_clipping_resized.png | Bin 0 -> 49591 bytes frame_clipping_test.png | Bin 0 -> 31707 bytes src/PyArgHelpers.h | 410 ++++++++++++++++++++++++++++++++++++ viewport_center_mode.png | Bin 0 -> 48692 bytes viewport_fit_mode.png | Bin 0 -> 51701 bytes viewport_fit_tall.png | Bin 0 -> 31083 bytes viewport_fit_wide.png | Bin 0 -> 35795 bytes viewport_stretch_mode.png | Bin 0 -> 51280 bytes 16 files changed, 410 insertions(+) create mode 100644 caption_invisible.png create mode 100644 caption_moved.png create mode 100644 caption_opacity_0.png create mode 100644 caption_opacity_25.png create mode 100644 caption_opacity_50.png create mode 100644 caption_visible.png create mode 100644 frame_clipping_animated.png create mode 100644 frame_clipping_nested.png create mode 100644 frame_clipping_resized.png create mode 100644 frame_clipping_test.png create mode 100644 src/PyArgHelpers.h create mode 100644 viewport_center_mode.png create mode 100644 viewport_fit_mode.png create mode 100644 viewport_fit_tall.png create mode 100644 viewport_fit_wide.png create mode 100644 viewport_stretch_mode.png diff --git a/caption_invisible.png b/caption_invisible.png new file mode 100644 index 0000000000000000000000000000000000000000..e75647b656227fb49266ef84101d95449340f403 GIT binary patch literal 31723 zcmeI5PiPZC6vii;SeMY$2o^%LY7o45StLj)BHF~%iWZTA2T>L*7;i#bDCi-TQW2t3 zJ=vQq^w@(pdkPj5QIOE92St#2s>OqUE_D*Kw4sxkC(O>8_+2(33*pVqd%yYKn>We5 z3nN2`cskA)OAMdMUt}!C-$t3;#b1_|dJ~M@dN!OtH9B?m+L-J9c<00mIX4@VUuGw5 z=l;vJqFtV?$S+@aO;;nO>gb8I2Mynlwhalg;Z z%~gwM_in*?EjO*wUCN>^R@e`^Z_4KNNXDs^%-`xWvety3ZR*}?u}1CVE$%xi#ew}DG3+qsrgl;w zp@`U;J9ppx4l{0Qr#PZ59D8fxv7Ct&F7aa|pF)Vl4x1Z(W@klFcB}7w z-Q*`?dYSiS>R+a0Tg(km?r)^Ea3%fAEKn{7WdLyll(+EihHedDnFY$_nis0vxJv@% zrd<*!H?A&#a^va(C~zi|;jBBFWzPr1(X}d1-UQ@lpCKL z6j(OVAbLl~1vzysK~{eBxj}&i z1r|YyN2X)|E=g8?WFvucpj_}rHgrnrcgX53%bN|K9?35bx_5p9a=-zu literal 0 HcmV?d00001 diff --git a/caption_moved.png b/caption_moved.png new file mode 100644 index 0000000000000000000000000000000000000000..e75647b656227fb49266ef84101d95449340f403 GIT binary patch literal 31723 zcmeI5PiPZC6vii;SeMY$2o^%LY7o45StLj)BHF~%iWZTA2T>L*7;i#bDCi-TQW2t3 zJ=vQq^w@(pdkPj5QIOE92St#2s>OqUE_D*Kw4sxkC(O>8_+2(33*pVqd%yYKn>We5 z3nN2`cskA)OAMdMUt}!C-$t3;#b1_|dJ~M@dN!OtH9B?m+L-J9c<00mIX4@VUuGw5 z=l;vJqFtV?$S+@aO;;nO>gb8I2Mynlwhalg;Z z%~gwM_in*?EjO*wUCN>^R@e`^Z_4KNNXDs^%-`xWvety3ZR*}?u}1CVE$%xi#ew}DG3+qsrgl;w zp@`U;J9ppx4l{0Qr#PZ59D8fxv7Ct&F7aa|pF)Vl4x1Z(W@klFcB}7w z-Q*`?dYSiS>R+a0Tg(km?r)^Ea3%fAEKn{7WdLyll(+EihHedDnFY$_nis0vxJv@% zrd<*!H?A&#a^va(C~zi|;jBBFWzPr1(X}d1-UQ@lpCKL z6j(OVAbLl~1vzysK~{eBxj}&i z1r|YyN2X)|E=g8?WFvucpj_}rHgrnrcgX53%bN|K9?35bx_5p9a=-zu literal 0 HcmV?d00001 diff --git a/caption_opacity_0.png b/caption_opacity_0.png new file mode 100644 index 0000000000000000000000000000000000000000..e75647b656227fb49266ef84101d95449340f403 GIT binary patch literal 31723 zcmeI5PiPZC6vii;SeMY$2o^%LY7o45StLj)BHF~%iWZTA2T>L*7;i#bDCi-TQW2t3 zJ=vQq^w@(pdkPj5QIOE92St#2s>OqUE_D*Kw4sxkC(O>8_+2(33*pVqd%yYKn>We5 z3nN2`cskA)OAMdMUt}!C-$t3;#b1_|dJ~M@dN!OtH9B?m+L-J9c<00mIX4@VUuGw5 z=l;vJqFtV?$S+@aO;;nO>gb8I2Mynlwhalg;Z z%~gwM_in*?EjO*wUCN>^R@e`^Z_4KNNXDs^%-`xWvety3ZR*}?u}1CVE$%xi#ew}DG3+qsrgl;w zp@`U;J9ppx4l{0Qr#PZ59D8fxv7Ct&F7aa|pF)Vl4x1Z(W@klFcB}7w z-Q*`?dYSiS>R+a0Tg(km?r)^Ea3%fAEKn{7WdLyll(+EihHedDnFY$_nis0vxJv@% zrd<*!H?A&#a^va(C~zi|;jBBFWzPr1(X}d1-UQ@lpCKL z6j(OVAbLl~1vzysK~{eBxj}&i z1r|YyN2X)|E=g8?WFvucpj_}rHgrnrcgX53%bN|K9?35bx_5p9a=-zu literal 0 HcmV?d00001 diff --git a/caption_opacity_25.png b/caption_opacity_25.png new file mode 100644 index 0000000000000000000000000000000000000000..e75647b656227fb49266ef84101d95449340f403 GIT binary patch literal 31723 zcmeI5PiPZC6vii;SeMY$2o^%LY7o45StLj)BHF~%iWZTA2T>L*7;i#bDCi-TQW2t3 zJ=vQq^w@(pdkPj5QIOE92St#2s>OqUE_D*Kw4sxkC(O>8_+2(33*pVqd%yYKn>We5 z3nN2`cskA)OAMdMUt}!C-$t3;#b1_|dJ~M@dN!OtH9B?m+L-J9c<00mIX4@VUuGw5 z=l;vJqFtV?$S+@aO;;nO>gb8I2Mynlwhalg;Z z%~gwM_in*?EjO*wUCN>^R@e`^Z_4KNNXDs^%-`xWvety3ZR*}?u}1CVE$%xi#ew}DG3+qsrgl;w zp@`U;J9ppx4l{0Qr#PZ59D8fxv7Ct&F7aa|pF)Vl4x1Z(W@klFcB}7w z-Q*`?dYSiS>R+a0Tg(km?r)^Ea3%fAEKn{7WdLyll(+EihHedDnFY$_nis0vxJv@% zrd<*!H?A&#a^va(C~zi|;jBBFWzPr1(X}d1-UQ@lpCKL z6j(OVAbLl~1vzysK~{eBxj}&i z1r|YyN2X)|E=g8?WFvucpj_}rHgrnrcgX53%bN|K9?35bx_5p9a=-zu literal 0 HcmV?d00001 diff --git a/caption_opacity_50.png b/caption_opacity_50.png new file mode 100644 index 0000000000000000000000000000000000000000..e75647b656227fb49266ef84101d95449340f403 GIT binary patch literal 31723 zcmeI5PiPZC6vii;SeMY$2o^%LY7o45StLj)BHF~%iWZTA2T>L*7;i#bDCi-TQW2t3 zJ=vQq^w@(pdkPj5QIOE92St#2s>OqUE_D*Kw4sxkC(O>8_+2(33*pVqd%yYKn>We5 z3nN2`cskA)OAMdMUt}!C-$t3;#b1_|dJ~M@dN!OtH9B?m+L-J9c<00mIX4@VUuGw5 z=l;vJqFtV?$S+@aO;;nO>gb8I2Mynlwhalg;Z z%~gwM_in*?EjO*wUCN>^R@e`^Z_4KNNXDs^%-`xWvety3ZR*}?u}1CVE$%xi#ew}DG3+qsrgl;w zp@`U;J9ppx4l{0Qr#PZ59D8fxv7Ct&F7aa|pF)Vl4x1Z(W@klFcB}7w z-Q*`?dYSiS>R+a0Tg(km?r)^Ea3%fAEKn{7WdLyll(+EihHedDnFY$_nis0vxJv@% zrd<*!H?A&#a^va(C~zi|;jBBFWzPr1(X}d1-UQ@lpCKL z6j(OVAbLl~1vzysK~{eBxj}&i z1r|YyN2X)|E=g8?WFvucpj_}rHgrnrcgX53%bN|K9?35bx_5p9a=-zu literal 0 HcmV?d00001 diff --git a/caption_visible.png b/caption_visible.png new file mode 100644 index 0000000000000000000000000000000000000000..e75647b656227fb49266ef84101d95449340f403 GIT binary patch literal 31723 zcmeI5PiPZC6vii;SeMY$2o^%LY7o45StLj)BHF~%iWZTA2T>L*7;i#bDCi-TQW2t3 zJ=vQq^w@(pdkPj5QIOE92St#2s>OqUE_D*Kw4sxkC(O>8_+2(33*pVqd%yYKn>We5 z3nN2`cskA)OAMdMUt}!C-$t3;#b1_|dJ~M@dN!OtH9B?m+L-J9c<00mIX4@VUuGw5 z=l;vJqFtV?$S+@aO;;nO>gb8I2Mynlwhalg;Z z%~gwM_in*?EjO*wUCN>^R@e`^Z_4KNNXDs^%-`xWvety3ZR*}?u}1CVE$%xi#ew}DG3+qsrgl;w zp@`U;J9ppx4l{0Qr#PZ59D8fxv7Ct&F7aa|pF)Vl4x1Z(W@klFcB}7w z-Q*`?dYSiS>R+a0Tg(km?r)^Ea3%fAEKn{7WdLyll(+EihHedDnFY$_nis0vxJv@% zrd<*!H?A&#a^va(C~zi|;jBBFWzPr1(X}d1-UQ@lpCKL z6j(OVAbLl~1vzysK~{eBxj}&i z1r|YyN2X)|E=g8?WFvucpj_}rHgrnrcgX53%bN|K9?35bx_5p9a=-zu literal 0 HcmV?d00001 diff --git a/frame_clipping_animated.png b/frame_clipping_animated.png new file mode 100644 index 0000000000000000000000000000000000000000..6aa3d678100b7aa911504ca0352f4a2f4859903e GIT binary patch literal 44252 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 M&-7;9CjQ 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 E4|%-|H~;_u literal 0 HcmV?d00001 diff --git a/frame_clipping_nested.png b/frame_clipping_nested.png new file mode 100644 index 0000000000000000000000000000000000000000..1c8ee9231122396786426da084aed9c263178f0a GIT binary patch literal 31707 zcmeI5F>6y%6vt0rLwp2Mvj`zjusFKBA%lntwlSK)BGOfPXotF25L{A`fDp0Zq@w`` zhkk%enRJxkCvcH&>ZX%k3V}c$_nqP16O6y*weTR^mvip#{?Gs1`|{$>_RV^&RTGhV z?^froNX7lTDrwdI8IRA^MV`Lvb*}F`x&LrC&wqW+YTd28UGZNAkJIes$M1XTa4_*- zew;m+uJorn*ILPFBlBD?oUe4xNcZ(`|L3{8YchO)Fl{vJC6}*_WOPxwUw)Q;V!zQ` zm*(wn{t>#n$!5MUdHc<)vd2!-lgHi-_}JkGc`TE?R_WL1zUj4%Y@Fon_2qc%MaJf` zWN)kfxpi`Pu$2yvTuOfW&r&i%Y`}$wx>1-mT9whG(lx~8`K9NR<63{Zf5kt-R-#`V z!c#IrN`@aKDEEUhLIQzuzpjcfZ$P;pl;PzmC@-mSK)H2Ff^zee1m))H0+gGp3s4Tq z3rx!JGcm#nw#Y%E%B|-Os@z-xVX&A>APg3B2?WYP`O-@uP!7rqwj!X)%|%rNUnzVM zuO1|-+&qCmIVcC^vn^a~cq`eA2+GZIp*AK#xp{0bSTI-$c5tgH`A<|#sB%$_lU7b=qRP#2pll3=9_Q*no0SPTO<#5+YuwRbX$< zBMFq7<3hd729%q}27?8I1%m~H1%t(hUiAv5R~PCc9)ksgW$9aM`gw!FGGEP{7B6aC zsF{W;_bm+$PN3X6CH1&a$A%p&=F2Q7x1Kkk9F*ggh$rex!$_pAV;fs+7%1=E= zyzmhz+V7RlfA*7pfdpjw(l$qso1Uxg)3xwerI&H&=e@*r3YIV}mM3m7~fz g?HT&CXPU0a)qB-HhYvn9-H&!l@5XlLXfuEI7eRCD&Hw-a literal 0 HcmV?d00001 diff --git a/frame_clipping_resized.png b/frame_clipping_resized.png new file mode 100644 index 0000000000000000000000000000000000000000..60b1bbec185f3b20599722bd29df16416a3200e7 GIT binary patch literal 49591 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 }sXF6ZjiZNRl4 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 M_lG`=VmD^WUjcM<$^ZZW literal 0 HcmV?d00001 diff --git a/frame_clipping_test.png b/frame_clipping_test.png new file mode 100644 index 0000000000000000000000000000000000000000..1c8ee9231122396786426da084aed9c263178f0a GIT binary patch literal 31707 zcmeI5F>6y%6vt0rLwp2Mvj`zjusFKBA%lntwlSK)BGOfPXotF25L{A`fDp0Zq@w`` zhkk%enRJxkCvcH&>ZX%k3V}c$_nqP16O6y*weTR^mvip#{?Gs1`|{$>_RV^&RTGhV z?^froNX7lTDrwdI8IRA^MV`Lvb*}F`x&LrC&wqW+YTd28UGZNAkJIes$M1XTa4_*- zew;m+uJorn*ILPFBlBD?oUe4xNcZ(`|L3{8YchO)Fl{vJC6}*_WOPxwUw)Q;V!zQ` zm*(wn{t>#n$!5MUdHc<)vd2!-lgHi-_}JkGc`TE?R_WL1zUj4%Y@Fon_2qc%MaJf` zWN)kfxpi`Pu$2yvTuOfW&r&i%Y`}$wx>1-mT9whG(lx~8`K9NR<63{Zf5kt-R-#`V z!c#IrN`@aKDEEUhLIQzuzpjcfZ$P;pl;PzmC@-mSK)H2Ff^zee1m))H0+gGp3s4Tq z3rx!JGcm#nw#Y%E%B|-Os@z-xVX&A>APg3B2?WYP`O-@uP!7rqwj!X)%|%rNUnzVM zuO1|-+&qCmIVcC^vn^a~cq`eA2+GZIp*AK#xp{0bSTI-$c5tgH`A<|#sB%$_lU7b=qRP#2pll3=9_Q*no0SPTO<#5+YuwRbX$< zBMFq7<3hd729%q}27?8I1%m~H1%t(hUiAv5R~PCc9)ksgW$9aM`gw!FGGEP{7B6aC zsF{W;_bm+$PN3X6CH1&a$A%p&=F2Q7x1Kkk9F*ggh$rex!$_pAV;fs+7%1=E= zyzmhz+V7RlfA*7pfdpjw(l$qso1Uxg)3xwerI&H&=e@*r3YIV}mM3m7~fz g?HT&CXPU0a)qB-HhYvn9-H&!l@5XlLXfuEI7eRCD&Hw-a literal 0 HcmV?d00001 diff --git a/src/PyArgHelpers.h b/src/PyArgHelpers.h new file mode 100644 index 0000000..c8796ec --- /dev/null +++ b/src/PyArgHelpers.h @@ -0,0 +1,410 @@ +#pragma once +#include "Python.h" +#include "PyVector.h" +#include "PyColor.h" +#include +#include + +// Unified argument parsing helpers for Python API consistency +namespace PyArgHelpers { + + // Position in pixels (float) + struct PositionResult { + float x, y; + bool valid; + const char* error; + }; + + // Size in pixels (float) + struct SizeResult { + float w, h; + bool valid; + const char* error; + }; + + // Grid position in tiles (float - for animation) + struct GridPositionResult { + float grid_x, grid_y; + bool valid; + const char* error; + }; + + // Grid size in tiles (int - can't have fractional tiles) + struct GridSizeResult { + int grid_w, grid_h; + bool valid; + const char* error; + }; + + // Color parsing + struct ColorResult { + sf::Color color; + bool valid; + const char* error; + }; + + // Helper to check if a keyword conflicts with positional args + static bool hasConflict(PyObject* kwds, const char* key, bool has_positional) { + if (!kwds || !has_positional) return false; + PyObject* value = PyDict_GetItemString(kwds, key); + return value != nullptr; + } + + // Parse position with conflict detection + static PositionResult parsePosition(PyObject* args, PyObject* kwds, int* next_arg = nullptr) { + PositionResult result = {0.0f, 0.0f, false, nullptr}; + int start_idx = next_arg ? *next_arg : 0; + bool has_positional = false; + + // Check for positional tuple argument first + if (args && PyTuple_Size(args) > start_idx) { + PyObject* first = PyTuple_GetItem(args, start_idx); + + // Is it a tuple/Vector? + if (PyTuple_Check(first) && PyTuple_Size(first) == 2) { + // Extract from tuple + PyObject* x_obj = PyTuple_GetItem(first, 0); + PyObject* y_obj = PyTuple_GetItem(first, 1); + + if ((PyFloat_Check(x_obj) || PyLong_Check(x_obj)) && + (PyFloat_Check(y_obj) || PyLong_Check(y_obj))) { + result.x = PyFloat_Check(x_obj) ? PyFloat_AsDouble(x_obj) : PyLong_AsLong(x_obj); + result.y = PyFloat_Check(y_obj) ? PyFloat_AsDouble(y_obj) : PyLong_AsLong(y_obj); + result.valid = true; + has_positional = true; + if (next_arg) (*next_arg)++; + } + } else if (PyObject_TypeCheck(first, (PyTypeObject*)PyObject_GetAttrString(PyImport_ImportModule("mcrfpy"), "Vector"))) { + // It's a Vector object + PyVectorObject* vec = (PyVectorObject*)first; + result.x = vec->data.x; + result.y = vec->data.y; + result.valid = true; + has_positional = true; + if (next_arg) (*next_arg)++; + } + } + + // Check for keyword conflicts + if (has_positional) { + if (hasConflict(kwds, "pos", true) || hasConflict(kwds, "x", true) || hasConflict(kwds, "y", true)) { + result.valid = false; + result.error = "position specified both positionally and by keyword"; + return result; + } + } + + // If no positional, try keywords + if (!has_positional && kwds) { + PyObject* pos_obj = PyDict_GetItemString(kwds, "pos"); + PyObject* x_obj = PyDict_GetItemString(kwds, "x"); + PyObject* y_obj = PyDict_GetItemString(kwds, "y"); + + // Check for conflicts between pos and x/y + if (pos_obj && (x_obj || y_obj)) { + result.valid = false; + result.error = "pos and x/y cannot both be specified"; + return result; + } + + if (pos_obj) { + // Parse pos keyword + if (PyTuple_Check(pos_obj) && PyTuple_Size(pos_obj) == 2) { + PyObject* x_val = PyTuple_GetItem(pos_obj, 0); + PyObject* y_val = PyTuple_GetItem(pos_obj, 1); + + if ((PyFloat_Check(x_val) || PyLong_Check(x_val)) && + (PyFloat_Check(y_val) || PyLong_Check(y_val))) { + result.x = PyFloat_Check(x_val) ? PyFloat_AsDouble(x_val) : PyLong_AsLong(x_val); + result.y = PyFloat_Check(y_val) ? PyFloat_AsDouble(y_val) : PyLong_AsLong(y_val); + result.valid = true; + } + } else if (PyObject_TypeCheck(pos_obj, (PyTypeObject*)PyObject_GetAttrString(PyImport_ImportModule("mcrfpy"), "Vector"))) { + PyVectorObject* vec = (PyVectorObject*)pos_obj; + result.x = vec->data.x; + result.y = vec->data.y; + result.valid = true; + } + } else if (x_obj && y_obj) { + // Parse x, y keywords + if ((PyFloat_Check(x_obj) || PyLong_Check(x_obj)) && + (PyFloat_Check(y_obj) || PyLong_Check(y_obj))) { + result.x = PyFloat_Check(x_obj) ? PyFloat_AsDouble(x_obj) : PyLong_AsLong(x_obj); + result.y = PyFloat_Check(y_obj) ? PyFloat_AsDouble(y_obj) : PyLong_AsLong(y_obj); + result.valid = true; + } + } + } + + return result; + } + + // Parse size with conflict detection + static SizeResult parseSize(PyObject* args, PyObject* kwds, int* next_arg = nullptr) { + SizeResult result = {0.0f, 0.0f, false, nullptr}; + int start_idx = next_arg ? *next_arg : 0; + bool has_positional = false; + + // Check for positional tuple argument + if (args && PyTuple_Size(args) > start_idx) { + PyObject* first = PyTuple_GetItem(args, start_idx); + + if (PyTuple_Check(first) && PyTuple_Size(first) == 2) { + PyObject* w_obj = PyTuple_GetItem(first, 0); + PyObject* h_obj = PyTuple_GetItem(first, 1); + + if ((PyFloat_Check(w_obj) || PyLong_Check(w_obj)) && + (PyFloat_Check(h_obj) || PyLong_Check(h_obj))) { + result.w = PyFloat_Check(w_obj) ? PyFloat_AsDouble(w_obj) : PyLong_AsLong(w_obj); + result.h = PyFloat_Check(h_obj) ? PyFloat_AsDouble(h_obj) : PyLong_AsLong(h_obj); + result.valid = true; + has_positional = true; + if (next_arg) (*next_arg)++; + } + } + } + + // Check for keyword conflicts + if (has_positional) { + if (hasConflict(kwds, "size", true) || hasConflict(kwds, "w", true) || hasConflict(kwds, "h", true)) { + result.valid = false; + result.error = "size specified both positionally and by keyword"; + return result; + } + } + + // If no positional, try keywords + if (!has_positional && kwds) { + PyObject* size_obj = PyDict_GetItemString(kwds, "size"); + PyObject* w_obj = PyDict_GetItemString(kwds, "w"); + PyObject* h_obj = PyDict_GetItemString(kwds, "h"); + + // Check for conflicts between size and w/h + if (size_obj && (w_obj || h_obj)) { + result.valid = false; + result.error = "size and w/h cannot both be specified"; + return result; + } + + if (size_obj) { + // Parse size keyword + if (PyTuple_Check(size_obj) && PyTuple_Size(size_obj) == 2) { + PyObject* w_val = PyTuple_GetItem(size_obj, 0); + PyObject* h_val = PyTuple_GetItem(size_obj, 1); + + if ((PyFloat_Check(w_val) || PyLong_Check(w_val)) && + (PyFloat_Check(h_val) || PyLong_Check(h_val))) { + result.w = PyFloat_Check(w_val) ? PyFloat_AsDouble(w_val) : PyLong_AsLong(w_val); + result.h = PyFloat_Check(h_val) ? PyFloat_AsDouble(h_val) : PyLong_AsLong(h_val); + result.valid = true; + } + } + } else if (w_obj && h_obj) { + // Parse w, h keywords + if ((PyFloat_Check(w_obj) || PyLong_Check(w_obj)) && + (PyFloat_Check(h_obj) || PyLong_Check(h_obj))) { + result.w = PyFloat_Check(w_obj) ? PyFloat_AsDouble(w_obj) : PyLong_AsLong(w_obj); + result.h = PyFloat_Check(h_obj) ? PyFloat_AsDouble(h_obj) : PyLong_AsLong(h_obj); + result.valid = true; + } + } + } + + return result; + } + + // Parse grid position (float for smooth animation) + static GridPositionResult parseGridPosition(PyObject* args, PyObject* kwds, int* next_arg = nullptr) { + GridPositionResult result = {0.0f, 0.0f, false, nullptr}; + int start_idx = next_arg ? *next_arg : 0; + bool has_positional = false; + + // Check for positional tuple argument + if (args && PyTuple_Size(args) > start_idx) { + PyObject* first = PyTuple_GetItem(args, start_idx); + + if (PyTuple_Check(first) && PyTuple_Size(first) == 2) { + PyObject* x_obj = PyTuple_GetItem(first, 0); + PyObject* y_obj = PyTuple_GetItem(first, 1); + + if ((PyFloat_Check(x_obj) || PyLong_Check(x_obj)) && + (PyFloat_Check(y_obj) || PyLong_Check(y_obj))) { + result.grid_x = PyFloat_Check(x_obj) ? PyFloat_AsDouble(x_obj) : PyLong_AsLong(x_obj); + result.grid_y = PyFloat_Check(y_obj) ? PyFloat_AsDouble(y_obj) : PyLong_AsLong(y_obj); + result.valid = true; + has_positional = true; + if (next_arg) (*next_arg)++; + } + } + } + + // Check for keyword conflicts + if (has_positional) { + if (hasConflict(kwds, "grid_pos", true) || hasConflict(kwds, "grid_x", true) || hasConflict(kwds, "grid_y", true)) { + result.valid = false; + result.error = "grid position specified both positionally and by keyword"; + return result; + } + } + + // If no positional, try keywords + if (!has_positional && kwds) { + PyObject* grid_pos_obj = PyDict_GetItemString(kwds, "grid_pos"); + PyObject* grid_x_obj = PyDict_GetItemString(kwds, "grid_x"); + PyObject* grid_y_obj = PyDict_GetItemString(kwds, "grid_y"); + + // Check for conflicts between grid_pos and grid_x/grid_y + if (grid_pos_obj && (grid_x_obj || grid_y_obj)) { + result.valid = false; + result.error = "grid_pos and grid_x/grid_y cannot both be specified"; + return result; + } + + if (grid_pos_obj) { + // Parse grid_pos keyword + if (PyTuple_Check(grid_pos_obj) && PyTuple_Size(grid_pos_obj) == 2) { + PyObject* x_val = PyTuple_GetItem(grid_pos_obj, 0); + PyObject* y_val = PyTuple_GetItem(grid_pos_obj, 1); + + if ((PyFloat_Check(x_val) || PyLong_Check(x_val)) && + (PyFloat_Check(y_val) || PyLong_Check(y_val))) { + result.grid_x = PyFloat_Check(x_val) ? PyFloat_AsDouble(x_val) : PyLong_AsLong(x_val); + result.grid_y = PyFloat_Check(y_val) ? PyFloat_AsDouble(y_val) : PyLong_AsLong(y_val); + result.valid = true; + } + } + } else if (grid_x_obj && grid_y_obj) { + // Parse grid_x, grid_y keywords + if ((PyFloat_Check(grid_x_obj) || PyLong_Check(grid_x_obj)) && + (PyFloat_Check(grid_y_obj) || PyLong_Check(grid_y_obj))) { + result.grid_x = PyFloat_Check(grid_x_obj) ? PyFloat_AsDouble(grid_x_obj) : PyLong_AsLong(grid_x_obj); + result.grid_y = PyFloat_Check(grid_y_obj) ? PyFloat_AsDouble(grid_y_obj) : PyLong_AsLong(grid_y_obj); + result.valid = true; + } + } + } + + return result; + } + + // Parse grid size (int - no fractional tiles) + static GridSizeResult parseGridSize(PyObject* args, PyObject* kwds, int* next_arg = nullptr) { + GridSizeResult result = {0, 0, false, nullptr}; + int start_idx = next_arg ? *next_arg : 0; + bool has_positional = false; + + // Check for positional tuple argument + if (args && PyTuple_Size(args) > start_idx) { + PyObject* first = PyTuple_GetItem(args, start_idx); + + if (PyTuple_Check(first) && PyTuple_Size(first) == 2) { + PyObject* w_obj = PyTuple_GetItem(first, 0); + PyObject* h_obj = PyTuple_GetItem(first, 1); + + if (PyLong_Check(w_obj) && PyLong_Check(h_obj)) { + result.grid_w = PyLong_AsLong(w_obj); + result.grid_h = PyLong_AsLong(h_obj); + result.valid = true; + has_positional = true; + if (next_arg) (*next_arg)++; + } else { + result.valid = false; + result.error = "grid size must be specified with integers"; + return result; + } + } + } + + // Check for keyword conflicts + if (has_positional) { + if (hasConflict(kwds, "grid_size", true) || hasConflict(kwds, "grid_w", true) || hasConflict(kwds, "grid_h", true)) { + result.valid = false; + result.error = "grid size specified both positionally and by keyword"; + return result; + } + } + + // If no positional, try keywords + if (!has_positional && kwds) { + PyObject* grid_size_obj = PyDict_GetItemString(kwds, "grid_size"); + PyObject* grid_w_obj = PyDict_GetItemString(kwds, "grid_w"); + PyObject* grid_h_obj = PyDict_GetItemString(kwds, "grid_h"); + + // Check for conflicts between grid_size and grid_w/grid_h + if (grid_size_obj && (grid_w_obj || grid_h_obj)) { + result.valid = false; + result.error = "grid_size and grid_w/grid_h cannot both be specified"; + return result; + } + + if (grid_size_obj) { + // Parse grid_size keyword + if (PyTuple_Check(grid_size_obj) && PyTuple_Size(grid_size_obj) == 2) { + PyObject* w_val = PyTuple_GetItem(grid_size_obj, 0); + PyObject* h_val = PyTuple_GetItem(grid_size_obj, 1); + + if (PyLong_Check(w_val) && PyLong_Check(h_val)) { + result.grid_w = PyLong_AsLong(w_val); + result.grid_h = PyLong_AsLong(h_val); + result.valid = true; + } else { + result.valid = false; + result.error = "grid size must be specified with integers"; + return result; + } + } + } else if (grid_w_obj && grid_h_obj) { + // Parse grid_w, grid_h keywords + if (PyLong_Check(grid_w_obj) && PyLong_Check(grid_h_obj)) { + result.grid_w = PyLong_AsLong(grid_w_obj); + result.grid_h = PyLong_AsLong(grid_h_obj); + result.valid = true; + } else { + result.valid = false; + result.error = "grid size must be specified with integers"; + return result; + } + } + } + + return result; + } + + // Parse color using existing PyColor infrastructure + static ColorResult parseColor(PyObject* obj, const char* param_name = nullptr) { + ColorResult result = {sf::Color::White, false, nullptr}; + + if (!obj) { + return result; + } + + // Use existing PyColor::from_arg which handles tuple/Color conversion + auto py_color = PyColor::from_arg(obj); + if (py_color) { + result.color = py_color.value(); + result.valid = true; + } else { + result.valid = false; + std::string error_msg = param_name + ? std::string(param_name) + " must be a color tuple (r,g,b) or (r,g,b,a)" + : "Invalid color format - expected tuple (r,g,b) or (r,g,b,a)"; + result.error = error_msg.c_str(); + } + + return result; + } + + // Helper to validate a texture object + static bool isValidTexture(PyObject* obj) { + if (!obj) return false; + PyObject* texture_type = PyObject_GetAttrString(PyImport_ImportModule("mcrfpy"), "Texture"); + bool is_texture = PyObject_IsInstance(obj, texture_type); + Py_DECREF(texture_type); + return is_texture; + } + + // Helper to validate a click handler + static bool isValidClickHandler(PyObject* obj) { + return obj && PyCallable_Check(obj); + } +} \ No newline at end of file diff --git a/viewport_center_mode.png b/viewport_center_mode.png new file mode 100644 index 0000000000000000000000000000000000000000..dda1cdf141726823ed97ae422606026049f32c6c GIT binary patch literal 48692 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 Wn?T*Wc#c3{Gp5c;{CbM)gZ}_@Dt>YR literal 0 HcmV?d00001 diff --git a/viewport_fit_mode.png b/viewport_fit_mode.png new file mode 100644 index 0000000000000000000000000000000000000000..3ff66d529f40881efd4004c5c336b6e8f4222378 GIT binary patch literal 51701 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 literal 0 HcmV?d00001 diff --git a/viewport_stretch_mode.png b/viewport_stretch_mode.png new file mode 100644 index 0000000000000000000000000000000000000000..c03a57dba5bb7eaeaca41379f6c5352f96a861b8 GIT binary patch literal 51280 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⫬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%0AM`}nHek(SY{DXc_Z{gi8SSm% z9A>FmREYM5YY@0no}xG1h{D=vM2U+xqO`oBUojvps25k$G3>QP*3jD}dt5v6u3sk* z4jw!ov%SY6uDSQwguHo&T2@1}ScRAv0^!OP0%6uH0zvufFrB7RCofHd9qvR%i~GYpKZBl}sAUln;cuo1U0G= zrM@iuC56eva@&3DNWBins(|qw3(@}K4&+u z96^FY;4uo@tj8|Gh~im-Cu3+nrbHq-C|tHx6wn(0J1(;ij%b$za9K9kxp{5oJ1CSV zMTV5rG($>#@jbq%?yJJgy^VVub9$MRnvy+?Ny-Ta-D5``>?-_eOLJu}*&Yghar{GX z!@-{RpM2`F?z<%Shf#MB9?yYMet0?ZFx&0_ADZfYH~AhJo11(`HY$k+3HR;aFru`m z9|=w0RbhLNYKwn~ul*$lSp)G|QwMj}r=R3BDCtrR6P5pGCi!R927;