diff --git a/Source/Editor/Windows/Assets/FontWindow.cs b/Source/Editor/Windows/Assets/FontWindow.cs index e08a87b05..0f0bc1630 100644 --- a/Source/Editor/Windows/Assets/FontWindow.cs +++ b/Source/Editor/Windows/Assets/FontWindow.cs @@ -1,5 +1,6 @@ // Copyright (c) Wojciech Figat. All rights reserved. +using System; using System.ComponentModel; using FlaxEditor.Content; using FlaxEditor.CustomEditors; @@ -25,6 +26,10 @@ namespace FlaxEditor.Windows.Assets [EditorOrder(5), EditorDisplay("Properties"), Tooltip("The rasterization mode used when generating font atlases.")] public FontRasterMode RasterMode; + [DefaultValue(32.0f)] + [EditorOrder(6), EditorDisplay("Properties"), Tooltip("The font size used when generating MSDF font atlases.")] + public float MSDFSize; + [DefaultValue(FontHinting.Default)] [EditorOrder(10), EditorDisplay("Properties"), Tooltip("The font hinting used when rendering characters.")] public FontHinting Hinting; @@ -47,6 +52,7 @@ namespace FlaxEditor.Windows.Assets { Hinting = Hinting, RasterMode = RasterMode, + MSDFSize = MSDFSize, }; if (AntiAliasing) options.Flags |= FontFlags.AntiAliasing; @@ -63,6 +69,7 @@ namespace FlaxEditor.Windows.Assets Bold = (options.Flags & FontFlags.Bold) == FontFlags.Bold; Italic = (options.Flags & FontFlags.Italic) == FontFlags.Italic; RasterMode = options.RasterMode; + MSDFSize = options.MSDFSize; } } diff --git a/Source/Engine/Content/Upgraders/FontAssetUpgrader.h b/Source/Engine/Content/Upgraders/FontAssetUpgrader.h index 4ca6e6d73..b6e8ec12a 100644 --- a/Source/Engine/Content/Upgraders/FontAssetUpgrader.h +++ b/Source/Engine/Content/Upgraders/FontAssetUpgrader.h @@ -19,12 +19,13 @@ public: const Upgrader upgraders[] = { { 3, 4, &Upgrade_3_To_4 }, + { 4, 5, &Upgrade_4_To_5 }, }; setup(upgraders, ARRAY_COUNT(upgraders)); } private: - struct FontOptionsOld + struct FontOptions3 { FontHinting Hinting; FontFlags Flags; @@ -34,8 +35,8 @@ private: { ASSERT(context.Input.SerializedVersion == 3 && context.Output.SerializedVersion == 4); - FontOptionsOld optionsOld; - Platform::MemoryCopy(&optionsOld, context.Input.CustomData.Get(), sizeof(FontOptionsOld)); + FontOptions3 optionsOld; + Platform::MemoryCopy(&optionsOld, context.Input.CustomData.Get(), sizeof(FontOptions3)); FontOptions options; options.Hinting = optionsOld.Hinting; @@ -45,6 +46,30 @@ private: return CopyChunk(context, 0); } + + struct FontOptions4 + { + FontHinting Hinting; + FontFlags Flags; + FontRasterMode RasterMode; + }; + + static bool Upgrade_4_To_5(AssetMigrationContext& context) + { + ASSERT(context.Input.SerializedVersion == 4 && context.Output.SerializedVersion == 5); + + FontOptions4 optionsOld; + Platform::MemoryCopy(&optionsOld, context.Input.CustomData.Get(), sizeof(FontOptions4)); + + FontOptions options; + options.Hinting = optionsOld.Hinting; + options.Flags = optionsOld.Flags; + options.RasterMode = optionsOld.RasterMode; + options.MSDFSize = 32.0f; + context.Output.CustomData.Copy(&options); + + return CopyChunk(context, 0); + } }; #endif diff --git a/Source/Engine/ContentImporters/ImportFont.cpp b/Source/Engine/ContentImporters/ImportFont.cpp index 964f3907e..b01b36627 100644 --- a/Source/Engine/ContentImporters/ImportFont.cpp +++ b/Source/Engine/ContentImporters/ImportFont.cpp @@ -12,13 +12,14 @@ CreateAssetResult ImportFont::Import(CreateAssetContext& context) { // Base - IMPORT_SETUP(FontAsset, 4); + IMPORT_SETUP(FontAsset, 5); // Setup header FontOptions options; options.Hinting = FontHinting::Default; options.Flags = FontFlags::AntiAliasing; options.RasterMode = FontRasterMode::Bitmap; + options.MSDFSize = 32.0f; context.Data.CustomData.Copy(&options); // Open the file diff --git a/Source/Engine/Render2D/FontAsset.cs b/Source/Engine/Render2D/FontAsset.cs index 624daab5b..f49ae4ebb 100644 --- a/Source/Engine/Render2D/FontAsset.cs +++ b/Source/Engine/Render2D/FontAsset.cs @@ -13,7 +13,7 @@ namespace FlaxEngine /// true if this object has the same value as ; otherwise, false public bool Equals(FontOptions other) { - return Hinting == other.Hinting && Flags == other.Flags && RasterMode == other.RasterMode; + return Hinting == other.Hinting && Flags == other.Flags && RasterMode == other.RasterMode && MSDFSize == other.MSDFSize; } /// @@ -25,7 +25,7 @@ namespace FlaxEngine /// public override int GetHashCode() { - return HashCode.Combine((int)Hinting, (int)Flags, (int)RasterMode); + return HashCode.Combine((int)Hinting, (int)Flags, (int)RasterMode, MSDFSize); } /// @@ -36,7 +36,7 @@ namespace FlaxEngine /// true if has the same value as ; otherwise, false. public static bool operator ==(FontOptions left, FontOptions right) { - return left.Hinting == right.Hinting && left.Flags == right.Flags && left.RasterMode == right.RasterMode; + return left.Hinting == right.Hinting && left.Flags == right.Flags && left.RasterMode == right.RasterMode && left.MSDFSize == right.MSDFSize; } /// @@ -47,7 +47,7 @@ namespace FlaxEngine /// true if has a different value than ; otherwise,false. public static bool operator !=(FontOptions left, FontOptions right) { - return left.Hinting != right.Hinting || left.Flags != right.Flags || left.RasterMode != right.RasterMode; + return left.Hinting != right.Hinting || left.Flags != right.Flags || left.RasterMode != right.RasterMode || left.MSDFSize != right.MSDFSize; } } } diff --git a/Source/Engine/Render2D/FontAsset.h b/Source/Engine/Render2D/FontAsset.h index c3aa141a8..4bf2114e1 100644 --- a/Source/Engine/Render2D/FontAsset.h +++ b/Source/Engine/Render2D/FontAsset.h @@ -105,6 +105,11 @@ API_STRUCT() struct FontOptions /// The font rasterization mode. /// API_FIELD() FontRasterMode RasterMode; + + /// + /// The font size used when generating MSDF font atlases. + /// + API_FIELD() float MSDFSize; }; /// @@ -112,7 +117,7 @@ API_STRUCT() struct FontOptions /// API_CLASS(NoSpawn) class FLAXENGINE_API FontAsset : public BinaryAsset { - DECLARE_BINARY_ASSET_HEADER(FontAsset, 4); + DECLARE_BINARY_ASSET_HEADER(FontAsset, 5); friend Font; private: