+typedef struct {
+ PyObject_HEAD
+ LINESTYLE ls;
+} LineStyleObject;
+
+PyObject* f_LineStyle2(RGBA color, int width)
+{
+ LineStyleObject* self = PyObject_New(LineStyleObject, &LineStyleClass);
+ self->ls.color = color;
+ self->ls.width = width;
+ return (PyObject*)self;
+}
+PyObject* f_LineStyle3(LINESTYLE ls)
+{
+ LineStyleObject* self = PyObject_New(LineStyleObject, &LineStyleClass);
+ self->ls = ls;
+ return (PyObject*)self;
+}
+PyObject* f_LineStyle(PyObject* _self, PyObject* args, PyObject* kwargs)
+{
+ static char *kwlist[] = {"line", "color", NULL};
+ float linewidth;
+ PyObject*color;
+ if(!kwargs) {
+ if (!PyArg_ParseTuple(args, "fO!", &linewidth, &ColorClass, &color))
+ return NULL;
+ }
+ return f_LineStyle2(color_getRGBA(color), (int)(linewidth*20));
+}
+LINESTYLE linestyle_getLineStyle(PyObject*_self)
+{
+ LineStyleObject* self = (LineStyleObject*)_self;
+ return self->ls;
+}
+static PyObject* linestyle_getattr(PyObject * _self, char* a)
+{
+ LineStyleObject*self = (LineStyleObject*)_self;
+ if(!strcmp(a, "width")) {
+ return Py_BuildValue("i", self->ls.width);
+ } else if(!strcmp(a, "color")) {
+ return f_Color2(self->ls.color.r, self->ls.color.g, self->ls.color.b, self->ls.color.a);
+ }
+ return NULL;
+}
+static int linestyle_setattr(PyObject * _self, char* a, PyObject* o)
+{
+ LineStyleObject*self = (LineStyleObject*)_self;
+ if(!strcmp(a, "color")) {
+ self->ls.color = color_getRGBA(o);
+ return 0;
+ }
+ return -1;
+}
+static LINESTYLE linestyle_getlinestyle(PyObject*_self)
+{
+ LineStyleObject*self = (LineStyleObject*)_self;
+ return self->ls;
+}
+static void linestyle_dealloc(PyObject* self)
+{
+ mylog("-%08x(%d) linestyle_dealloc", self, self->ob_refcnt);
+ PyObject_Del(self);
+}
+static int linestyle_print(PyObject * _self, FILE *fi, int flags) //flags&Py_PRINT_RAW
+{
+ LineStyleObject* self = (LineStyleObject*)_self;
+ fprintf(fi, "line-%d-%02x%02x%02x%02x", self->ls.width, self->ls.color.r, self->ls.color.g, self->ls.color.b, self->ls.color.a);
+ return 0;
+}
+PyTypeObject LineStyleClass =
+{
+ PyObject_HEAD_INIT(NULL)
+ 0,
+ tp_name: "linestyle",
+ tp_basicsize: sizeof(LineStyleObject),
+ tp_itemsize: 0,
+ tp_dealloc: linestyle_dealloc,
+ tp_print: linestyle_print,
+ tp_getattr: linestyle_getattr,
+ tp_setattr: linestyle_setattr,
+};
+//----------------------------------------------------------------------------
+
+typedef struct {
+ PyObject_HEAD
+ FILLSTYLE fs;
+} FillStyleObject;
+
+PyObject* f_FillStyle2(FILLSTYLE fs)
+{
+ FillStyleObject* self = PyObject_New(FillStyleObject, &FillStyleClass);
+ self->fs = fs;
+ return (PyObject*)self;
+}
+PyObject* f_SolidFillStyle2(RGBA color)
+{
+ FillStyleObject* self = PyObject_New(FillStyleObject, &FillStyleClass);
+ self->fs.type = FILL_SOLID;
+ self->fs.color = color;
+ return (PyObject*)self;
+}
+PyObject* f_SolidFillStyle(PyObject* _self, PyObject* args, PyObject* kwargs)
+{
+ static char *kwlist[] = {"color", NULL};
+ PyObject*color;
+ if(!kwargs) {
+ if (!PyArg_ParseTuple(args, "O!", &ColorClass, &color))
+ return NULL;
+ }
+ return f_SolidFillStyle2(color_getRGBA(color));
+}
+FILLSTYLE fillstyle_getFillStyle(PyObject*_self)
+{
+ FillStyleObject* self = (FillStyleObject*)_self;
+ return self->fs;
+}
+static void fillstyle_dealloc(PyObject* self)
+{
+ mylog("-%08x(%d) linestyle_dealloc", self, self->ob_refcnt);
+ PyObject_Del(self);
+}
+static int fillstyle_print(PyObject * _self, FILE *fi, int flags) //flags&Py_PRINT_RAW
+{
+ FillStyleObject* self = (FillStyleObject*)_self;
+ if(self->fs.type == FILL_SOLID)
+ fprintf(fi, "fill-solid(%02x%02x%02x%02x)", self->fs.color.r, self->fs.color.g, self->fs.color.b, self->fs.color.a);
+ else
+ fprintf(fi, "fill-%02x", self->fs.type);
+ return 0;
+}
+PyObject* fillstyle_issolid(PyObject*_self, PyObject*args)
+{
+ FillStyleObject* self = (FillStyleObject*)_self;
+ int b = self->fs.type == FILL_SOLID;
+ return PyInt_FromLong(b);
+}
+static PyMethodDef FillStyleMethods[] =
+{
+ /* Module functions */
+ {"isSolid", fillstyle_issolid, METH_VARARGS, "Queries whether this is a solid fill"},
+ {0,0,0,0}
+};
+static PyObject* fillstyle_getattr(PyObject * _self, char* a)
+{
+ FillStyleObject* self = (FillStyleObject*)_self;
+ if(!strcmp(a, "color")) {
+ return f_Color2(self->fs.color.r, self->fs.color.g, self->fs.color.b, self->fs.color.a);
+ }
+ return Py_FindMethod(FillStyleMethods, _self, a);
+}
+static int fillstyle_setattr(PyObject * _self, char* a, PyObject* o)
+{
+ FillStyleObject*self = (FillStyleObject*)_self;
+ if(!strcmp(a, "color")) {
+ self->fs.color = color_getRGBA(o);
+ return 0;
+ }
+ return -1;
+}
+
+PyTypeObject FillStyleClass =
+{
+ PyObject_HEAD_INIT(NULL)
+ 0,
+ tp_name: "fillstyle",
+ tp_basicsize: sizeof(FillStyleObject),
+ tp_itemsize: 0,
+ tp_dealloc: fillstyle_dealloc,
+ tp_print: fillstyle_print,
+ tp_getattr: fillstyle_getattr,
+ tp_setattr: fillstyle_setattr,
+};
+//----------------------------------------------------------------------------