Dabbling around this morning; still not building
This commit is contained in:
parent
79090b553f
commit
13672c8fdb
|
@ -1,43 +1,61 @@
|
||||||
#include "PyColor.h"
|
#include "PyColor.h"
|
||||||
|
|
||||||
|
PyColor::PyColor(sf::Color* target, std::weak_ptr<UIDrawable> parent, int index)
|
||||||
PyColor::PyColor()
|
|
||||||
{
|
{
|
||||||
|
data.index = index;
|
||||||
|
data.parent = parent;
|
||||||
|
data.target = target;
|
||||||
|
}
|
||||||
|
|
||||||
|
PyColor::PyColor(sf::Color target)
|
||||||
|
{
|
||||||
|
data.index = PyColor::SELF_OWNED;
|
||||||
|
data.parent = std::weak_ptr<UIDrawable>();
|
||||||
|
data.target = new sf::Color;
|
||||||
|
}
|
||||||
|
|
||||||
|
PyColor::~PyColor()
|
||||||
|
{
|
||||||
|
if (data.index == PyColor::SELF_OWNED)
|
||||||
|
delete data.target;
|
||||||
}
|
}
|
||||||
|
|
||||||
PyObject* PyColor::pyObject()
|
PyObject* PyColor::pyObject()
|
||||||
{
|
{
|
||||||
PyObject* obj = PyType_GenericAlloc(&mcrfpydef::PyColorType, 0);
|
PyObject* obj = PyType_GenericAlloc(&mcrfpydef::PyColorType, 0);
|
||||||
((PyColorObject*)obj.data = data;
|
((PyColorObject*)obj->data = data;
|
||||||
return obj;
|
return obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
Py_hash_t PyColor::hash(PyObject* obj)
|
Py_hash_t PyColor::hash(PyObject* obj)
|
||||||
{
|
{
|
||||||
auto self = (PyTextureObject*)obj;
|
auto self = (PyColorObject*)obj;
|
||||||
Py_hash_t value = 0;
|
Py_hash_t value = 0;
|
||||||
value += obj.data.r;
|
auto ptr = self.data.parent.lock();
|
||||||
value << 8; value += obj.data.g;
|
if (ptr || self->data.index == PyColor::SELF_OWNED)
|
||||||
value << 8; value += obj.data.b;
|
{
|
||||||
value << 8; value += obj.data.a;
|
value += self->data.target->r;
|
||||||
value << (sizeof(*UIDrawable) * 8);
|
value << 8; value += self->data.target->g;
|
||||||
if (auto ptr = self.data.parent.lock())
|
value << 8; value += self->data.target->b;
|
||||||
|
value << 8; value += self->data.target->a;
|
||||||
|
}
|
||||||
|
if (ptr)
|
||||||
|
{
|
||||||
|
|
||||||
|
value << (sizeof(*UIDrawable) * 8);
|
||||||
value += reinterpret_cast<Py_hash_t>(ptr);
|
value += reinterpret_cast<Py_hash_t>(ptr);
|
||||||
|
}
|
||||||
|
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
int PyColor::init(PyColorObject* self, PyObject* args, PyObject* kwds)
|
int PyColor::init(PyColorObject* self, PyObject* args, PyObject* kwds)
|
||||||
{
|
{
|
||||||
static const char* keywords[] = { "r", "g", "b", "a", 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))
|
|
||||||
return -1;
|
|
||||||
self->data = std::make_shared<PyTexture>(filename, sprite_width, sprite_height);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
PyObject* PyTexture::pynew(PyTypeObject* type, PyObject* args, PyObject* kwds)
|
PyObject* PyColor::pynew(PyTypeObject* type, PyObject* args, PyObject* kwds)
|
||||||
{
|
{
|
||||||
return (PyObject*)type->tp_alloc(type, 0);
|
return (PyObject*)type->tp_alloc(type, 0);
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
#include "Python.h"
|
#include "Python.h"
|
||||||
|
|
||||||
class PyColor;
|
class PyColor;
|
||||||
|
class UIDrawable; // forward declare for pointer
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
sf::Color* target; // color target to set/get
|
sf::Color* target; // color target to set/get
|
||||||
|
@ -13,13 +14,16 @@ typedef struct {
|
||||||
typedef struct {
|
typedef struct {
|
||||||
PyObject_HEAD
|
PyObject_HEAD
|
||||||
_PyColorData data;
|
_PyColorData data;
|
||||||
} PyTextureObject;
|
} PyColorObject;
|
||||||
|
|
||||||
class PyColor
|
class PyColor
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
_PyColorData data;
|
_PyColorData data;
|
||||||
|
static int SELF_OWNED = -1;
|
||||||
public:
|
public:
|
||||||
|
PyColor(sf::Color* target, std::weak_ptr<UIDrawable> parent, int index) // linked constructor
|
||||||
|
PyColor::PyColor(sf::Color target) // simple color container
|
||||||
void set(sf::Color);
|
void set(sf::Color);
|
||||||
sf::Color get();
|
sf::Color get();
|
||||||
PyObject* pyObject();
|
PyObject* pyObject();
|
||||||
|
@ -27,11 +31,14 @@ public:
|
||||||
static int init(PyColorObject*, PyObject*, PyObject*);
|
static int init(PyColorObject*, PyObject*, PyObject*);
|
||||||
static PyObject* pynew(PyTypeObject* type, PyObject* args=NULL, PyObject* kwds=NULL);
|
static PyObject* pynew(PyTypeObject* type, PyObject* args=NULL, PyObject* kwds=NULL);
|
||||||
|
|
||||||
|
static PyObject* get_member(PyObject*, void*);
|
||||||
|
static int set_member(PyObject*, PyObject*, void*);
|
||||||
|
|
||||||
static PyGetSetDef getsetters[] = {
|
static PyGetSetDef getsetters[] = {
|
||||||
{"r", (getter)PyColor_get_member, (setter)PyColor_set_member, "Red component", (void*)0},
|
{"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},
|
{"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},
|
{"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},
|
{"a", (getter)PyColor::get_member, (setter)PyColor::set_member, "Alpha component", (void*)3},
|
||||||
{NULL}
|
{NULL}
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -78,6 +85,6 @@ namespace mcrfpydef {
|
||||||
.tp_doc = PyDoc_STR("SFML Color Object"),
|
.tp_doc = PyDoc_STR("SFML Color Object"),
|
||||||
.tp_getset = PyColor::getsetters,
|
.tp_getset = PyColor::getsetters,
|
||||||
.tp_init = (initproc)PyColor::init,
|
.tp_init = (initproc)PyColor::init,
|
||||||
.tp_new = PyTColor::pynew,
|
.tp_new = PyColor::pynew,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
168
src/UI.h
168
src/UI.h
|
@ -46,10 +46,12 @@ typedef struct {
|
||||||
} PyColorObject;
|
} PyColorObject;
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/* // Moved to PyColor.h
|
||||||
typedef struct {
|
typedef struct {
|
||||||
PyObject_HEAD
|
PyObject_HEAD
|
||||||
std::shared_ptr<sf::Color> data;
|
std::shared_ptr<sf::Color> data;
|
||||||
} PyColorObject;
|
} PyColorObject;
|
||||||
|
*/
|
||||||
|
|
||||||
class UIFrame: public UIDrawable
|
class UIFrame: public UIDrawable
|
||||||
{
|
{
|
||||||
|
@ -444,89 +446,89 @@ static int PyUIDrawable_set_click(PyUIGridObject* self, PyObject* value, void* c
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
static PyObject* PyColor_get_member(PyColorObject* self, void* closure)
|
// static PyObject* PyColor_get_member(PyColorObject* self, void* closure)
|
||||||
{
|
// {
|
||||||
auto member_ptr = reinterpret_cast<long>(closure);
|
// auto member_ptr = reinterpret_cast<long>(closure);
|
||||||
if (member_ptr == 0)
|
// if (member_ptr == 0)
|
||||||
return PyLong_FromLong(self->data->r);
|
// return PyLong_FromLong(self->data->r);
|
||||||
else if (member_ptr == 1)
|
// else if (member_ptr == 1)
|
||||||
return PyLong_FromLong(self->data->g);
|
// return PyLong_FromLong(self->data->g);
|
||||||
else if (member_ptr == 2)
|
// else if (member_ptr == 2)
|
||||||
return PyLong_FromLong(self->data->b);
|
// return PyLong_FromLong(self->data->b);
|
||||||
else if (member_ptr == 3)
|
// else if (member_ptr == 3)
|
||||||
return PyLong_FromLong(self->data->a);
|
// return PyLong_FromLong(self->data->a);
|
||||||
else
|
// else
|
||||||
{
|
// {
|
||||||
PyErr_SetString(PyExc_AttributeError, "Invalid attribute");
|
// PyErr_SetString(PyExc_AttributeError, "Invalid attribute");
|
||||||
return nullptr;
|
// return nullptr;
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
static int PyColor_set_member(PyColorObject* self, PyObject* value, void* closure)
|
// static int PyColor_set_member(PyColorObject* self, PyObject* value, void* closure)
|
||||||
{
|
// {
|
||||||
if (PyLong_Check(value))
|
// if (PyLong_Check(value))
|
||||||
{
|
// {
|
||||||
long int_val = PyLong_AsLong(value);
|
// long int_val = PyLong_AsLong(value);
|
||||||
if (int_val < 0)
|
// if (int_val < 0)
|
||||||
int_val = 0;
|
// int_val = 0;
|
||||||
else if (int_val > 255)
|
// else if (int_val > 255)
|
||||||
int_val = 255;
|
// int_val = 255;
|
||||||
auto member_ptr = reinterpret_cast<long>(closure);
|
// auto member_ptr = reinterpret_cast<long>(closure);
|
||||||
if (member_ptr == 0)
|
// if (member_ptr == 0)
|
||||||
self->data->r = static_cast<sf::Uint8>(int_val);
|
// self->data->r = static_cast<sf::Uint8>(int_val);
|
||||||
else if (member_ptr == 1)
|
// else if (member_ptr == 1)
|
||||||
self->data->g = static_cast<sf::Uint8>(int_val);
|
// self->data->g = static_cast<sf::Uint8>(int_val);
|
||||||
else if (member_ptr == 2)
|
// else if (member_ptr == 2)
|
||||||
self->data->b = static_cast<sf::Uint8>(int_val);
|
// self->data->b = static_cast<sf::Uint8>(int_val);
|
||||||
else if (member_ptr == 3)
|
// else if (member_ptr == 3)
|
||||||
self->data->a = static_cast<sf::Uint8>(int_val);
|
// self->data->a = static_cast<sf::Uint8>(int_val);
|
||||||
}
|
// }
|
||||||
else
|
// else
|
||||||
{
|
// {
|
||||||
PyErr_SetString(PyExc_TypeError, "Value must be an integer.");
|
// PyErr_SetString(PyExc_TypeError, "Value must be an integer.");
|
||||||
return -1;
|
// return -1;
|
||||||
}
|
// }
|
||||||
return 0;
|
// return 0;
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
static PyGetSetDef PyColor_getsetters[] = {
|
// static PyGetSetDef PyColor_getsetters[] = {
|
||||||
{"r", (getter)PyColor_get_member, (setter)PyColor_set_member, "Red component", (void*)0},
|
// {"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},
|
// {"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},
|
// {"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},
|
// {"a", (getter)PyColor_get_member, (setter)PyColor_set_member, "Alpha component", (void*)3},
|
||||||
{NULL}
|
// {NULL}
|
||||||
};
|
// };
|
||||||
|
//
|
||||||
|
//
|
||||||
static PyTypeObject PyColorType = {
|
// static PyTypeObject PyColorType = {
|
||||||
//PyVarObject_HEAD_INIT(NULL, 0)
|
// //PyVarObject_HEAD_INIT(NULL, 0)
|
||||||
.tp_name = "mcrfpy.Color",
|
// .tp_name = "mcrfpy.Color",
|
||||||
.tp_basicsize = sizeof(PyColorObject),
|
// .tp_basicsize = sizeof(PyColorObject),
|
||||||
.tp_itemsize = 0,
|
// .tp_itemsize = 0,
|
||||||
.tp_dealloc = (destructor)[](PyObject* self)
|
// .tp_dealloc = (destructor)[](PyObject* self)
|
||||||
{
|
// {
|
||||||
PyColorObject* obj = (PyColorObject*)self;
|
// PyColorObject* obj = (PyColorObject*)self;
|
||||||
obj->data.reset();
|
// obj->data.reset();
|
||||||
Py_TYPE(self)->tp_free(self);
|
// Py_TYPE(self)->tp_free(self);
|
||||||
},
|
// },
|
||||||
//.tp_repr = (reprfunc)PyUIFrame_repr,
|
// //.tp_repr = (reprfunc)PyUIFrame_repr,
|
||||||
//.tp_hash = NULL,
|
// //.tp_hash = NULL,
|
||||||
//.tp_iter
|
// //.tp_iter
|
||||||
//.tp_iternext
|
// //.tp_iternext
|
||||||
.tp_flags = Py_TPFLAGS_DEFAULT,
|
// .tp_flags = Py_TPFLAGS_DEFAULT,
|
||||||
.tp_doc = PyDoc_STR("SFML Color object (RGBA)"),
|
// .tp_doc = PyDoc_STR("SFML Color object (RGBA)"),
|
||||||
//.tp_methods = PyUIFrame_methods,
|
// //.tp_methods = PyUIFrame_methods,
|
||||||
//.tp_members = PyColor_members,
|
// //.tp_members = PyColor_members,
|
||||||
.tp_getset = PyColor_getsetters,
|
// .tp_getset = PyColor_getsetters,
|
||||||
//.tp_base = NULL,
|
// //.tp_base = NULL,
|
||||||
//.tp_init = (initproc)PyUIFrame_init,
|
// //.tp_init = (initproc)PyUIFrame_init,
|
||||||
.tp_new = [](PyTypeObject* type, PyObject* args, PyObject* kwds) -> PyObject*
|
// .tp_new = [](PyTypeObject* type, PyObject* args, PyObject* kwds) -> PyObject*
|
||||||
{
|
// {
|
||||||
PyColorObject* self = (PyColorObject*)type->tp_alloc(type, 0);
|
// PyColorObject* self = (PyColorObject*)type->tp_alloc(type, 0);
|
||||||
if (self) self->data = std::make_shared<sf::Color>();
|
// if (self) self->data = std::make_shared<sf::Color>();
|
||||||
return (PyObject*)self;
|
// return (PyObject*)self;
|
||||||
}
|
// }
|
||||||
};
|
// };
|
||||||
|
|
||||||
/*
|
/*
|
||||||
*
|
*
|
||||||
|
|
Loading…
Reference in New Issue