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
 
 };

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to