forked from metin2/client
Solution refactoring and restructuring, removed Boost dependency, removed unused tools
This commit is contained in:
426
src/EterPythonLib/PythonGraphicTextModule.cpp
Normal file
426
src/EterPythonLib/PythonGraphicTextModule.cpp
Normal file
@ -0,0 +1,426 @@
|
||||
#include "StdAfx.h"
|
||||
|
||||
bool PyTuple_GetTextInstance(PyObject* poArgs, int pos, CGraphicTextInstance** ppTextInstance)
|
||||
{
|
||||
int handle;
|
||||
if (!PyTuple_GetInteger(poArgs, pos, &handle))
|
||||
return false;
|
||||
|
||||
if (!handle)
|
||||
return false;
|
||||
|
||||
*ppTextInstance=(CGraphicTextInstance*)handle;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
PyObject* grpTextGenerate(PyObject* poSelf, PyObject* poArgs)
|
||||
{
|
||||
CGraphicTextInstance * pTextInstance = CGraphicTextInstance::New();
|
||||
return Py_BuildValue("i", pTextInstance);
|
||||
}
|
||||
|
||||
PyObject* grpTextDestroy(PyObject* poSelf, PyObject* poArgs)
|
||||
{
|
||||
CGraphicTextInstance* pTextInstance;
|
||||
if (!PyTuple_GetTextInstance(poArgs, 0, &pTextInstance))
|
||||
return Py_BuildException();
|
||||
|
||||
CGraphicTextInstance::Delete(pTextInstance);
|
||||
return Py_BuildNone();
|
||||
}
|
||||
|
||||
PyObject* grpTextGetSize(PyObject* poSelf, PyObject* poArgs)
|
||||
{
|
||||
CGraphicTextInstance* pTextInstance;
|
||||
if (!PyTuple_GetTextInstance(poArgs, 0, &pTextInstance))
|
||||
return Py_BuildException();
|
||||
|
||||
int width, height;
|
||||
pTextInstance->GetTextSize(&width, &height);
|
||||
return Py_BuildValue("(i, i)", width, height);
|
||||
}
|
||||
|
||||
PyObject* grpTextSetPosition(PyObject* poSelf, PyObject* poArgs)
|
||||
{
|
||||
CGraphicTextInstance* pTextInstance;
|
||||
if (!PyTuple_GetTextInstance(poArgs, 0, &pTextInstance))
|
||||
return Py_BuildException();
|
||||
|
||||
int ix;
|
||||
if (!PyTuple_GetInteger(poArgs, 1, &ix))
|
||||
return Py_BuildException();
|
||||
int iy;
|
||||
if (!PyTuple_GetInteger(poArgs, 2, &iy))
|
||||
return Py_BuildException();
|
||||
|
||||
pTextInstance->SetPosition((float) ix, (float) iy);
|
||||
return Py_BuildNone();
|
||||
}
|
||||
|
||||
PyObject* grpTextSetText(PyObject* poSelf, PyObject* poArgs)
|
||||
{
|
||||
CGraphicTextInstance* pTextInstance;
|
||||
if (!PyTuple_GetTextInstance(poArgs, 0, &pTextInstance))
|
||||
return Py_BuildException();
|
||||
|
||||
char* szText;
|
||||
if (!PyTuple_GetString(poArgs, 1, &szText))
|
||||
return Py_BuildException();
|
||||
|
||||
pTextInstance->SetValue(szText);
|
||||
return Py_BuildNone();
|
||||
}
|
||||
|
||||
PyObject* grpTextSetSecret(PyObject* poSelf, PyObject* poArgs)
|
||||
{
|
||||
CGraphicTextInstance* pTextInstance;
|
||||
if (!PyTuple_GetTextInstance(poArgs, 0, &pTextInstance))
|
||||
return Py_BuildException();
|
||||
|
||||
bool bValue;
|
||||
if (!PyTuple_GetBoolean(poArgs, 1, &bValue))
|
||||
return Py_BuildException();
|
||||
|
||||
pTextInstance->SetSecret(bValue);
|
||||
return Py_BuildNone();
|
||||
}
|
||||
|
||||
PyObject* grpTextOutline(PyObject* poSelf, PyObject* poArgs)
|
||||
{
|
||||
CGraphicTextInstance* pTextInstance;
|
||||
if (!PyTuple_GetTextInstance(poArgs, 0, &pTextInstance))
|
||||
return Py_BuildException();
|
||||
|
||||
bool bValue;
|
||||
if (!PyTuple_GetBoolean(poArgs, 1, &bValue))
|
||||
return Py_BuildException();
|
||||
|
||||
pTextInstance->SetOutline(bValue);
|
||||
return Py_BuildNone();
|
||||
}
|
||||
|
||||
PyObject* grpTextGetText(PyObject* poSelf, PyObject* poArgs)
|
||||
{
|
||||
CGraphicTextInstance* pTextInstance;
|
||||
if (!PyTuple_GetTextInstance(poArgs, 0, &pTextInstance))
|
||||
return Py_BuildException();
|
||||
|
||||
return Py_BuildValue("s", pTextInstance->GetValueStringReference().c_str());
|
||||
}
|
||||
|
||||
PyObject* grpTextSetFontName(PyObject* poSelf, PyObject* poArgs)
|
||||
{
|
||||
CGraphicTextInstance* pTextInstance;
|
||||
if (!PyTuple_GetTextInstance(poArgs, 0, &pTextInstance))
|
||||
return Py_BuildException();
|
||||
|
||||
char* szFontName;
|
||||
if (!PyTuple_GetString(poArgs, 1, &szFontName))
|
||||
return Py_BuildException();
|
||||
|
||||
std::string stFontName = szFontName;
|
||||
stFontName += ".fnt";
|
||||
|
||||
CResource* pResource = CResourceManager::Instance().GetResourcePointer(stFontName.c_str());
|
||||
pTextInstance->SetTextPointer(static_cast<CGraphicText*>(pResource));
|
||||
return Py_BuildNone();
|
||||
}
|
||||
|
||||
PyObject* grpTextSetFontColor(PyObject* poSelf, PyObject* poArgs)
|
||||
{
|
||||
CGraphicTextInstance* pTextInstance;
|
||||
if (!PyTuple_GetTextInstance(poArgs, 0, &pTextInstance))
|
||||
return Py_BuildException();
|
||||
|
||||
if (2 == PyTuple_Size(poArgs))
|
||||
{
|
||||
int iColor;
|
||||
if (!PyTuple_GetInteger(poArgs, 1, &iColor))
|
||||
return Py_BuildException();
|
||||
pTextInstance->SetColor(DWORD(iColor));
|
||||
}
|
||||
else if (4 == PyTuple_Size(poArgs))
|
||||
{
|
||||
float fRed;
|
||||
if (!PyTuple_GetFloat(poArgs, 1, &fRed))
|
||||
return Py_BuildException();
|
||||
float fGreen;
|
||||
if (!PyTuple_GetFloat(poArgs, 2, &fGreen))
|
||||
return Py_BuildException();
|
||||
float fBlue;
|
||||
if (!PyTuple_GetFloat(poArgs, 3, &fBlue))
|
||||
return Py_BuildException();
|
||||
pTextInstance->SetColor(fRed, fGreen, fBlue);
|
||||
}
|
||||
else
|
||||
{
|
||||
return Py_BuildException();
|
||||
}
|
||||
|
||||
return Py_BuildNone();
|
||||
}
|
||||
|
||||
PyObject* grpTextSetOutLineColor(PyObject* poSelf, PyObject* poArgs)
|
||||
{
|
||||
CGraphicTextInstance* pTextInstance;
|
||||
if (!PyTuple_GetTextInstance(poArgs, 0, &pTextInstance))
|
||||
return Py_BuildException();
|
||||
|
||||
float fRed;
|
||||
if (!PyTuple_GetFloat(poArgs, 1, &fRed))
|
||||
return Py_BuildException();
|
||||
float fGreen;
|
||||
if (!PyTuple_GetFloat(poArgs, 2, &fGreen))
|
||||
return Py_BuildException();
|
||||
float fBlue;
|
||||
if (!PyTuple_GetFloat(poArgs, 3, &fBlue))
|
||||
return Py_BuildException();
|
||||
|
||||
float fAlpha;
|
||||
if (!PyTuple_GetFloat(poArgs, 4, &fAlpha))
|
||||
return Py_BuildException();
|
||||
|
||||
pTextInstance->SetOutLineColor(fRed, fGreen, fBlue, fAlpha);
|
||||
return Py_BuildNone();
|
||||
}
|
||||
|
||||
|
||||
PyObject* grpTextRender(PyObject* poSelf, PyObject* poArgs)
|
||||
{
|
||||
CGraphicTextInstance* pTextInstance;
|
||||
if (!PyTuple_GetTextInstance(poArgs, 0, &pTextInstance))
|
||||
return Py_BuildException();
|
||||
|
||||
pTextInstance->Render();
|
||||
return Py_BuildNone();
|
||||
}
|
||||
|
||||
PyObject* grpTextUpdate(PyObject* poSelf, PyObject* poArgs)
|
||||
{
|
||||
CGraphicTextInstance* pTextInstance;
|
||||
if (!PyTuple_GetTextInstance(poArgs, 0, &pTextInstance))
|
||||
return Py_BuildException();
|
||||
|
||||
pTextInstance->Update();
|
||||
return Py_BuildNone();
|
||||
}
|
||||
|
||||
PyObject* grpTextShowCursor(PyObject* poSelf, PyObject* poArgs)
|
||||
{
|
||||
CGraphicTextInstance* pTextInstance;
|
||||
if (!PyTuple_GetTextInstance(poArgs, 0, &pTextInstance))
|
||||
return Py_BuildException();
|
||||
|
||||
pTextInstance->ShowCursor();
|
||||
return Py_BuildNone();
|
||||
}
|
||||
|
||||
PyObject* grpTextHideCursor(PyObject* poSelf, PyObject* poArgs)
|
||||
{
|
||||
CGraphicTextInstance* pTextInstance;
|
||||
if (!PyTuple_GetTextInstance(poArgs, 0, &pTextInstance))
|
||||
return Py_BuildException();
|
||||
|
||||
pTextInstance->HideCursor();
|
||||
return Py_BuildNone();
|
||||
}
|
||||
|
||||
PyObject* grpSetHorizontalAlign(PyObject* poSelf, PyObject* poArgs)
|
||||
{
|
||||
CGraphicTextInstance* pTextInstance;
|
||||
if (!PyTuple_GetTextInstance(poArgs, 0, &pTextInstance))
|
||||
return Py_BuildException();
|
||||
|
||||
int iAlign;
|
||||
if (!PyTuple_GetInteger(poArgs, 1, &iAlign))
|
||||
return Py_BuildException();
|
||||
|
||||
pTextInstance->SetHorizonalAlign(iAlign);
|
||||
return Py_BuildNone();
|
||||
}
|
||||
|
||||
PyObject* grpSetVerticalAlign(PyObject* poSelf, PyObject* poArgs)
|
||||
{
|
||||
CGraphicTextInstance* pTextInstance;
|
||||
if (!PyTuple_GetTextInstance(poArgs, 0, &pTextInstance))
|
||||
return Py_BuildException();
|
||||
|
||||
int iAlign;
|
||||
if (!PyTuple_GetInteger(poArgs, 1, &iAlign))
|
||||
return Py_BuildException();
|
||||
|
||||
pTextInstance->SetVerticalAlign(iAlign);
|
||||
return Py_BuildNone();
|
||||
}
|
||||
|
||||
PyObject* grpSetMax(PyObject* poSelf, PyObject* poArgs)
|
||||
{
|
||||
CGraphicTextInstance* pTextInstance;
|
||||
if (!PyTuple_GetTextInstance(poArgs, 0, &pTextInstance))
|
||||
return Py_BuildException();
|
||||
|
||||
int iValue;
|
||||
if (!PyTuple_GetInteger(poArgs, 1, &iValue))
|
||||
return Py_BuildException();
|
||||
|
||||
pTextInstance->SetMax(iValue);
|
||||
return Py_BuildNone();
|
||||
}
|
||||
|
||||
PyObject* grpGetSplitingTextLineCount(PyObject* poSelf, PyObject* poArgs)
|
||||
{
|
||||
char * szText;
|
||||
if (!PyTuple_GetString(poArgs, 0, &szText))
|
||||
return Py_BuildException();
|
||||
|
||||
int iLineLimitation;
|
||||
if (!PyTuple_GetInteger(poArgs, 1, &iLineLimitation))
|
||||
return Py_BuildException();
|
||||
|
||||
int iPosition = 0;
|
||||
int iLineCount = 0;
|
||||
|
||||
for (DWORD i = 0; i < strlen(szText);)
|
||||
{
|
||||
if ('|' == szText[i])
|
||||
{
|
||||
i += 1;
|
||||
|
||||
// <20>ڵ<EFBFBD> <20><> <20>ٲǰ<DEB5> <20>ٷ<EFBFBD> | <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
if (iPosition>0)
|
||||
++iLineCount;
|
||||
|
||||
iPosition = 0;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (szText[i] & 0x80)
|
||||
{
|
||||
i += 2;
|
||||
iPosition += 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
i += 1;
|
||||
iPosition += 1;
|
||||
}
|
||||
|
||||
if (iPosition >= iLineLimitation)
|
||||
{
|
||||
++iLineCount;
|
||||
iPosition = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (iPosition > 0)
|
||||
++iLineCount;
|
||||
|
||||
return Py_BuildValue("i", iLineCount);
|
||||
}
|
||||
|
||||
PyObject* grpGetSplitingTextLine(PyObject* poSelf, PyObject* poArgs)
|
||||
{
|
||||
char * szText;
|
||||
if (!PyTuple_GetString(poArgs, 0, &szText))
|
||||
return Py_BuildException();
|
||||
|
||||
int iLineLimitation;
|
||||
if (!PyTuple_GetInteger(poArgs, 1, &iLineLimitation))
|
||||
return Py_BuildException();
|
||||
|
||||
int iGettingLine;
|
||||
if (!PyTuple_GetInteger(poArgs, 2, &iGettingLine))
|
||||
return Py_BuildException();
|
||||
|
||||
std::string strLine = "";
|
||||
int iPosition = 0;
|
||||
int iLineCount = 0;
|
||||
|
||||
// 1<><31> : <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> <20>ȵɱ<C8B5> -_-a
|
||||
// 2<><32> : <20><>.. <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> +_+
|
||||
for (DWORD i = 0; i < strlen(szText);)
|
||||
{
|
||||
if ('|' == szText[i])
|
||||
{
|
||||
i += 1;
|
||||
|
||||
// <20>ڵ<EFBFBD> <20><> <20>ٲǰ<DEB5> <20>ٷ<EFBFBD> | <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
if (iPosition>0)
|
||||
++iLineCount;
|
||||
iPosition = 0;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (szText[i] & 0x80)
|
||||
{
|
||||
if (iLineCount == iGettingLine)
|
||||
strLine.append(szText+i, 2);
|
||||
|
||||
i += 2;
|
||||
iPosition += 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (iLineCount == iGettingLine)
|
||||
strLine += szText[i];
|
||||
|
||||
i += 1;
|
||||
iPosition += 1;
|
||||
}
|
||||
|
||||
if (iPosition >= iLineLimitation)
|
||||
{
|
||||
++iLineCount;
|
||||
iPosition = 0;
|
||||
}
|
||||
}
|
||||
|
||||
return Py_BuildValue("s", strLine.c_str());
|
||||
}
|
||||
|
||||
PyObject* grpTextPixelPositionToCharacterPosition(PyObject* poSelf, PyObject* poArgs)
|
||||
{
|
||||
CGraphicTextInstance * pTextInstance;
|
||||
if (!PyTuple_GetTextInstance(poArgs, 0, &pTextInstance))
|
||||
return Py_BuildException();
|
||||
|
||||
int iPixelPosition;
|
||||
if (!PyTuple_GetInteger(poArgs, 1, &iPixelPosition))
|
||||
return Py_BuildException();
|
||||
|
||||
int iCharacterPosition = pTextInstance->PixelPositionToCharacterPosition(iPixelPosition);
|
||||
|
||||
return Py_BuildValue("i", iCharacterPosition);
|
||||
}
|
||||
|
||||
void initgrpText()
|
||||
{
|
||||
static PyMethodDef s_methods[] =
|
||||
{
|
||||
{ "Update", grpTextUpdate, METH_VARARGS },
|
||||
{ "Render", grpTextRender, METH_VARARGS },
|
||||
{ "Generate", grpTextGenerate, METH_VARARGS },
|
||||
{ "Destroy", grpTextDestroy, METH_VARARGS },
|
||||
{ "SetFontName", grpTextSetFontName, METH_VARARGS },
|
||||
{ "SetFontColor", grpTextSetFontColor, METH_VARARGS },
|
||||
{ "SetOutLineColor", grpTextSetOutLineColor, METH_VARARGS },
|
||||
{ "SetSecret", grpTextSetSecret, METH_VARARGS },
|
||||
{ "SetOutline", grpTextOutline, METH_VARARGS },
|
||||
{ "SetText", grpTextSetText, METH_VARARGS },
|
||||
{ "GetText", grpTextGetText, METH_VARARGS },
|
||||
{ "GetSize", grpTextGetSize, METH_VARARGS },
|
||||
{ "SetPosition", grpTextSetPosition, METH_VARARGS },
|
||||
{ "ShowCursor", grpTextShowCursor, METH_VARARGS },
|
||||
{ "HideCursor", grpTextHideCursor, METH_VARARGS },
|
||||
{ "SetHorizontalAlign", grpSetHorizontalAlign, METH_VARARGS },
|
||||
{ "SetVerticalAlign", grpSetVerticalAlign, METH_VARARGS },
|
||||
{ "SetMax", grpSetMax, METH_VARARGS },
|
||||
{ "GetSplitingTextLineCount", grpGetSplitingTextLineCount, METH_VARARGS },
|
||||
{ "GetSplitingTextLine", grpGetSplitingTextLine, METH_VARARGS },
|
||||
{ "PixelPositionToCharacterPosition", grpTextPixelPositionToCharacterPosition, METH_VARARGS },
|
||||
{ NULL, NULL, NULL },
|
||||
};
|
||||
|
||||
Py_InitModule("grpText", s_methods);
|
||||
}
|
Reference in New Issue
Block a user