From 4b707ae92f41c76037ea34e7c2f1c2b2fe358503 Mon Sep 17 00:00:00 2001 From: Matiiss <83066658+Matiiss@users.noreply.github.com> Date: Fri, 22 Sep 2023 15:21:04 +0300 Subject: [PATCH] Optimized `pgRect_FromObject` Modifying `RectExport_RectFromObject` to also check for the other type of rect and return an SDL_(F)Rect object earlier. --- src_c/rect.c | 6 ++++++ src_c/rect_impl.h | 26 ++++++++++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/src_c/rect.c b/src_c/rect.c index 91b1ea6b55..474eea2cd8 100644 --- a/src_c/rect.c +++ b/src_c/rect.c @@ -135,14 +135,17 @@ four_floats_from_obj(PyObject *obj, float *val1, float *val2, float *val3, #define RectExport_setsize pg_rect_setsize #define RectImport_primitiveType int #define RectImport_RectCheck pgRect_Check +#define RectImport_OtherRectCheck pgFRect_Check #define RectImport_RectCheckExact pgRect_CheckExact #define RectImport_innerRectStruct SDL_Rect +#define RectImport_otherInnerRectStruct SDL_FRect #define RectImport_innerPointStruct SDL_Point #define RectImport_fourPrimiviteFromObj four_ints_from_obj #define RectImport_primitiveFromObjIndex pg_IntFromObjIndex #define RectImport_twoPrimitivesFromObj pg_TwoIntsFromObj #define RectImport_PrimitiveFromObj pg_IntFromObj #define RectImport_RectObject pgRectObject +#define RectImport_OtherRectObject pgFRectObject #define RectImport_TypeObject pgRect_Type #define RectImport_IntersectRectAndLine SDL_IntersectRectAndLine #define RectImport_PyBuildValueFormat "i" @@ -245,14 +248,17 @@ four_floats_from_obj(PyObject *obj, float *val1, float *val2, float *val3, #define RectExport_setsize pg_frect_setsize #define RectImport_primitiveType float #define RectImport_RectCheck pgFRect_Check +#define RectImport_OtherRectCheck pgRect_Check #define RectImport_RectCheckExact pgFRect_CheckExact #define RectImport_innerRectStruct SDL_FRect +#define RectImport_otherInnerRectStruct SDL_Rect #define RectImport_innerPointStruct SDL_FPoint #define RectImport_fourPrimiviteFromObj four_floats_from_obj #define RectImport_primitiveFromObjIndex pg_FloatFromObjIndex #define RectImport_twoPrimitivesFromObj pg_TwoFloatsFromObj #define RectImport_PrimitiveFromObj pg_FloatFromObj #define RectImport_RectObject pgFRectObject +#define RectImport_OtherRectObject pgRectObject #define RectImport_IntersectRectAndLine PG_IntersectFRectAndLine #define RectImport_TypeObject pgFRect_Type #define RectImport_PyBuildValueFormat "f" diff --git a/src_c/rect_impl.h b/src_c/rect_impl.h index d01afa78da..cd592051f8 100644 --- a/src_c/rect_impl.h +++ b/src_c/rect_impl.h @@ -308,6 +308,9 @@ #ifndef RectImport_RectCheck #error RectImport_RectCheck needs to be Defined #endif +#ifndef RectImport_OtherRectCheck +#error RectImport_OtherRectCheck needs to be defined +#endif #ifndef RectImport_RectCheckExact #error RectImport_RectCheckExact needs to be Defined #endif @@ -317,6 +320,9 @@ #ifndef RectImport_innerRectStruct #error RectImport_innerRectStruct needs to be defined #endif +#ifndef RectImport_otherInnerRectStruct +#error RectImport_otherInnerRectStruct needs to be defined +#endif #ifndef RectImport_innerPointStruct #error RectImport_innerPointStruct needs to be defined #endif @@ -326,6 +332,9 @@ #ifndef RectImport_RectObject #error RectImport_RectObject needs to be defined #endif +#ifndef RectImport_OtherRectObject +#error RectImport_OtherRectObject needs to be defined +#endif #ifndef RectImport_TypeObject #error RectImport_TypeObject needs to be Defined #endif @@ -365,10 +374,13 @@ #define PrimitiveType RectImport_primitiveType #define RectObject RectImport_RectObject +#define OtherRectObject RectImport_OtherRectObject #define TypeObject RectImport_TypeObject #define InnerRect RectImport_innerRectStruct +#define OtherInnerRect RectImport_otherInnerRectStruct #define InnerPoint RectImport_innerPointStruct #define RectCheck RectImport_RectCheck +#define OtherRectCheck RectImport_OtherRectCheck #define RectFromObject RectExport_RectFromObject #define subtype_new4 RectExport_subtypeNew4 #define primitiveFromObjIndex RectImport_primitiveFromObjIndex @@ -594,6 +606,14 @@ RectExport_RectFromObject(PyObject *obj, InnerRect *temp) if (RectCheck(obj)) { return &((RectObject *)obj)->r; } + if (OtherRectCheck(obj)) { + OtherInnerRect rect = ((OtherRectObject *)obj)->r; + temp->x = (PrimitiveType)rect.x; + temp->y = (PrimitiveType)rect.y; + temp->w = (PrimitiveType)rect.w; + temp->h = (PrimitiveType)rect.h; + return temp; + } if (PySequence_Check(obj) && (length = PySequence_Length(obj)) > 0) { if (length == 4) { if (!primitiveFromObjIndex(obj, 0, &val)) { @@ -2769,8 +2789,10 @@ RectExport_iterator(RectObject *self) #undef RectImport_PrimitiveTypeAsPythonNumber #undef RectImport_primitiveType #undef RectImport_RectCheck +#undef RectImport_OtherRectCheck #undef RectImport_RectCheckExact #undef RectImport_innerRectStruct +#undef RectImport_otherInnerRectStruct #undef RectImport_innerPointStruct #undef RectImport_fourPrimiviteFromObj #undef RectImport_primitiveFromObjIndex @@ -2778,6 +2800,7 @@ RectExport_iterator(RectObject *self) #undef RectImport_PrimitiveFromObj #undef RectImport_IntersectRectAndLine #undef RectImport_RectObject +#undef RectImport_OtherRectObject #undef RectImport_TypeObject #undef RectImport_PrimitiveFromObj #undef RectImport_PyBuildValueFormat @@ -2785,10 +2808,13 @@ RectExport_iterator(RectObject *self) #undef PrimitiveType #undef RectObject +#undef OtherRectObject #undef TypeObject #undef InnerRect +#undef OtherInnerRect #undef InnerPoint #undef RectCheck +#undef OtherRectCheck #undef RectFromObject #undef subtype_new4 #undef primitiveFromObjIndex