Skip to content

Commit e590839

Browse files
author
Roberto De Ioris
committed
first round of FGeometry implementation
1 parent 028f5a5 commit e590839

3 files changed

Lines changed: 86 additions & 1 deletion

File tree

Source/UnrealEnginePython/Private/PyUserWidget.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33

44
#include "PythonDelegate.h"
55

6+
#include "Slate/UEPyFGeometry.h"
7+
68
bool UPyUserWidget::Initialize()
79
{
810
if (!Super::Initialize())
@@ -112,7 +114,7 @@ void UPyUserWidget::NativeTick(const FGeometry & MyGeometry, float InDeltaTime)
112114
if (!PyObject_HasAttrString(py_user_widget_instance, (char *)"tick"))
113115
return;
114116

115-
PyObject *ret = PyObject_CallMethod(py_user_widget_instance, (char *)"tick", (char *)"Of", py_ue_new_uscriptstruct(FGeometry::StaticStruct(), (uint8 *) &MyGeometry), InDeltaTime);
117+
PyObject *ret = PyObject_CallMethod(py_user_widget_instance, (char *)"tick", (char *)"Of", py_ue_new_fgeometry(MyGeometry), InDeltaTime);
116118
if (!ret) {
117119
unreal_engine_py_log_error();
118120
return;
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
#include "UnrealEnginePythonPrivatePCH.h"
2+
3+
#include "UEPyFGeometry.h"
4+
5+
static PyMethodDef ue_PyFGeometry_methods[] = {
6+
{ NULL } /* Sentinel */
7+
};
8+
9+
static PyObject *ue_PyFGeometry_str(ue_PyFGeometry *self)
10+
{
11+
return PyUnicode_FromFormat("<unreal_engine.FGeometry '%s'>",
12+
TCHAR_TO_UTF8(*self->geometry.ToString()));
13+
}
14+
15+
static PyTypeObject ue_PyFGeometryType = {
16+
PyVarObject_HEAD_INIT(NULL, 0)
17+
"unreal_engine.FGeometry", /* tp_name */
18+
sizeof(ue_PyFGeometry), /* tp_basicsize */
19+
0, /* tp_itemsize */
20+
0, /* tp_dealloc */
21+
0, /* tp_print */
22+
0, /* tp_getattr */
23+
0, /* tp_setattr */
24+
0, /* tp_reserved */
25+
0, /* tp_repr */
26+
0, /* tp_as_number */
27+
0, /* tp_as_sequence */
28+
0, /* tp_as_mapping */
29+
0, /* tp_hash */
30+
0, /* tp_call */
31+
(reprfunc)ue_PyFGeometry_str, /* tp_str */
32+
0, /* tp_getattro */
33+
0, /* tp_setattro */
34+
0, /* tp_as_buffer */
35+
Py_TPFLAGS_DEFAULT, /* tp_flags */
36+
"Unreal Engine FGeometry", /* tp_doc */
37+
0, /* tp_traverse */
38+
0, /* tp_clear */
39+
0, /* tp_richcompare */
40+
0, /* tp_weaklistoffset */
41+
0, /* tp_iter */
42+
0, /* tp_iternext */
43+
ue_PyFGeometry_methods, /* tp_methods */
44+
};
45+
46+
void ue_python_init_fgeometry(PyObject *ue_module) {
47+
ue_PyFGeometryType.tp_new = PyType_GenericNew;
48+
49+
if (PyType_Ready(&ue_PyFGeometryType) < 0)
50+
return;
51+
52+
Py_INCREF(&ue_PyFGeometryType);
53+
PyModule_AddObject(ue_module, "FGeometry", (PyObject *)&ue_PyFGeometryType);
54+
}
55+
56+
ue_PyFGeometry *py_ue_is_fgeometry(PyObject *obj) {
57+
if (!PyObject_IsInstance(obj, (PyObject *)&ue_PyFGeometryType))
58+
return nullptr;
59+
return (ue_PyFGeometry *)obj;
60+
}
61+
62+
PyObject *py_ue_new_fgeometry(FGeometry geometry) {
63+
ue_PyFGeometry *ret = (ue_PyFGeometry *)PyObject_New(ue_PyFGeometry, &ue_PyFGeometryType);
64+
ret->geometry = geometry;
65+
return (PyObject *)ret;
66+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
#pragma once
2+
3+
#include "UnrealEnginePython.h"
4+
5+
#include "Runtime/SlateCore/Public/Layout/Geometry.h"
6+
7+
typedef struct {
8+
PyObject_HEAD
9+
/* Type-specific fields go here. */
10+
FGeometry geometry;
11+
} ue_PyFGeometry;
12+
13+
void ue_python_init_fgeometry(PyObject *);
14+
15+
ue_PyFGeometry *py_ue_is_fgeometry(PyObject *);
16+
17+
PyObject *py_ue_new_fgeometry(FGeometry);

0 commit comments

Comments
 (0)