BsScriptFontBitmap.cpp 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. #include "BsScriptFontBitmap.h"
  2. #include "BsScriptMeta.h"
  3. #include "BsMonoField.h"
  4. #include "BsMonoClass.h"
  5. #include "BsMonoManager.h"
  6. #include "BsScriptResourceManager.h"
  7. #include "BsScriptTexture2D.h"
  8. #include "BsMonoUtil.h"
  9. namespace BansheeEngine
  10. {
  11. ScriptFontBitmap::ScriptFontBitmap(MonoObject* instance, SPtr<const FontBitmap> bitmap)
  12. :ScriptObject(instance), mBitmap(bitmap)
  13. {
  14. }
  15. void ScriptFontBitmap::initRuntimeData()
  16. {
  17. metaData.scriptClass->addInternalCall("Internal_GetSize", &ScriptFontBitmap::internal_GetSize);
  18. metaData.scriptClass->addInternalCall("Internal_GetBaselineOffset", &ScriptFontBitmap::internal_GetBaselineOffset);
  19. metaData.scriptClass->addInternalCall("Internal_GetLineHeight", &ScriptFontBitmap::internal_GetLineHeight);
  20. metaData.scriptClass->addInternalCall("Internal_GetSpaceWidth", &ScriptFontBitmap::internal_GetSpaceWidth);
  21. metaData.scriptClass->addInternalCall("Internal_GetMissingChar", &ScriptFontBitmap::internal_GetMissingChar);
  22. metaData.scriptClass->addInternalCall("Internal_GetPages", &ScriptFontBitmap::internal_GetPages);
  23. metaData.scriptClass->addInternalCall("Internal_GetChar", &ScriptFontBitmap::internal_GetChar);
  24. metaData.scriptClass->addInternalCall("Internal_GetKerning", &ScriptFontBitmap::internal_GetKerning);
  25. }
  26. ScriptCharDesc ScriptFontBitmap::convertCharDesc(const CHAR_DESC& desc)
  27. {
  28. ScriptCharDesc output;
  29. output.charId = desc.charId;
  30. output.page = desc.page;
  31. output.uvX = desc.uvX;
  32. output.uvY = desc.uvY;
  33. output.uvWidth = desc.uvWidth;
  34. output.uvHeight = desc.uvHeight;
  35. output.width = desc.width;
  36. output.height = desc.height;
  37. output.xOffset = desc.xOffset;
  38. output.yOffset = desc.yOffset;
  39. output.xAdvance = desc.xAdvance;
  40. output.yAdvance = desc.yAdvance;
  41. return output;
  42. }
  43. MonoObject* ScriptFontBitmap::create(SPtr<const FontBitmap> bitmap)
  44. {
  45. MonoObject* managedInstance = metaData.scriptClass->createInstance();
  46. ScriptFontBitmap* fontBitmap = new (bs_alloc<ScriptFontBitmap>()) ScriptFontBitmap(managedInstance, bitmap);
  47. return managedInstance;
  48. }
  49. UINT32 ScriptFontBitmap::internal_GetSize(ScriptFontBitmap* instance)
  50. {
  51. return instance->mBitmap->size;
  52. }
  53. INT32 ScriptFontBitmap::internal_GetBaselineOffset(ScriptFontBitmap* instance)
  54. {
  55. return instance->mBitmap->fontDesc.baselineOffset;
  56. }
  57. UINT32 ScriptFontBitmap::internal_GetLineHeight(ScriptFontBitmap* instance)
  58. {
  59. return instance->mBitmap->fontDesc.lineHeight;
  60. }
  61. UINT32 ScriptFontBitmap::internal_GetSpaceWidth(ScriptFontBitmap* instance)
  62. {
  63. return instance->mBitmap->fontDesc.spaceWidth;
  64. }
  65. void ScriptFontBitmap::internal_GetMissingChar(ScriptFontBitmap* instance, ScriptCharDesc* output)
  66. {
  67. *output = convertCharDesc(instance->mBitmap->fontDesc.missingGlyph);
  68. }
  69. MonoArray* ScriptFontBitmap::internal_GetPages(ScriptFontBitmap* instance)
  70. {
  71. const Vector<HTexture>& texturePages = instance->mBitmap->texturePages;
  72. UINT32 numPages = texturePages.size();
  73. ScriptArray output = ScriptArray::create<ScriptTexture2D>(numPages);
  74. for (UINT32 i = 0; i < numPages; i++)
  75. {
  76. ScriptTexture2D* scriptTexture = nullptr;
  77. ScriptResourceManager::instance().getScriptResource(texturePages[i], &scriptTexture, true);
  78. output.set(i, scriptTexture->getManagedInstance());
  79. }
  80. return output.getInternal();
  81. }
  82. void ScriptFontBitmap::internal_GetChar(ScriptFontBitmap* instance, UINT32 id, ScriptCharDesc* output)
  83. {
  84. *output = convertCharDesc(instance->mBitmap->getCharDesc(id));
  85. }
  86. MonoArray* ScriptFontBitmap::internal_GetKerning(ScriptFontBitmap* instance, UINT32 id)
  87. {
  88. const CHAR_DESC& charDesc = instance->mBitmap->getCharDesc(id);
  89. UINT32 numPairs = (UINT32)charDesc.kerningPairs.size();
  90. ScriptArray outArray = ScriptArray::create<ScriptKerningPair>(numPairs);
  91. for (UINT32 i = 0; i < numPairs; i++)
  92. outArray.set(i, charDesc.kerningPairs[i]);
  93. return outArray.getInternal();
  94. }
  95. ScriptKerningPair::ScriptKerningPair(MonoObject* instance)
  96. :ScriptObject(instance)
  97. { }
  98. void ScriptKerningPair::initRuntimeData()
  99. { }
  100. }