BsEngineGUI.cpp 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253
  1. #include "BsEngineGUI.h"
  2. #include "BsGUIElementStyle.h"
  3. #include "BsGUILabel.h"
  4. #include "BsGUIButton.h"
  5. #include "BsGUIInputBox.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::WindowBackgroundTexture = "C:\\Projects\\BansheeEngine\\Data\\Editor\\Skin\\WindowBgTile.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. const String EngineGUI::WindowFrameNormal = "C:\\Projects\\BansheeEngine\\Data\\Editor\\Skin\\WindowFrameNormal.psd";
  21. const String EngineGUI::WindowFrameFocused = "C:\\Projects\\BansheeEngine\\Data\\Editor\\Skin\\WindowFrameFocused.psd";
  22. const String EngineGUI::WindowTitleBarBg = "C:\\Projects\\BansheeEngine\\Data\\Editor\\Skin\\WindowTitleBarBg.psd";
  23. const String EngineGUI::WindowCloseButtonNormal = "C:\\Projects\\BansheeEngine\\Data\\Editor\\Skin\\WindowCloseBtnNormal.psd";
  24. const String EngineGUI::WindowCloseButtonHover = "C:\\Projects\\BansheeEngine\\Data\\Editor\\Skin\\WindowCloseBtnHover.psd";
  25. const String EngineGUI::WindowMinButtonNormal = "C:\\Projects\\BansheeEngine\\Data\\Editor\\Skin\\WindowMinBtnNormal.psd";
  26. const String EngineGUI::WindowMinButtonHover = "C:\\Projects\\BansheeEngine\\Data\\Editor\\Skin\\WindowMinBtnHover.psd";
  27. const String EngineGUI::TabbedBarBtnNormal = "C:\\Projects\\BansheeEngine\\Data\\Editor\\Skin\\TabbedButtonNormal.psd";
  28. const String EngineGUI::TabbedBarBtnActive = "C:\\Projects\\BansheeEngine\\Data\\Editor\\Skin\\TabbedButtonActive.psd";
  29. const String EngineGUI::InputBoxNormalTex = "C:\\Projects\\BansheeEngine\\Data\\Editor\\Skin\\InputBoxNormal.psd";
  30. const String EngineGUI::InputBoxHoverTex = "C:\\Projects\\BansheeEngine\\Data\\Editor\\Skin\\InputBoxHover.psd";
  31. const String EngineGUI::InputBoxFocusedTex = "C:\\Projects\\BansheeEngine\\Data\\Editor\\Skin\\InputBoxFocused.psd";
  32. const String EngineGUI::ScrollBarUpNormalTex = "C:\\Projects\\BansheeEngine\\Data\\Editor\\Skin\\ScrollBarUpNormal.psd";
  33. const String EngineGUI::ScrollBarUpHoverTex = "C:\\Projects\\BansheeEngine\\Data\\Editor\\Skin\\ScrollBarUpHover.psd";
  34. const String EngineGUI::ScrollBarUpActiveTex = "C:\\Projects\\BansheeEngine\\Data\\Editor\\Skin\\ScrollBarUpActive.psd";
  35. const String EngineGUI::ScrollBarDownNormalTex = "C:\\Projects\\BansheeEngine\\Data\\Editor\\Skin\\ScrollBarDownNormal.psd";
  36. const String EngineGUI::ScrollBarDownHoverTex = "C:\\Projects\\BansheeEngine\\Data\\Editor\\Skin\\ScrollBarDownHover.psd";
  37. const String EngineGUI::ScrollBarDownActiveTex = "C:\\Projects\\BansheeEngine\\Data\\Editor\\Skin\\ScrollBarDownActive.psd";
  38. const String EngineGUI::ScrollBarLeftNormalTex = "C:\\Projects\\BansheeEngine\\Data\\Editor\\Skin\\ScrollBarLeftNormal.psd";
  39. const String EngineGUI::ScrollBarLeftHoverTex = "C:\\Projects\\BansheeEngine\\Data\\Editor\\Skin\\ScrollBarLeftHover.psd";
  40. const String EngineGUI::ScrollBarLeftActiveTex = "C:\\Projects\\BansheeEngine\\Data\\Editor\\Skin\\ScrollBarLeftActive.psd";
  41. const String EngineGUI::ScrollBarRightNormalTex = "C:\\Projects\\BansheeEngine\\Data\\Editor\\Skin\\ScrollBarRightNormal.psd";
  42. const String EngineGUI::ScrollBarRightHoverTex = "C:\\Projects\\BansheeEngine\\Data\\Editor\\Skin\\ScrollBarRightHover.psd";
  43. const String EngineGUI::ScrollBarRightActiveTex = "C:\\Projects\\BansheeEngine\\Data\\Editor\\Skin\\ScrollBarRightActive.psd";
  44. const String EngineGUI::ScrollBarHandleHorzNormalTex = "C:\\Projects\\BansheeEngine\\Data\\Editor\\Skin\\ScrollBarHorzHandleNormal.psd";
  45. const String EngineGUI::ScrollBarHandleHorzHoverTex = "C:\\Projects\\BansheeEngine\\Data\\Editor\\Skin\\ScrollBarHorzHandleHover.psd";
  46. const String EngineGUI::ScrollBarHandleHorzActiveTex = "C:\\Projects\\BansheeEngine\\Data\\Editor\\Skin\\ScrollBarHorzHandleActive.psd";
  47. const String EngineGUI::ScrollBarHandleVertNormalTex = "C:\\Projects\\BansheeEngine\\Data\\Editor\\Skin\\ScrollBarVertHandleNormal.psd";
  48. const String EngineGUI::ScrollBarHandleVertHoverTex = "C:\\Projects\\BansheeEngine\\Data\\Editor\\Skin\\ScrollBarVertHandleHover.psd";
  49. const String EngineGUI::ScrollBarHandleVertActiveTex = "C:\\Projects\\BansheeEngine\\Data\\Editor\\Skin\\ScrollBarVertHandleActive.psd";
  50. EngineGUI::EngineGUI()
  51. {
  52. // TODO - Normally I want to load this from some file
  53. // Label
  54. // TODO - Instead of importing font every time, try to save a resource and then just load it?
  55. HFont font;
  56. {
  57. ImportOptionsPtr fontImportOptions = Importer::instance().createImportOptions(DefaultFontPath);
  58. if(rtti_is_of_type<FontImportOptions>(fontImportOptions))
  59. {
  60. FontImportOptions* importOptions = static_cast<FontImportOptions*>(fontImportOptions.get());
  61. Vector<CamelotFramework::UINT32>::type fontSizes;
  62. fontSizes.push_back(DefaultFontSize);
  63. importOptions->setFontSizes(fontSizes);
  64. importOptions->setAntialiasing(false);
  65. }
  66. font = Importer::instance().import(DefaultFontPath, fontImportOptions);
  67. }
  68. GUIElementStyle labelStyle;
  69. labelStyle.font = font;
  70. labelStyle.fontSize = DefaultFontSize;
  71. labelStyle.fixedWidth = false;
  72. labelStyle.fixedHeight = true;
  73. labelStyle.height = 16;
  74. labelStyle.minWidth = 10;
  75. mSkin.setStyle(GUILabel::getGUITypeName(), labelStyle);
  76. // Window frame
  77. HTexture windowFrameNormalTex = static_resource_cast<Texture>(Importer::instance().import(WindowFrameNormal));
  78. HTexture windowFrameFocusedTex = static_resource_cast<Texture>(Importer::instance().import(WindowFrameFocused));
  79. GUIElementStyle windowFrameStyle;
  80. windowFrameStyle.normal.texture = cm_shared_ptr<SpriteTexture, PoolAlloc>(std::cref(windowFrameNormalTex));
  81. windowFrameStyle.focused.texture = cm_shared_ptr<SpriteTexture, PoolAlloc>(std::cref(windowFrameFocusedTex));
  82. windowFrameStyle.border.left = 1;
  83. windowFrameStyle.border.right = 1;
  84. windowFrameStyle.border.top = 1;
  85. windowFrameStyle.border.bottom = 1;
  86. mSkin.setStyle("WindowFrame", windowFrameStyle);
  87. // Button
  88. HTexture buttonNormalTex = static_resource_cast<Texture>(Importer::instance().import(ButtonNormalTex));
  89. HTexture buttonHoverTex = static_resource_cast<Texture>(Importer::instance().import(ButtonHoverTex));
  90. GUIElementStyle buttonStyle;
  91. buttonStyle.normal.texture = cm_shared_ptr<SpriteTexture, PoolAlloc>(std::cref(buttonNormalTex));
  92. buttonStyle.hover.texture = cm_shared_ptr<SpriteTexture, PoolAlloc>(std::cref(buttonHoverTex));
  93. buttonStyle.border.left = 5;
  94. buttonStyle.border.right = 5;
  95. buttonStyle.border.top = 5;
  96. buttonStyle.border.bottom = 5;
  97. buttonStyle.margins.left = 4;
  98. buttonStyle.margins.right = 4;
  99. buttonStyle.margins.top = 4;
  100. buttonStyle.margins.bottom = 4;
  101. buttonStyle.contentOffset.left = 2;
  102. buttonStyle.contentOffset.right = 2;
  103. buttonStyle.fixedHeight = true;
  104. buttonStyle.height = 21;
  105. buttonStyle.minWidth = 10;
  106. buttonStyle.font = font;
  107. buttonStyle.fontSize = DefaultFontSize;
  108. buttonStyle.textHorzAlign = THA_Center;
  109. buttonStyle.textVertAlign = TVA_Center;
  110. mSkin.setStyle(GUIButton::getGUITypeName(), buttonStyle);
  111. // Window background texture
  112. HTexture windowBgTexture = static_resource_cast<Texture>(Importer::instance().import(WindowBackgroundTexture));
  113. GUIElementStyle windowBgStyle;
  114. windowBgStyle.normal.texture = cm_shared_ptr<SpriteTexture, PoolAlloc>(std::cref(windowBgTexture));
  115. mSkin.setStyle("WindowBackground", windowBgStyle);
  116. // Window title bar background
  117. HTexture windowTitleBarBg = static_resource_cast<Texture>(Importer::instance().import(WindowTitleBarBg));
  118. GUIElementStyle titleBarBgStyle;
  119. titleBarBgStyle.normal.texture = cm_shared_ptr<SpriteTexture, PoolAlloc>(std::cref(windowTitleBarBg));
  120. titleBarBgStyle.fixedHeight = true;
  121. titleBarBgStyle.height = 13;
  122. mSkin.setStyle("TitleBarBackground", titleBarBgStyle);
  123. // Tabbed title bar tab button
  124. HTexture tabbedBarBtnNormal = static_resource_cast<Texture>(Importer::instance().import(TabbedBarBtnNormal));
  125. HTexture tabbedBarBtnActive = static_resource_cast<Texture>(Importer::instance().import(TabbedBarBtnActive));
  126. GUIElementStyle tabbedBarButton;
  127. tabbedBarButton.normal.texture = cm_shared_ptr<SpriteTexture, PoolAlloc>(std::cref(tabbedBarBtnNormal));
  128. tabbedBarButton.hover.texture = cm_shared_ptr<SpriteTexture, PoolAlloc>(std::cref(tabbedBarBtnActive));
  129. tabbedBarButton.active.texture = tabbedBarButton.hover.texture;
  130. tabbedBarButton.normalOn.texture = tabbedBarButton.hover.texture;
  131. tabbedBarButton.hoverOn.texture = tabbedBarButton.hover.texture;
  132. tabbedBarButton.activeOn.texture = tabbedBarButton.hover.texture;
  133. tabbedBarButton.fixedHeight = true;
  134. tabbedBarButton.height = 13;
  135. tabbedBarButton.minWidth = 10;
  136. tabbedBarButton.maxWidth = 110;
  137. tabbedBarButton.font = font;
  138. tabbedBarButton.fontSize = DefaultFontSize;
  139. tabbedBarButton.textHorzAlign = THA_Center;
  140. tabbedBarButton.textVertAlign = TVA_Center;
  141. mSkin.setStyle("TabbedBarBtn", tabbedBarButton);
  142. // Tabbed title bar drag/drop button
  143. GUIElementStyle tabbedBarDropButton;
  144. tabbedBarDropButton.fixedHeight = true;
  145. tabbedBarDropButton.fixedWidth = true;
  146. tabbedBarDropButton.height = 13;
  147. tabbedBarDropButton.width = 6;
  148. mSkin.setStyle("TabbedBarDropArea", tabbedBarDropButton);
  149. // Window minimize button
  150. HTexture winMinBtnNormal = static_resource_cast<Texture>(Importer::instance().import(WindowMinButtonNormal));
  151. HTexture winMinBtnHover = static_resource_cast<Texture>(Importer::instance().import(WindowMinButtonHover));
  152. GUIElementStyle winMinButtonStyle;
  153. winMinButtonStyle.normal.texture = cm_shared_ptr<SpriteTexture, PoolAlloc>(std::cref(winMinBtnNormal));
  154. winMinButtonStyle.hover.texture = cm_shared_ptr<SpriteTexture, PoolAlloc>(std::cref(winMinBtnHover));
  155. winMinButtonStyle.active.texture = winMinButtonStyle.hover.texture;
  156. winMinButtonStyle.fixedHeight = true;
  157. winMinButtonStyle.fixedWidth = true;
  158. winMinButtonStyle.height = 7;
  159. winMinButtonStyle.width = 8;
  160. mSkin.setStyle("WinMinimizeBtn", winMinButtonStyle);
  161. // Window close button
  162. HTexture winCloseBtnNormal = static_resource_cast<Texture>(Importer::instance().import(WindowCloseButtonNormal));
  163. HTexture winCloseBtnHover = static_resource_cast<Texture>(Importer::instance().import(WindowCloseButtonHover));
  164. GUIElementStyle winCloseButtonStyle;
  165. winCloseButtonStyle.normal.texture = cm_shared_ptr<SpriteTexture, PoolAlloc>(std::cref(winCloseBtnNormal));
  166. winCloseButtonStyle.hover.texture = cm_shared_ptr<SpriteTexture, PoolAlloc>(std::cref(winCloseBtnHover));
  167. winCloseButtonStyle.active.texture = winCloseButtonStyle.active.texture;
  168. winCloseButtonStyle.fixedHeight = true;
  169. winCloseButtonStyle.fixedWidth = true;
  170. winCloseButtonStyle.height = 7;
  171. winCloseButtonStyle.width = 8;
  172. mSkin.setStyle("WinCloseBtn", winCloseButtonStyle);
  173. // Input box
  174. HTexture inputBoxNormalTex = static_resource_cast<Texture>(Importer::instance().import(InputBoxNormalTex));
  175. HTexture inputBoxHoverTex = static_resource_cast<Texture>(Importer::instance().import(InputBoxHoverTex));
  176. HTexture inputBoxFocusedTex = static_resource_cast<Texture>(Importer::instance().import(InputBoxFocusedTex));
  177. GUIElementStyle inputBoxStyle;
  178. inputBoxStyle.normal.texture = cm_shared_ptr<SpriteTexture, PoolAlloc>(std::cref(inputBoxNormalTex));
  179. inputBoxStyle.hover.texture = cm_shared_ptr<SpriteTexture, PoolAlloc>(std::cref(inputBoxHoverTex));
  180. inputBoxStyle.focused.texture = cm_shared_ptr<SpriteTexture, PoolAlloc>(std::cref(inputBoxFocusedTex));
  181. inputBoxStyle.active.texture = inputBoxStyle.focused.texture;
  182. inputBoxStyle.border.left = 5;
  183. inputBoxStyle.border.right = 5;
  184. inputBoxStyle.border.top = 5;
  185. inputBoxStyle.border.bottom = 5;
  186. inputBoxStyle.margins.left = 4;
  187. inputBoxStyle.margins.right = 4;
  188. inputBoxStyle.margins.top = 4;
  189. inputBoxStyle.margins.bottom = 4;
  190. inputBoxStyle.contentOffset.left = 2;
  191. inputBoxStyle.contentOffset.right = 2;
  192. inputBoxStyle.fixedHeight = true;
  193. inputBoxStyle.height = 21;
  194. inputBoxStyle.minWidth = 10;
  195. inputBoxStyle.font = font;
  196. inputBoxStyle.fontSize = DefaultFontSize;
  197. inputBoxStyle.textHorzAlign = THA_Left;
  198. inputBoxStyle.textVertAlign = TVA_Top;
  199. mSkin.setStyle(GUIInputBox::getGUITypeName(), inputBoxStyle);
  200. }
  201. }