[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [38387] branches/soc-2011-cucumber/source/ gameengine/Ketsji: The KX_FontObject text attribute is working again.

Daniel Stokes kupomail at gmail.com
Thu Jul 14 10:24:15 CEST 2011


Revision: 38387
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=38387
Author:   kupoman
Date:     2011-07-14 08:24:15 +0000 (Thu, 14 Jul 2011)
Log Message:
-----------
The KX_FontObject text attribute is working again.

Modified Paths:
--------------
    branches/soc-2011-cucumber/source/gameengine/Ketsji/KX_FontObject.cpp
    branches/soc-2011-cucumber/source/gameengine/Ketsji/KX_FontObject.h

Modified: branches/soc-2011-cucumber/source/gameengine/Ketsji/KX_FontObject.cpp
===================================================================
--- branches/soc-2011-cucumber/source/gameengine/Ketsji/KX_FontObject.cpp	2011-07-14 08:20:19 UTC (rev 38386)
+++ branches/soc-2011-cucumber/source/gameengine/Ketsji/KX_FontObject.cpp	2011-07-14 08:24:15 UTC (rev 38387)
@@ -43,32 +43,38 @@
 
 #define BGE_FONT_RES 100
 
-KX_FontObject::KX_FontObject(	void* sgReplicationInfo,
-								SG_Callbacks callbacks,
-								RAS_IRenderTools* rendertools,
-								Object *ob):
-	KX_GameObject(sgReplicationInfo, callbacks),
-	m_object(ob),
-	m_dpi(72),
-	m_resolution(1.f),
-	m_rendertools(rendertools)
+std::vector<STR_String> split_string(STR_String str)
 {
-	Curve *text = static_cast<Curve *> (ob->data);
+	std::vector<STR_String> text = std::vector<STR_String>();
 
 	/* Split the string upon new lines */
 	int begin=0, end=0;
-	STR_String str = STR_String(text->str);
 	while (end < str.Length())
 	{
 		if(str.GetAt(end) == '\n')
 		{
-			m_text.push_back(str.Mid(begin, end-begin));
+			text.push_back(str.Mid(begin, end-begin));
 			begin = end+1;
 		}
 		end++;
 	}
 	//Now grab the last line
-	m_text.push_back(str.Mid(begin, end-begin));
+	text.push_back(str.Mid(begin, end-begin));
+
+	return text;
+}
+KX_FontObject::KX_FontObject(	void* sgReplicationInfo,
+								SG_Callbacks callbacks,
+								RAS_IRenderTools* rendertools,
+								Object *ob):
+	KX_GameObject(sgReplicationInfo, callbacks),
+	m_object(ob),
+	m_dpi(72),
+	m_resolution(1.f),
+	m_rendertools(rendertools)
+{
+	Curve *text = static_cast<Curve *> (ob->data);
+	m_text = split_string(text->str);
 	m_fsize = text->fsize;
 
 	/* FO_BUILTIN_NAME != "default"	*/
@@ -172,10 +178,34 @@
 
 PyAttributeDef KX_FontObject::Attributes[] = {
 	//KX_PYATTRIBUTE_STRING_RW("text", 0, 280, false, KX_FontObject, m_text[0]), //arbitrary limit. 280 = 140 unicode chars in unicode
+	KX_PYATTRIBUTE_RW_FUNCTION("text", KX_FontObject, pyattr_get_text, pyattr_set_text),
 	KX_PYATTRIBUTE_FLOAT_RW("size", 0.0001f, 10000.0f, KX_FontObject, m_fsize),
 	KX_PYATTRIBUTE_FLOAT_RW("resolution", 0.0001f, 10000.0f, KX_FontObject, m_resolution),
 	/* KX_PYATTRIBUTE_INT_RW("dpi", 0, 10000, false, KX_FontObject, m_dpi), */// no real need for expose this I think
 	{ NULL }	//Sentinel
 };
 
+PyObject* KX_FontObject::pyattr_get_text(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+	KX_FontObject* self= static_cast<KX_FontObject*>(self_v);
+	STR_String str = STR_String();
+	for(int i=0; i<self->m_text.size(); ++i)
+	{
+		if(i!=0)
+			str += '\n';
+		str += self->m_text[i];
+	}
+	return PyUnicode_FromString(str.ReadPtr());
+}
+
+int KX_FontObject::pyattr_set_text(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
+{
+	KX_FontObject* self= static_cast<KX_FontObject*>(self_v);
+	if(!PyUnicode_Check(value))
+		return PY_SET_ATTR_FAIL;
+	char* chars = _PyUnicode_AsString(value);
+	self->m_text = split_string(STR_String(chars));
+	return PY_SET_ATTR_SUCCESS;
+}
+
 #endif // WITH_PYTHON

Modified: branches/soc-2011-cucumber/source/gameengine/Ketsji/KX_FontObject.h
===================================================================
--- branches/soc-2011-cucumber/source/gameengine/Ketsji/KX_FontObject.h	2011-07-14 08:20:19 UTC (rev 38386)
+++ branches/soc-2011-cucumber/source/gameengine/Ketsji/KX_FontObject.h	2011-07-14 08:24:15 UTC (rev 38387)
@@ -78,6 +78,8 @@
 */
 
 #ifdef WITH_PYTHON
+	static PyObject*	pyattr_get_text(void* self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+	static int			pyattr_set_text(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
 #endif
 
 };




More information about the Bf-blender-cvs mailing list