BsBuiltinEditorResources.cpp 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #include "Utility/BsBuiltinEditorResources.h"
  4. #include "Resources/BsBuiltinResources.h"
  5. #include "GUI/BsGUIElementStyle.h"
  6. #include "Image/BsSpriteTexture.h"
  7. #include "Text/BsFont.h"
  8. #include "Image/BsTexture.h"
  9. #include "Material/BsShader.h"
  10. #include "Material/BsMaterial.h"
  11. #include "Resources/BsResources.h"
  12. #include "FileSystem/BsFileSystem.h"
  13. #include "Resources/BsResourceManifest.h"
  14. #include "FileSystem/BsDataStream.h"
  15. #include "GUI/BsGUITooltip.h"
  16. #include "Resources/BsBuiltinResourcesHelper.h"
  17. #include "Importer/BsImporter.h"
  18. #include "Importer/BsTextureImportOptions.h"
  19. #include "Serialization/BsFileSerializer.h"
  20. #include "BsEditorApplication.h"
  21. using json = nlohmann::json;
  22. namespace bs
  23. {
  24. const String BuiltinEditorResources::ObjectFieldStyleName = "GUIObjectField";
  25. const String BuiltinEditorResources::ObjectFieldLabelStyleName = "EditorFieldLabel";
  26. const String BuiltinEditorResources::ObjectFieldDropBtnStyleName = "DropButton";
  27. const String BuiltinEditorResources::ObjectFieldClearBtnStyleName = "ObjectClearButton";
  28. const String BuiltinEditorResources::TextureFieldStyleName = "GUITextureField";
  29. const String BuiltinEditorResources::TextureFieldLabelStyleName = "TextureFieldLabel";
  30. const String BuiltinEditorResources::TextureFieldDropStyleName = "TextureDrop";
  31. const String BuiltinEditorResources::TextureFieldClearBtnStyleName = "TextureClearButton";
  32. const String BuiltinEditorResources::DefaultFontFilename = "arial.ttf";
  33. const String BuiltinEditorResources::DefaultAAFontFilename = "arialAA.ttf";
  34. const UINT32 BuiltinEditorResources::DefaultFontSize = 8;
  35. const UINT32 BuiltinEditorResources::TitleFontSize = 16;
  36. const Color BuiltinEditorResources::TextNormalColor = Color(0.7f, 0.7f, 0.7f);
  37. const Color BuiltinEditorResources::TextActiveColor = Color(0.0f, 0.0f, 0.0f);
  38. const String BuiltinEditorResources::GUISkinFile = "GUISkin";
  39. const char* BuiltinEditorResources::ShaderFolder = "Shaders/";
  40. const char* BuiltinEditorResources::SkinFolder = "Skin/";
  41. const char* BuiltinEditorResources::IconFolder = "Icons/";
  42. const char* BuiltinEditorResources::Icon3DFolder = "Icons3D/";
  43. const char* BuiltinEditorResources::AnimatedSpritesFolder = "AnimatedSprites/";
  44. const char* BuiltinEditorResources::ShaderIncludeFolder = "Shaders/Includes/";
  45. const char* BuiltinEditorResources::SpriteSubFolder = "Sprites/";
  46. const String BuiltinEditorResources::FolderIconTex = u8"FolderIcon.psd";
  47. const String BuiltinEditorResources::MeshIconTex = u8"MeshIcon.psd";
  48. const String BuiltinEditorResources::TextureIconTex = u8"TextureIcon.psd";
  49. const String BuiltinEditorResources::FontIconTex = u8"FontIcon.psd";
  50. const String BuiltinEditorResources::PlainTextIconTex = u8"TextIcon.psd";
  51. const String BuiltinEditorResources::ScriptCodeIconTex = u8"CSharpIcon.psd";
  52. const String BuiltinEditorResources::ShaderIconTex = u8"ShaderIcon.psd";
  53. const String BuiltinEditorResources::ShaderIncludeIconTex = u8"ShaderIncludeIcon.psd";
  54. const String BuiltinEditorResources::MaterialIconTex = u8"MaterialIcon.psd";
  55. const String BuiltinEditorResources::SpriteTextureIconTex = u8"SpriteIcon.psd";
  56. const String BuiltinEditorResources::PrefabIconTex = u8"PrefabIcon.psd";
  57. const String BuiltinEditorResources::GUISkinIconTex = u8"GUISkinIcon.psd";
  58. const String BuiltinEditorResources::PhysicsMaterialIconTex = u8"PhysicsMaterialIcon.psd";
  59. const String BuiltinEditorResources::PhysicsMeshIconTex = u8"PhysicsMeshIcon.psd";
  60. const String BuiltinEditorResources::AudioClipIconTex = u8"AudioClipIcon.psd";
  61. const String BuiltinEditorResources::AnimationClipIconTex = u8"AnimationClipIcon.psd";
  62. const char* BuiltinEditorResources::SplashScreenName = u8"SplashScreen.png";
  63. const String BuiltinEditorResources::XButtonNormalTex = u8"XBtnNormal.png";
  64. /************************************************************************/
  65. /* SHADERS */
  66. /************************************************************************/
  67. const String BuiltinEditorResources::ShaderDockOverlayFile = u8"DockDropOverlay.bsl";
  68. const String BuiltinEditorResources::ShaderSceneGridFile = u8"SceneGrid.bsl";
  69. const String BuiltinEditorResources::ShaderPickingCullNoneFile = u8"PickingCullNone.bsl";
  70. const String BuiltinEditorResources::ShaderPickingCullCWFile = u8"PickingCullCW.bsl";
  71. const String BuiltinEditorResources::ShaderPickingCullCCWFile = u8"PickingCullCCW.bsl";
  72. const String BuiltinEditorResources::ShaderPickingAlphaCullNoneFile = u8"PickingAlphaCullNone.bsl";
  73. const String BuiltinEditorResources::ShaderPickingAlphaCullCWFile = u8"PickingAlphaCullCW.bsl";
  74. const String BuiltinEditorResources::ShaderPickingAlphaCullCCWFile = u8"PickingAlphaCullCCW.bsl";
  75. const String BuiltinEditorResources::ShaderLineGizmoFile = u8"LineGizmo.bsl";
  76. const String BuiltinEditorResources::ShaderWireGizmoFile = u8"WireGizmo.bsl";
  77. const String BuiltinEditorResources::ShaderSolidGizmoFile = u8"SolidGizmo.bsl";
  78. const String BuiltinEditorResources::ShaderLineHandleFile = u8"LineHandle.bsl";
  79. const String BuiltinEditorResources::ShaderSolidHandleFile = u8"SolidHandle.bsl";
  80. const String BuiltinEditorResources::ShaderHandleClearAlphaFile = u8"ClearHandleAlpha.bsl";
  81. const String BuiltinEditorResources::ShaderIconGizmoFile = u8"IconGizmo.bsl";
  82. const String BuiltinEditorResources::ShaderGizmoPickingFile = u8"GizmoPicking.bsl";
  83. const String BuiltinEditorResources::ShaderGizmoPickingAlphaFile = u8"GizmoPickingAlpha.bsl";
  84. const String BuiltinEditorResources::ShaderTextGizmoFile = u8"TextGizmo.bsl";
  85. const String BuiltinEditorResources::ShaderSelectionFile = u8"Selection.bsl";
  86. /************************************************************************/
  87. /* OTHER */
  88. /************************************************************************/
  89. const String BuiltinEditorResources::EmptyShaderCodeFile = u8"EmptyShaderText.txt";
  90. const String BuiltinEditorResources::EmptyCSScriptCodeFile = u8"EmptyCSScriptText.txt";
  91. BuiltinEditorResources::BuiltinEditorResources()
  92. {
  93. // Set up paths
  94. BuiltinRawDataFolder = Paths::getEditorDataPath() + "Raw/";
  95. EditorRawSkinFolder = BuiltinRawDataFolder + SkinFolder;
  96. EditorRawIconsFolder = BuiltinRawDataFolder + IconFolder;
  97. EditorRawShaderFolder = BuiltinRawDataFolder + ShaderFolder;
  98. EditorRawShaderIncludeFolder = BuiltinRawDataFolder + ShaderIncludeFolder;
  99. BuiltinDataFolder = Paths::getEditorDataPath();
  100. EditorSkinFolder = BuiltinDataFolder + SkinFolder;
  101. EditorSkinSpritesFolder = EditorSkinFolder + SpriteSubFolder;
  102. EditorIconFolder = BuiltinDataFolder + IconFolder;
  103. EditorIcon3DFolder = BuiltinDataFolder + Icon3DFolder;
  104. EditorIconSpritesFolder = EditorIconFolder + SpriteSubFolder;
  105. EditorIcon3DSpritesFolder = EditorIcon3DFolder + SpriteSubFolder;
  106. EditorAnimatedSpritesFolder = BuiltinDataFolder + AnimatedSpritesFolder + SpriteSubFolder;
  107. EditorShaderFolder = BuiltinDataFolder + ShaderFolder;
  108. EditorShaderIncludeFolder = BuiltinDataFolder + ShaderIncludeFolder;
  109. ResourceManifestPath = BuiltinDataFolder + "ResourceManifest.asset";
  110. // Load manifest
  111. if (FileSystem::exists(ResourceManifestPath))
  112. mResourceManifest = ResourceManifest::load(ResourceManifestPath, BuiltinDataFolder);
  113. if (mResourceManifest == nullptr)
  114. mResourceManifest = ResourceManifest::create("BuiltinResources");
  115. gResources().registerResourceManifest(mResourceManifest);
  116. // Load basic resources
  117. mShaderDockOverlay = getShader(ShaderDockOverlayFile);
  118. mShaderSceneGrid = getShader(ShaderSceneGridFile);
  119. mShaderPicking[(int)CULL_NONE] = getShader(ShaderPickingCullNoneFile);
  120. mShaderPicking[(int)CULL_CLOCKWISE] = getShader(ShaderPickingCullCWFile);
  121. mShaderPicking[(int)CULL_COUNTERCLOCKWISE] = getShader(ShaderPickingCullCCWFile);
  122. mShaderPickingAlpha[(int)CULL_NONE] = getShader(ShaderPickingAlphaCullNoneFile);
  123. mShaderPickingAlpha[(int)CULL_CLOCKWISE] = getShader(ShaderPickingAlphaCullCWFile);
  124. mShaderPickingAlpha[(int)CULL_COUNTERCLOCKWISE] = getShader(ShaderPickingAlphaCullCCWFile);
  125. mShaderGizmoSolid = getShader(ShaderSolidGizmoFile);
  126. mShaderGizmoLine = getShader(ShaderLineGizmoFile);
  127. mShaderGizmoWire = getShader(ShaderWireGizmoFile);
  128. mShaderGizmoIcon = getShader(ShaderIconGizmoFile);
  129. mShaderGizmoPicking = getShader(ShaderGizmoPickingFile);
  130. mShaderGizmoAlphaPicking = getShader(ShaderGizmoPickingAlphaFile);
  131. mShaderGizmoText = getShader(ShaderTextGizmoFile);
  132. mShaderHandleSolid = getShader(ShaderSolidHandleFile);
  133. mShaderHandleClearAlpha = getShader(ShaderHandleClearAlphaFile);
  134. mShaderHandleLine = getShader(ShaderLineHandleFile);
  135. mShaderSelection = getShader(ShaderSelectionFile);
  136. mDefaultFont = gResources().load<Font>(BuiltinDataFolder + (DefaultFontFilename + ".asset"));
  137. mDefaultAAFont = gResources().load<Font>(BuiltinDataFolder + (DefaultAAFontFilename + ".asset"));
  138. mSkin = gResources().load<GUISkin>(BuiltinDataFolder + (GUISkinFile + ".json.asset"));
  139. }
  140. HSpriteTexture BuiltinEditorResources::getGUIIcon(const String& name) const
  141. {
  142. Path texturePath = EditorIconSpritesFolder;
  143. texturePath.append("sprite_" + name + ".asset");
  144. return gResources().load<SpriteTexture>(texturePath);
  145. }
  146. HSpriteTexture BuiltinEditorResources::getGUIIcon3D(const String& name) const
  147. {
  148. Path texturePath = EditorIcon3DSpritesFolder;
  149. texturePath.append("sprite_" + name + ".asset");
  150. return gResources().load<SpriteTexture>(texturePath);
  151. }
  152. HSpriteTexture BuiltinEditorResources::getAnimatedSprite(const String& name) const
  153. {
  154. Path texturePath = EditorAnimatedSpritesFolder;
  155. texturePath.append("sprite_" + name + ".asset");
  156. return gResources().load<SpriteTexture>(texturePath);
  157. }
  158. HShader BuiltinEditorResources::getShader(const String& name) const
  159. {
  160. Path programPath = EditorShaderFolder;
  161. programPath.append(name + ".asset");
  162. HShader shader = gResources().load<Shader>(programPath);
  163. #if BS_DEBUG_MODE
  164. BuiltinResourcesHelper::verifyAndReportShader(shader);
  165. #endif
  166. return shader;
  167. }
  168. HMaterial BuiltinEditorResources::createDockDropOverlayMaterial() const
  169. {
  170. return Material::create(mShaderDockOverlay);
  171. }
  172. HMaterial BuiltinEditorResources::createSceneGridMaterial() const
  173. {
  174. return Material::create(mShaderSceneGrid);
  175. }
  176. HMaterial BuiltinEditorResources::createPicking(CullingMode cullMode) const
  177. {
  178. UINT32 modeIdx = (UINT32)cullMode;
  179. return Material::create(mShaderPicking[modeIdx]);
  180. }
  181. HMaterial BuiltinEditorResources::createPickingAlpha(CullingMode cullMode) const
  182. {
  183. UINT32 modeIdx = (UINT32)cullMode;
  184. return Material::create(mShaderPickingAlpha[modeIdx]);
  185. }
  186. HMaterial BuiltinEditorResources::createLineGizmoMat() const
  187. {
  188. return Material::create(mShaderGizmoLine);
  189. }
  190. HMaterial BuiltinEditorResources::createSolidGizmoMat() const
  191. {
  192. return Material::create(mShaderGizmoSolid);
  193. }
  194. HMaterial BuiltinEditorResources::createWireGizmoMat() const
  195. {
  196. return Material::create(mShaderGizmoWire);
  197. }
  198. HMaterial BuiltinEditorResources::createIconGizmoMat() const
  199. {
  200. return Material::create(mShaderGizmoIcon);
  201. }
  202. HMaterial BuiltinEditorResources::createGizmoPickingMat() const
  203. {
  204. return Material::create(mShaderGizmoPicking);
  205. }
  206. HMaterial BuiltinEditorResources::createAlphaGizmoPickingMat() const
  207. {
  208. return Material::create(mShaderGizmoAlphaPicking);
  209. }
  210. HMaterial BuiltinEditorResources::createLineHandleMat() const
  211. {
  212. return Material::create(mShaderHandleLine);
  213. }
  214. HMaterial BuiltinEditorResources::createTextGizmoMat() const
  215. {
  216. return Material::create(mShaderGizmoText);
  217. }
  218. HMaterial BuiltinEditorResources::createSolidHandleMat() const
  219. {
  220. return Material::create(mShaderHandleSolid);
  221. }
  222. HMaterial BuiltinEditorResources::createHandleClearAlphaMat() const
  223. {
  224. return Material::create(mShaderHandleClearAlpha);
  225. }
  226. HMaterial BuiltinEditorResources::createSelectionMat() const
  227. {
  228. return Material::create(mShaderSelection);
  229. }
  230. HSpriteTexture BuiltinEditorResources::getProjectLibraryIcon(ProjectLibraryIcon icon, int size) const
  231. {
  232. String iconName;
  233. switch (icon)
  234. {
  235. case ProjectLibraryIcon::Folder:
  236. iconName = FolderIconTex;
  237. break;
  238. case ProjectLibraryIcon::Font:
  239. iconName = FontIconTex;
  240. break;
  241. case ProjectLibraryIcon::Mesh:
  242. iconName = MeshIconTex;
  243. break;
  244. case ProjectLibraryIcon::Texture:
  245. iconName = TextureIconTex;
  246. break;
  247. case ProjectLibraryIcon::PlainText:
  248. iconName = PlainTextIconTex;
  249. break;
  250. case ProjectLibraryIcon::ScriptCode:
  251. iconName = ScriptCodeIconTex;
  252. break;
  253. case ProjectLibraryIcon::Shader:
  254. iconName = ShaderIconTex;
  255. break;
  256. case ProjectLibraryIcon::ShaderInclude:
  257. iconName = ShaderIncludeIconTex;
  258. break;
  259. case ProjectLibraryIcon::Material:
  260. iconName = MaterialIconTex;
  261. break;
  262. case ProjectLibraryIcon::SpriteTexture:
  263. iconName = SpriteTextureIconTex;
  264. break;
  265. case ProjectLibraryIcon::Prefab:
  266. iconName = PrefabIconTex;
  267. break;
  268. case ProjectLibraryIcon::GUISkin:
  269. iconName = GUISkinIconTex;
  270. break;
  271. case ProjectLibraryIcon::PhysicsMaterial:
  272. iconName = PhysicsMaterialIconTex;
  273. break;
  274. case ProjectLibraryIcon::PhysicsMesh:
  275. iconName = PhysicsMeshIconTex;
  276. break;
  277. case ProjectLibraryIcon::AudioClip:
  278. iconName = AudioClipIconTex;
  279. break;
  280. case ProjectLibraryIcon::AnimationClip:
  281. iconName = AnimationClipIconTex;
  282. break;
  283. case ProjectLibraryIcon::VectorField:
  284. iconName = SpriteTextureIconTex;
  285. break;
  286. }
  287. if (iconName.empty())
  288. return HSpriteTexture();
  289. if (size <= 16)
  290. iconName += "16";
  291. else if (size <= 32)
  292. iconName += "32";
  293. else if (size <= 48)
  294. iconName += "48";
  295. return getGUIIcon(iconName);
  296. }
  297. HSpriteTexture BuiltinEditorResources::getToolbarIcon(ToolbarIcon icon) const
  298. {
  299. switch (icon)
  300. {
  301. case ToolbarIcon::NewCamera:
  302. return getGUIIcon("ToolbarNewCameraIcon.png");
  303. case ToolbarIcon::NewRenderable:
  304. return getGUIIcon("ToolbarNewRenderableIcon.png");
  305. case ToolbarIcon::NewPointLight:
  306. return getGUIIcon("ToolbarNewPointLightIcon.png");
  307. case ToolbarIcon::NewDirLight:
  308. return getGUIIcon("ToolbarNewDirectionalLightIcon.png");
  309. case ToolbarIcon::NewSpotLight:
  310. return getGUIIcon("ToolbarNewSpotLightIcon.png");
  311. case ToolbarIcon::NewSceneObject:
  312. return getGUIIcon("ToolbarNewSceneObjectIcon.png");
  313. case ToolbarIcon::NewCube:
  314. return getGUIIcon("ToolbarNewCubeIcon.png");
  315. case ToolbarIcon::NewSphere:
  316. return getGUIIcon("ToolbarNewSphereIcon.png");
  317. case ToolbarIcon::NewCone:
  318. return getGUIIcon("ToolbarNewConeIcon.png");
  319. case ToolbarIcon::NewQuad:
  320. return getGUIIcon("ToolbarNewQuadIcon.png");
  321. case ToolbarIcon::NewMat:
  322. return getGUIIcon("ToolbarNewMaterialIcon.png");
  323. case ToolbarIcon::NewCSScript:
  324. return getGUIIcon("ToolbarNewCSScriptIcon.png");
  325. case ToolbarIcon::NewShader:
  326. return getGUIIcon("ToolbarNewShaderIcon.png");
  327. case ToolbarIcon::NewSpriteTex:
  328. return getGUIIcon("ToolbarNewSpriteTextureIcon.png");
  329. case ToolbarIcon::Pause:
  330. return getGUIIcon("ToolbarPauseIcon.png");
  331. case ToolbarIcon::Play:
  332. return getGUIIcon("ToolbarPlayIcon.png");
  333. case ToolbarIcon::Step:
  334. return getGUIIcon("ToolbarStepIcon.png");
  335. case ToolbarIcon::Undo:
  336. return getGUIIcon("ToolbarUndoIcon.png");
  337. case ToolbarIcon::Redo:
  338. return getGUIIcon("ToolbarRedoIcon.png");
  339. case ToolbarIcon::OpenProject:
  340. return getGUIIcon("ToolbarOpenProjectIcon.png");
  341. case ToolbarIcon::SaveProject:
  342. return getGUIIcon("ToolbarSaveProjectIcon.png");
  343. case ToolbarIcon::SaveScene:
  344. return getGUIIcon("ToolbarSaveSceneIcon.png");
  345. }
  346. return HSpriteTexture();
  347. }
  348. GUIContentImages BuiltinEditorResources::getSceneWindowIcon(SceneWindowIcon icon) const
  349. {
  350. HSpriteTexture off;
  351. HSpriteTexture on;
  352. switch (icon)
  353. {
  354. case SceneWindowIcon::View:
  355. off = getGUIIcon("SceneViewIcon.png");
  356. on = getGUIIcon("SceneViewIconOn.png");
  357. break;
  358. case SceneWindowIcon::Move:
  359. off = getGUIIcon("SceneMoveIcon.png");
  360. on = getGUIIcon("SceneMoveIconOn.png");
  361. break;
  362. case SceneWindowIcon::Rotate:
  363. off = getGUIIcon("SceneRotateIcon.png");
  364. on = getGUIIcon("SceneRotateIconOn.png");
  365. break;
  366. case SceneWindowIcon::Scale:
  367. off = getGUIIcon("SceneScaleIcon.png");
  368. on = getGUIIcon("SceneScaleIconOn.png");
  369. break;
  370. case SceneWindowIcon::Pivot:
  371. off = getGUIIcon("ScenePivotIcon.png");
  372. on = getGUIIcon("ScenePivotIconOn.png");
  373. break;
  374. case SceneWindowIcon::Center:
  375. off = getGUIIcon("SceneCenterIcon.png");
  376. on = getGUIIcon("SceneCenterIconOn.png");
  377. break;
  378. case SceneWindowIcon::Local:
  379. off = getGUIIcon("SceneLocalIcon.png");
  380. on = getGUIIcon("SceneLocalIconOn.png");
  381. break;
  382. case SceneWindowIcon::World:
  383. off = getGUIIcon("SceneWorldIcon.png");
  384. on = getGUIIcon("SceneWorldIconOn.png");
  385. break;
  386. case SceneWindowIcon::MoveSnap:
  387. off = getGUIIcon("SceneMoveSnapIcon.png");
  388. on = getGUIIcon("SceneMoveSnapIconOn.png");
  389. break;
  390. case SceneWindowIcon::RotateSnap:
  391. off = getGUIIcon("SceneRotateSnapIcon.png");
  392. on = getGUIIcon("SceneRotateSnapIconOn.png");
  393. break;
  394. case SceneWindowIcon::SceneCameraOptions:
  395. off = getGUIIcon("SceneCameraOptionsIcon.png");
  396. on = getGUIIcon("SceneCameraOptionsIcon.png");
  397. break;
  398. }
  399. GUIContentImages output;
  400. output.normal = off;
  401. output.hover = off;
  402. output.active = on;
  403. output.focused = off;
  404. output.normalOn = on;
  405. output.hoverOn = on;
  406. output.activeOn = on;
  407. output.focusedOn = on;
  408. return output;
  409. }
  410. HSpriteTexture BuiltinEditorResources::getSceneViewIcon(SceneViewIcon icon) const
  411. {
  412. switch (icon)
  413. {
  414. case SceneViewIcon::AudioListener:
  415. return getGUIIcon3D("SceneAudioListener.png");
  416. case SceneViewIcon::AudioSource:
  417. return getGUIIcon3D("SceneAudioSource.png");
  418. case SceneViewIcon::Camera:
  419. return getGUIIcon3D("SceneCamera.png");
  420. case SceneViewIcon::Decal:
  421. return getGUIIcon3D("SceneDecal.png");
  422. case SceneViewIcon::Light:
  423. return getGUIIcon3D("SceneLight.png");
  424. case SceneViewIcon::LightProbes:
  425. return getGUIIcon3D("SceneLightProbes.png");
  426. case SceneViewIcon::ParticleSystem:
  427. return getGUIIcon3D("SceneParticleSystem.png");
  428. case SceneViewIcon::ReflectionProbe:
  429. return getGUIIcon3D("SceneReflectionProbe.png");
  430. }
  431. return HSpriteTexture();
  432. }
  433. HSpriteTexture BuiltinEditorResources::getLibraryWindowIcon(LibraryWindowIcon icon) const
  434. {
  435. switch (icon)
  436. {
  437. case LibraryWindowIcon::Home:
  438. return getGUIIcon("LibraryHomeIcon.png");
  439. case LibraryWindowIcon::Up:
  440. return getGUIIcon("LibraryUpIcon.png");
  441. case LibraryWindowIcon::Clear:
  442. return getGUIIcon("LibraryClearSearchIcon.png");
  443. case LibraryWindowIcon::Options:
  444. return getGUIIcon("LibraryOptionsIcon.png");
  445. }
  446. return HSpriteTexture();
  447. }
  448. HSpriteTexture BuiltinEditorResources::getInspectorWindowIcon(InspectorWindowIcon icon) const
  449. {
  450. switch (icon)
  451. {
  452. case InspectorWindowIcon::Create:
  453. return getGUIIcon("InspectorCreateIcon.png");
  454. case InspectorWindowIcon::Clone:
  455. return getGUIIcon("InspectorCloneIcon.png");
  456. case InspectorWindowIcon::Clear:
  457. return getGUIIcon("InspectorClearIcon.png");
  458. case InspectorWindowIcon::Resize:
  459. return getGUIIcon("InspectorResizeIcon.png");
  460. case InspectorWindowIcon::Delete:
  461. return getGUIIcon("InspectorDeleteIcon.png");
  462. case InspectorWindowIcon::MoveUp:
  463. return getGUIIcon("InspectorMoveUpIcon.png");
  464. case InspectorWindowIcon::MoveDown:
  465. return getGUIIcon("InspectorMoveDownIcon.png");
  466. case InspectorWindowIcon::Edit:
  467. return getGUIIcon("InspectorEditIcon.png");
  468. case InspectorWindowIcon::Apply:
  469. return getGUIIcon("InspectorApplyIcon.png");
  470. case InspectorWindowIcon::Add:
  471. return getGUIIcon("InspectorAddIcon.png");
  472. case InspectorWindowIcon::Cancel:
  473. return getGUIIcon("InspectorCancelIcon.png");
  474. }
  475. return HSpriteTexture();
  476. }
  477. GUIContentImages BuiltinEditorResources::getAnimationWindowIcon(AnimationWindowIcon icon) const
  478. {
  479. HSpriteTexture off;
  480. HSpriteTexture on;
  481. switch (icon)
  482. {
  483. case AnimationWindowIcon::Play:
  484. off = getGUIIcon("AnimationPlayIcon.png");
  485. on = getGUIIcon("AnimationPlayIconOn.png");
  486. break;
  487. case AnimationWindowIcon::Record:
  488. off = getGUIIcon("AnimationRecordIcon.png");
  489. on = getGUIIcon("AnimationRecordIconOn.png");
  490. break;
  491. case AnimationWindowIcon::FrameForward:
  492. off = getGUIIcon("AnimationFrameForwardIcon.png");
  493. on = getGUIIcon("AnimationFrameForwardIconOn.png");
  494. break;
  495. case AnimationWindowIcon::FrameBack:
  496. off = getGUIIcon("AnimationFrameBackIcon.png");
  497. on = getGUIIcon("AnimationFrameBackIconOn.png");
  498. break;
  499. case AnimationWindowIcon::AddEvent:
  500. off = getGUIIcon("AnimationAddEventIcon.png");
  501. on = getGUIIcon("AnimationAddEventIconOn.png");
  502. break;
  503. case AnimationWindowIcon::AddKeyframe:
  504. off = getGUIIcon("AnimationAddKeyframeIcon.png");
  505. on = getGUIIcon("AnimationAddKeyframeIconOn.png");
  506. break;
  507. case AnimationWindowIcon::Event:
  508. off = getGUIIcon("AnimationEventIcon.png");
  509. on = off;
  510. break;
  511. case AnimationWindowIcon::Keyframe:
  512. off = getGUIIcon("AnimationKeyframeIcon.png");
  513. on = off;
  514. break;
  515. }
  516. GUIContentImages output;
  517. output.normal = off;
  518. output.hover = off;
  519. output.active = on;
  520. output.focused = off;
  521. output.normalOn = on;
  522. output.hoverOn = on;
  523. output.activeOn = on;
  524. output.focusedOn = on;
  525. return output;
  526. }
  527. HSpriteTexture BuiltinEditorResources::getEditorIcon(EditorIcon icon) const
  528. {
  529. switch (icon)
  530. {
  531. case EditorIcon::X:
  532. return getGUIIcon(XButtonNormalTex);
  533. case EditorIcon::Component:
  534. return getGUIIcon("IconComponent.png");
  535. case EditorIcon::SceneObject:
  536. return getGUIIcon("IconSceneObject.png");
  537. }
  538. return HSpriteTexture();
  539. }
  540. GUIContentImages BuiltinEditorResources::getEditorToggleIcon(EditorToggleIcon icon) const
  541. {
  542. HSpriteTexture off;
  543. HSpriteTexture on;
  544. switch (icon)
  545. {
  546. case EditorToggleIcon::AnimateProperty:
  547. off = getGUIIcon("AnimPropertyIcon.png");
  548. on = getGUIIcon("AnimPropertyIconOn.png");
  549. break;
  550. }
  551. GUIContentImages output;
  552. output.normal = off;
  553. output.hover = off;
  554. output.active = on;
  555. output.focused = off;
  556. output.normalOn = on;
  557. output.hoverOn = on;
  558. output.activeOn = on;
  559. output.focusedOn = on;
  560. return output;
  561. }
  562. HSpriteTexture BuiltinEditorResources::getLogMessageIcon(LogMessageIcon icon, UINT32 size, bool dark) const
  563. {
  564. if (size < 24) // Round to 16
  565. {
  566. if (dark)
  567. {
  568. switch (icon)
  569. {
  570. case LogMessageIcon::Info:
  571. return getGUIIcon("IconInfoDark.png");
  572. case LogMessageIcon::Warning:
  573. return getGUIIcon("IconWarningDark.png");
  574. case LogMessageIcon::Error:
  575. return getGUIIcon("IconErrorDark.png");
  576. }
  577. }
  578. else
  579. {
  580. switch (icon)
  581. {
  582. case LogMessageIcon::Info:
  583. return getGUIIcon("IconInfo.png");
  584. case LogMessageIcon::Warning:
  585. return getGUIIcon("IconWarning.png");
  586. case LogMessageIcon::Error:
  587. return getGUIIcon("IconError.png");
  588. }
  589. }
  590. }
  591. else // Round to 32
  592. {
  593. switch (icon)
  594. {
  595. case LogMessageIcon::Info:
  596. return getGUIIcon("IconInfo32.png");
  597. case LogMessageIcon::Warning:
  598. return getGUIIcon("IconWarning32.png");
  599. case LogMessageIcon::Error:
  600. return getGUIIcon("IconError32.png");
  601. }
  602. }
  603. return HSpriteTexture();
  604. }
  605. HSpriteTexture BuiltinEditorResources::getSprite(EditorSprites sprite)
  606. {
  607. switch(sprite)
  608. {
  609. case EditorSprites::Spinner:
  610. return getAnimatedSprite("Spinner.png");
  611. }
  612. return HSpriteTexture();
  613. }
  614. SPtr<PixelData> BuiltinEditorResources::getSplashScreen()
  615. {
  616. Path splashScreenPath = Paths::getEditorDataPath() + (String(SplashScreenName) + ".asset");
  617. FileDecoder fd(splashScreenPath);
  618. return std::static_pointer_cast<PixelData>(fd.decode());
  619. }
  620. String BuiltinEditorResources::getEmptyShaderCode() const
  621. {
  622. Path filePath = BuiltinDataFolder;
  623. filePath.append(EmptyShaderCodeFile);
  624. SPtr<DataStream> fileStream = FileSystem::openFile(filePath);
  625. if (fileStream != nullptr)
  626. return fileStream->getAsString();
  627. return StringUtil::BLANK;
  628. }
  629. String BuiltinEditorResources::getEmptyCSScriptCode() const
  630. {
  631. Path filePath = BuiltinDataFolder;
  632. filePath.append(EmptyCSScriptCodeFile);
  633. SPtr<DataStream> fileStream = FileSystem::openFile(filePath);
  634. if (fileStream != nullptr)
  635. return fileStream->getAsString();
  636. return StringUtil::BLANK;
  637. }
  638. Path BuiltinEditorResources::getDefaultWidgetLayoutPath()
  639. {
  640. return Paths::getEditorDataPath() + "Layout.asset";
  641. }
  642. }