#include "StdAfx.h" bool PyTuple_GetImageInstance(PyObject* poArgs, int pos, CGraphicImageInstance** ppRetImageInstance) { int handle; if (!PyTuple_GetInteger(poArgs, pos, &handle)) return false; if (!handle) return false; *ppRetImageInstance = (CGraphicImageInstance*)handle; return true; } bool PyTuple_GetExpandedImageInstance(PyObject* poArgs, int pos, CGraphicExpandedImageInstance ** ppRetImageInstance) { int handle; if (!PyTuple_GetInteger(poArgs, pos, &handle)) return false; if (!handle) return false; if (!((CGraphicImageInstance*)handle)->IsType(CGraphicExpandedImageInstance::Type())) return false; *ppRetImageInstance = (CGraphicExpandedImageInstance*)handle; return true; } PyObject* grpImageGenerate(PyObject * poSelf, PyObject* poArgs) { char * szFileName; if (!PyTuple_GetString(poArgs, 0, &szFileName)) return Py_BadArgument(); if (!*szFileName) return Py_BuildValue("i", 0); CResource * pResource = CResourceManager::Instance().GetResourcePointer(szFileName); if (!pResource->IsType(CGraphicImage::Type())) return Py_BuildException("Resource is not an image (filename: %s)", szFileName); CGraphicImageInstance * pImageInstance = CGraphicImageInstance::New(); pImageInstance->SetImagePointer(static_cast(pResource)); if (pImageInstance->IsEmpty()) return Py_BuildException("Cannot load image (filename: %s)", szFileName); return Py_BuildValue("i", pImageInstance); } PyObject* grpImageGenerateExpanded(PyObject* poSelf, PyObject* poArgs) { char * szFileName; if (!PyTuple_GetString(poArgs, 0, &szFileName)) return Py_BadArgument(); if (strlen(szFileName) <= 0) return Py_BuildValue("i", 0); CResource* pResource = CResourceManager::Instance().GetResourcePointer(szFileName); if (!pResource->IsType(CGraphicImage::Type())) return Py_BuildException("Resource is not an image (filename: %s)", szFileName); CGraphicExpandedImageInstance * pImageInstance = CGraphicExpandedImageInstance::New(); pImageInstance->SetImagePointer(static_cast(pResource)); if (pImageInstance->IsEmpty()) return Py_BuildException("Cannot load image (filename: %s)", szFileName); return Py_BuildValue("i", pImageInstance); } PyObject* grpImageGenerateFromHandle(PyObject * poSelf, PyObject* poArgs) { int iHandle; if (!PyTuple_GetInteger(poArgs, 0, &iHandle)) return Py_BadArgument(); CGraphicImageInstance * pImageInstance = CGraphicImageInstance::New(); pImageInstance->SetImagePointer((CGraphicImage *)iHandle); return Py_BuildValue("i", pImageInstance); } PyObject* grpImageDelete(PyObject* poSelf, PyObject* poArgs) { CGraphicImageInstance * pImageInstance; if (!PyTuple_GetImageInstance(poArgs, 0, &pImageInstance)) return Py_BadArgument(); if (!pImageInstance) return Py_BuildNone(); CGraphicImageInstance::Delete(pImageInstance); return Py_BuildNone(); } PyObject* grpImageDeleteExpanded(PyObject* poSelf, PyObject* poArgs) { CGraphicExpandedImageInstance * pExpandedImageInstance; if (!PyTuple_GetExpandedImageInstance(poArgs, 0, &pExpandedImageInstance)) return Py_BadArgument(); CGraphicExpandedImageInstance::Delete(pExpandedImageInstance); return Py_BuildNone(); } PyObject* grpImageSetFileName(PyObject* poSelf, PyObject* poArgs) { CGraphicImageInstance * pImageInstance; if (!PyTuple_GetImageInstance(poArgs, 0, &pImageInstance)) return Py_BadArgument(); char * szFileName; if (!PyTuple_GetString(poArgs, 1, &szFileName)) return Py_BadArgument(); CResource * pResource = CResourceManager::Instance().GetResourcePointer(szFileName); if (!pResource->IsType(CGraphicImage::Type())) return Py_BuildException("Resource is not an image (filename: %s)", szFileName); pImageInstance->SetImagePointer(static_cast(pResource)); return Py_BuildNone(); } PyObject* grpImageRender(PyObject* poSelf, PyObject* poArgs) { CGraphicImageInstance* pImageInstance; if (!PyTuple_GetImageInstance(poArgs, 0, &pImageInstance)) return Py_BadArgument(); pImageInstance->Render(); return Py_BuildNone(); } PyObject * grpSetImagePosition(PyObject * poSelf, PyObject * poArgs) { CGraphicImageInstance* pImageInstance; if (!PyTuple_GetImageInstance(poArgs, 0, &pImageInstance)) return Py_BadArgument(); float x; if (!PyTuple_GetFloat(poArgs, 1, &x)) return Py_BadArgument(); float y; if (!PyTuple_GetFloat(poArgs, 2, &y)) return Py_BadArgument(); pImageInstance->SetPosition(x, y); return Py_BuildNone(); } PyObject * grpSetImageOrigin(PyObject * poSelf, PyObject * poArgs) { CGraphicExpandedImageInstance * pImageInstance; if (!PyTuple_GetExpandedImageInstance(poArgs, 0, &pImageInstance)) return Py_BadArgument(); float x; if (!PyTuple_GetFloat(poArgs, 1, &x)) return Py_BadArgument(); float y; if (!PyTuple_GetFloat(poArgs, 2, &y)) return Py_BadArgument(); pImageInstance->SetOrigin(x, y); return Py_BuildNone(); } PyObject * grpSetImageRotation(PyObject * poSelf, PyObject * poArgs) { CGraphicExpandedImageInstance * pImageInstance; if (!PyTuple_GetExpandedImageInstance(poArgs, 0, &pImageInstance)) return Py_BadArgument(); float Degree; if (!PyTuple_GetFloat(poArgs, 1, &Degree)) return Py_BadArgument(); pImageInstance->SetRotation(Degree); return Py_BuildNone(); } PyObject * grpSetImageScale(PyObject * poSelf, PyObject * poArgs) { CGraphicExpandedImageInstance * pImageInstance; if (!PyTuple_GetExpandedImageInstance(poArgs, 0, &pImageInstance)) return Py_BadArgument(); float x; if (!PyTuple_GetFloat(poArgs, 1, &x)) return Py_BadArgument(); float y; if (!PyTuple_GetFloat(poArgs, 2, &y)) return Py_BadArgument(); pImageInstance->SetScale(x, y); return Py_BuildNone(); } PyObject * grpSetRenderingRect(PyObject * poSelf, PyObject * poArgs) { CGraphicExpandedImageInstance * pImageInstance; if (!PyTuple_GetExpandedImageInstance(poArgs, 0, &pImageInstance)) return Py_BadArgument(); float fLeft; if (!PyTuple_GetFloat(poArgs, 1, &fLeft)) return Py_BadArgument(); float fTop; if (!PyTuple_GetFloat(poArgs, 2, &fTop)) return Py_BadArgument(); float fRight; if (!PyTuple_GetFloat(poArgs, 3, &fRight)) return Py_BadArgument(); float fBottom; if (!PyTuple_GetFloat(poArgs, 4, &fBottom)) return Py_BadArgument(); pImageInstance->SetRenderingRect(fLeft, fTop, fRight, fBottom); return Py_BuildNone(); } PyObject * grpSetImageDiffuseColor(PyObject * poSelf, PyObject * poArgs) { CGraphicImageInstance* pImageInstance; if (!PyTuple_GetImageInstance(poArgs, 0, &pImageInstance)) return Py_BadArgument(); float r; if (!PyTuple_GetFloat(poArgs, 1, &r)) return Py_BadArgument(); float g; if (!PyTuple_GetFloat(poArgs, 2, &g)) return Py_BadArgument(); float b; if (!PyTuple_GetFloat(poArgs, 3, &b)) return Py_BadArgument(); float a; if (!PyTuple_GetFloat(poArgs, 4, &a)) return Py_BadArgument(); pImageInstance->SetDiffuseColor(r, g, b, a); return Py_BuildNone(); } PyObject * grpGetWidth(PyObject * poSelf, PyObject * poArgs) { CGraphicImageInstance * pImageInstance; if (!PyTuple_GetImageInstance(poArgs, 0, &pImageInstance)) return Py_BadArgument(); if (pImageInstance->IsEmpty()) return Py_BuildException("Image is empty"); return Py_BuildValue("i", pImageInstance->GetWidth()); } PyObject * grpGetHeight(PyObject * poSelf, PyObject * poArgs) { CGraphicImageInstance * pImageInstance; if (!PyTuple_GetImageInstance(poArgs, 0, &pImageInstance)) return Py_BadArgument(); if (pImageInstance->IsEmpty()) return Py_BuildException("Image is empty"); return Py_BuildValue("i", pImageInstance->GetHeight()); } void initgrpImage() { static PyMethodDef s_methods[] = { { "Render", grpImageRender, METH_VARARGS }, { "SetPosition", grpSetImagePosition, METH_VARARGS }, { "Generate", grpImageGenerate, METH_VARARGS }, { "GenerateExpanded", grpImageGenerateExpanded, METH_VARARGS }, { "GenerateFromHandle", grpImageGenerateFromHandle, METH_VARARGS }, { "Delete", grpImageDelete, METH_VARARGS }, { "DeleteExpanded", grpImageDeleteExpanded, METH_VARARGS }, { "SetFileName", grpImageSetFileName, METH_VARARGS }, { "SetOrigin", grpSetImageOrigin, METH_VARARGS }, { "SetRotation", grpSetImageRotation, METH_VARARGS }, { "SetScale", grpSetImageScale, METH_VARARGS }, { "SetRenderingRect", grpSetRenderingRect, METH_VARARGS }, { "SetDiffuseColor", grpSetImageDiffuseColor, METH_VARARGS }, { "GetWidth", grpGetWidth, METH_VARARGS }, { "GetHeight", grpGetHeight, METH_VARARGS }, { NULL, NULL, NULL }, }; Py_InitModule("grpImage", s_methods); }