Unsaved changes from last night
This commit is contained in:
parent
2cac6f03c6
commit
79090b553f
|
@ -5,29 +5,30 @@ PyColor::PyColor()
|
|||
{
|
||||
}
|
||||
|
||||
PyObject* PyTexture::pyObject()
|
||||
PyObject* PyColor::pyObject()
|
||||
{
|
||||
PyObject* obj = PyType_GenericAlloc(&mcrfpydef::PyColorType, 0);
|
||||
try {
|
||||
((PyTextureObject*)obj)->data = shared_from_this();
|
||||
}
|
||||
catch (std::bad_weak_ptr& e)
|
||||
{
|
||||
std::cout << "Bad weak ptr: shared_from_this() failed in PyTexture::pyObject(); did you create a PyTexture outside of std::make_shared? enjoy your segfault, soon!" << std::endl;
|
||||
}
|
||||
// TODO - shared_from_this will raise an exception if the object does not have a shared pointer. Constructor should be made private; write a factory function
|
||||
((PyColorObject*)obj.data = data;
|
||||
return obj;
|
||||
}
|
||||
|
||||
Py_hash_t PyTexture::hash(PyObject* obj)
|
||||
Py_hash_t PyColor::hash(PyObject* obj)
|
||||
{
|
||||
auto self = (PyTextureObject*)obj;
|
||||
return reinterpret_cast<Py_hash_t>(self->data.get());
|
||||
Py_hash_t value = 0;
|
||||
value += obj.data.r;
|
||||
value << 8; value += obj.data.g;
|
||||
value << 8; value += obj.data.b;
|
||||
value << 8; value += obj.data.a;
|
||||
value << (sizeof(*UIDrawable) * 8);
|
||||
if (auto ptr = self.data.parent.lock())
|
||||
value += reinterpret_cast<Py_hash_t>(ptr);
|
||||
return value;
|
||||
}
|
||||
|
||||
int PyTexture::init(PyTextureObject* self, PyObject* args, PyObject* kwds)
|
||||
int PyColor::init(PyColorObject* self, PyObject* args, PyObject* kwds)
|
||||
{
|
||||
static const char* keywords[] = { "filename", "sprite_width", "sprite_height", nullptr };
|
||||
static const char* keywords[] = { "r", "g", "b", "a", nullptr };
|
||||
char* filename;
|
||||
int sprite_width, sprite_height;
|
||||
if (!PyArg_ParseTupleAndKeywords(args, kwds, "sii", const_cast<char**>(keywords), &filename, &sprite_width, &sprite_height))
|
||||
|
|
|
@ -20,11 +20,53 @@ class PyColor
|
|||
private:
|
||||
_PyColorData data;
|
||||
public:
|
||||
void set(sf::Color);
|
||||
sf::Color get();
|
||||
PyObject* pyObject();
|
||||
static Py_hash_t hash(PyObject*);
|
||||
static int init(PyColorObject*, PyObject*, PyObject*);
|
||||
static PyObject* pynew(PyTypeObject* type, PyObject* args=NULL, PyObject* kwds=NULL);
|
||||
|
||||
static PyGetSetDef getsetters[] = {
|
||||
{"r", (getter)PyColor_get_member, (setter)PyColor_set_member, "Red component", (void*)0},
|
||||
{"g", (getter)PyColor_get_member, (setter)PyColor_set_member, "Green component", (void*)1},
|
||||
{"b", (getter)PyColor_get_member, (setter)PyColor_set_member, "Blue component", (void*)2},
|
||||
{"a", (getter)PyColor_get_member, (setter)PyColor_set_member, "Alpha component", (void*)3},
|
||||
{NULL}
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
|
||||
// static PyTypeObject PyColorType = {
|
||||
// //PyVarObject_HEAD_INIT(NULL, 0)
|
||||
// .tp_name = "mcrfpy.Color",
|
||||
// .tp_basicsize = sizeof(PyColorObject),
|
||||
// .tp_itemsize = 0,
|
||||
// .tp_dealloc = (destructor)[](PyObject* self)
|
||||
// {
|
||||
// PyColorObject* obj = (PyColorObject*)self;
|
||||
// obj->data.reset();
|
||||
// Py_TYPE(self)->tp_free(self);
|
||||
// },
|
||||
// //.tp_repr = (reprfunc)PyUIFrame_repr,
|
||||
// //.tp_hash = NULL,
|
||||
// //.tp_iter
|
||||
// //.tp_iternext
|
||||
// .tp_flags = Py_TPFLAGS_DEFAULT,
|
||||
// .tp_doc = PyDoc_STR("SFML Color object (RGBA)"),
|
||||
// //.tp_methods = PyUIFrame_methods,
|
||||
// //.tp_members = PyColor_members,
|
||||
// .tp_getset = PyColor_getsetters,
|
||||
// //.tp_base = NULL,
|
||||
// //.tp_init = (initproc)PyUIFrame_init,
|
||||
// .tp_new = [](PyTypeObject* type, PyObject* args, PyObject* kwds) -> PyObject*
|
||||
// {
|
||||
// PyColorObject* self = (PyColorObject*)type->tp_alloc(type, 0);
|
||||
// if (self) self->data = std::make_shared<sf::Color>();
|
||||
// return (PyObject*)self;
|
||||
// }
|
||||
// };
|
||||
|
||||
namespace mcrfpydef {
|
||||
static PyTypeObject PyColorType = {
|
||||
|
@ -34,6 +76,7 @@ namespace mcrfpydef {
|
|||
.tp_hash = PyColor::hash,
|
||||
.tp_flags = Py_TPFLAGS_DEFAULT,
|
||||
.tp_doc = PyDoc_STR("SFML Color Object"),
|
||||
.tp_getset = PyColor::getsetters,
|
||||
.tp_init = (initproc)PyColor::init,
|
||||
.tp_new = PyTColor::pynew,
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue