BsScriptFontBitmap.cpp 4.2 KB

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