diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..32341a3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,80 @@ +# Visual Studio 2015 user specific files +.vs/ + +# Visual Studio 2015 database file +*.VC.db + +# Compiled Object files +*.slo +*.lo +*.o +*.obj + +# Precompiled Headers +*.gch +*.pch + +# Compiled Dynamic libraries +*.so +*.dylib +*.dll + +# Fortran module files +*.mod + +# Compiled Static libraries +*.lai +*.la +*.a +*.lib + +# Executables +*.exe +*.out +*.app +*.ipa + +# These project files can be generated by the engine +*.xcodeproj +*.xcworkspace +*.sln +*.suo +*.opensdf +*.sdf +*.VC.db +*.VC.opendb + +# Precompiled Assets +SourceArt/**/*.png +SourceArt/**/*.tga + +# Binary Files +Binaries/* +Plugins/*/Binaries/* + +# Builds +Build/* + +# Whitelist PakBlacklist-.txt files +!Build/*/ +Build/*/** +!Build/*/PakBlacklist*.txt + +# Don't ignore icon files in Build +!Build/**/*.ico + +# Built data for maps +*_BuiltData.uasset + +# Configuration files generated by the Editor +Saved/* + +# Compiled source files for the engine to use +Intermediate/* +Plugins/*/Intermediate/* + +# Cache files for the editor to use +DerivedDataCache/* + +# Content shouldn't be included +Content diff --git a/Source/UE4EditorCustomize/Private/UE4EditorCustomize.cpp b/Source/UE4EditorCustomize/Private/UE4EditorCustomize.cpp index 6868f36..443bc9f 100644 --- a/Source/UE4EditorCustomize/Private/UE4EditorCustomize.cpp +++ b/Source/UE4EditorCustomize/Private/UE4EditorCustomize.cpp @@ -639,9 +639,42 @@ FString FUE4EditorCustomizeModule::Uint8ToExtension(uint8 Extension) } } +void FUE4EditorCustomizeModule::CacheOriginalBrushes() +{ + FSlateStyleSet* EditorStyles = (FSlateStyleSet*)&FEditorStyle::Get(); + const FName BrushesName[]= + { + "Graph.Panel.SolidBackground", + "ToolPanel.GroupBorder", + "ToolPanel.DarkGroupBorder", + "SCSEditor.TreePanel", + "SettingsEditor.CheckoutWarningBorder", + "DetailsView.CategoryTop_Hovered", + "DetailsView.CategoryTop", + "DetailsView.CategoryMiddle_Hovered", + "DetailsView.CategoryMiddle", + "DetailsView.CategoryMiddle_Highlighted", + "DetailsView.CollapsedCategory_Hovered", + "DetailsView.CollapsedCategory", + "DetailsView.CategoryBottom", + "DetailsView.AdvancedDropdownBorder", + "Toolbar.Background" + }; + for (const FName& CurName : BrushesName) + { + const FSlateBrush* tmpCachedBrush = EditorStyles->GetBrush(CurName); + CachedOriginalBrushes.FindOrAdd(CurName) = tmpCachedBrush; + } +} + void FUE4EditorCustomizeModule::StartupModule() { // This code will execute after your module is loaded into memory; the exact timing is specified in the .uplugin file per-module + + //Cache Original Brushes first. + //Prepare for ShutdownModule() + CacheOriginalBrushes(); + UEditorCustomizeSetting* StyleSettings = GetMutableDefault(); GetMutableDefault()->bUseGrid = StyleSettings->EditorUseGrid; ApplyCoreStyle(StyleSettings); @@ -667,8 +700,10 @@ void FUE4EditorCustomizeModule::StartupModule() void FUE4EditorCustomizeModule::ShutdownModule() { - FEditorStyle::ResetToDefault(); - FCoreStyle::ResetToDefault(); + //Restore Cached Brush + //Editor will delete all editor brushes when exit. + //So if the brushes didn't restore, It will cause Editor Crash. + RestoreCachedBrush(); FModuleManager::LoadModuleChecked("Settings").UnregisterSettings("Project", "Plugins", "UE4EditorCustomize"); } @@ -1029,10 +1064,13 @@ void FUE4EditorCustomizeModule::ResetTextStyle() GConfig->Flush(false); } -void FUE4EditorCustomizeModule::ResetAllImmediately() +void FUE4EditorCustomizeModule::RestoreCachedBrush() { - FEditorStyle::ResetToDefault(); - FCoreStyle::ResetToDefault(); + FSlateStyleSet* EditorStyles = (FSlateStyleSet*)&FEditorStyle::Get(); + for (auto it=CachedOriginalBrushes.CreateConstIterator();it;++it) + { + EditorStyles->Set(it->Key, (FSlateBrush*)it->Value); + } } #undef LOCTEXT_NAMESPACE diff --git a/Source/UE4EditorCustomize/Public/UE4EditorCustomize.h b/Source/UE4EditorCustomize/Public/UE4EditorCustomize.h index 3d6d4dd..23acbfe 100644 --- a/Source/UE4EditorCustomize/Public/UE4EditorCustomize.h +++ b/Source/UE4EditorCustomize/Public/UE4EditorCustomize.h @@ -31,6 +31,7 @@ class FUE4EditorCustomizeModule : public IModuleInterface }; TSharedPtr SettingS; + TMap CachedOriginalBrushes; TArray FindReferencedAsset(); FString GetAssetAbsolutePath(FString PackageName); bool _Internal_ImportUTheme_v0(TArray& FileData, FText* ErrorMsg=nullptr); @@ -48,6 +49,7 @@ class FUE4EditorCustomizeModule : public IModuleInterface bool _Internal_AskUThemeInfo(FUThemeInfo_v0* OutInfo); uint8 ExtensionToUint8(FString FileExtension); FString Uint8ToExtension(uint8 Extension); + void CacheOriginalBrushes(); public: /** IModuleInterface implementation */ virtual void StartupModule() override; @@ -65,5 +67,5 @@ class FUE4EditorCustomizeModule : public IModuleInterface void ResetEditorStyle(); void ResetCoreStyle(); void ResetTextStyle(); - void ResetAllImmediately(); + void RestoreCachedBrush(); }; \ No newline at end of file diff --git a/UE4EditorCustomize.uplugin b/UE4EditorCustomize.uplugin index c16ddfd..3e24c1c 100644 --- a/UE4EditorCustomize.uplugin +++ b/UE4EditorCustomize.uplugin @@ -1,7 +1,7 @@ { "FileVersion": 3, - "Version": 6, - "VersionName": "1.3", + "Version": 7, + "VersionName": "1.31", "FriendlyName": "UE4Editor Customize", "Description": "Change UE4Editor To a New Style.", "Category": "Editor", @@ -11,7 +11,7 @@ "MarketplaceURL": "com.epicgames.launcher://ue/marketplace/content/0d22d9af59624886a6fccd9573fefa90", "SupportURL": "https://github.com/Jack-Myth/UE4EditorCustomize/issues", "CanContainContent": true, - "IsBetaVersion": true, + "IsBetaVersion": false, "Installed": false, "Modules": [ {