BsEngineGUI.cpp 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. #include "BsEngineGUI.h"
  2. #include "BsGUIElementStyle.h"
  3. #include "BsGUILabel.h"
  4. #include "BsGUIWindowFrame.h"
  5. #include "BsGUIButton.h"
  6. #include "BsTextSprite.h"
  7. #include "BsSpriteTexture.h"
  8. #include "CmFont.h"
  9. #include "CmFontImportOptions.h"
  10. #include "CmImporter.h"
  11. #include "CmRTTIType.h"
  12. using namespace CamelotFramework;
  13. namespace BansheeEngine
  14. {
  15. const String EngineGUI::DefaultFontPath = "C:\\arial.ttf";
  16. const UINT32 EngineGUI::DefaultFontSize = 10;
  17. const String EngineGUI::WindowFramePrimaryTexture = "C:\\WindowFrame.psd";
  18. const String EngineGUI::ButtonNormalTex = "C:\\Projects\\BansheeEngine\\Data\\Editor\\Skin\\ButtonNormal.psd";
  19. const String EngineGUI::ButtonHoverTex = "C:\\Projects\\BansheeEngine\\Data\\Editor\\Skin\\ButtonHover.psd";
  20. EngineGUI::EngineGUI()
  21. {
  22. // TODO - Normally I want to load this from some file
  23. // Label
  24. // TODO - Instead of importing font every time, try to save a resource and then just load it?
  25. HFont font;
  26. {
  27. ImportOptionsPtr fontImportOptions = Importer::instance().createImportOptions(DefaultFontPath);
  28. if(rtti_is_of_type<FontImportOptions>(fontImportOptions))
  29. {
  30. FontImportOptions* importOptions = static_cast<FontImportOptions*>(fontImportOptions.get());
  31. vector<CamelotFramework::UINT32>::type fontSizes;
  32. fontSizes.push_back(DefaultFontSize);
  33. importOptions->setFontSizes(fontSizes);
  34. }
  35. font = Importer::instance().import(DefaultFontPath, fontImportOptions);
  36. }
  37. GUIElementStyle labelStyle;
  38. labelStyle.font = font;
  39. labelStyle.fontSize = DefaultFontSize;
  40. labelStyle.fixedWidth = false;
  41. labelStyle.fixedHeight = true;
  42. labelStyle.height = 16;
  43. labelStyle.minWidth = 10;
  44. mSkin.setStyle(GUILabel::getGUITypeName(), labelStyle);
  45. // Window frame
  46. HTexture windowFrameTex = static_resource_cast<Texture>(Importer::instance().import(WindowFramePrimaryTexture));
  47. windowFrameTex.waitUntilLoaded();
  48. GUIElementStyle windowFrameStyle;
  49. windowFrameStyle.normal.texture = SpriteTexturePtr(CM_NEW(SpriteTexture, PoolAlloc) SpriteTexture(windowFrameTex), &MemAllocDeleter<SpriteTexture, PoolAlloc>::deleter);
  50. windowFrameStyle.border.left = 1;
  51. windowFrameStyle.border.right = 1;
  52. windowFrameStyle.border.top = 1;
  53. windowFrameStyle.border.bottom = 1;
  54. mSkin.setStyle(GUIWindowFrame::getGUITypeName(), windowFrameStyle);
  55. // Button
  56. HTexture buttonNormalTex = static_resource_cast<Texture>(Importer::instance().import(ButtonNormalTex));
  57. HTexture buttonHoverTex = static_resource_cast<Texture>(Importer::instance().import(ButtonHoverTex));
  58. buttonNormalTex.waitUntilLoaded();
  59. buttonHoverTex.waitUntilLoaded();
  60. GUIElementStyle buttonStyle;
  61. buttonStyle.normal.texture = SpriteTexturePtr(CM_NEW(SpriteTexture, PoolAlloc) SpriteTexture(buttonNormalTex), &MemAllocDeleter<SpriteTexture, PoolAlloc>::deleter);
  62. buttonStyle.hover.texture = SpriteTexturePtr(CM_NEW(SpriteTexture, PoolAlloc) SpriteTexture(buttonHoverTex), &MemAllocDeleter<SpriteTexture, PoolAlloc>::deleter);
  63. buttonStyle.border.left = 5;
  64. buttonStyle.border.right = 5;
  65. buttonStyle.border.top = 5;
  66. buttonStyle.border.bottom = 5;
  67. buttonStyle.margins.left = 4;
  68. buttonStyle.margins.right = 4;
  69. buttonStyle.margins.top = 4;
  70. buttonStyle.margins.bottom = 4;
  71. buttonStyle.contentOffset.left = 2;
  72. buttonStyle.contentOffset.right = 2;
  73. buttonStyle.fixedHeight = true;
  74. buttonStyle.height = 21;
  75. buttonStyle.minWidth = 10;
  76. buttonStyle.font = font;
  77. buttonStyle.fontSize = DefaultFontSize;
  78. buttonStyle.textHorzAlign = THA_Center;
  79. buttonStyle.textVertAlign = TVA_Center;
  80. mSkin.setStyle(GUIButton::getGUITypeName(), buttonStyle);
  81. }
  82. }