BsBuiltinEditorResources.cpp 23 KB

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