Index: Core/Common/src/Core.Common.Util/Drawing/FontHelper.cs =================================================================== diff -u --- Core/Common/src/Core.Common.Util/Drawing/FontHelper.cs (revision 0) +++ Core/Common/src/Core.Common.Util/Drawing/FontHelper.cs (revision c0a586e98573119668b51c29185aab183b580e40) @@ -0,0 +1,57 @@ +// Copyright (C) Stichting Deltares 2021. All rights reserved. +// +// This file is part of Riskeer. +// +// Riskeer is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with this program. If not, see . +// +// All names, logos, and references to "Deltares" are registered trademarks of +// Stichting Deltares and remain full property of Stichting Deltares at all times. +// All rights reserved. + +using System; +using System.Drawing; +using System.Drawing.Text; +using System.Runtime.InteropServices; + +namespace Core.Common.Util.Drawing +{ + /// + /// Helper class for related logic. + /// + public static class FontHelper + { + /// + /// Creates a based on the provided byte array. + /// + /// The data to create the from. + /// The created . + public static Font CreateFont(byte[] fontData) + { + uint dummy = 0; + var fonts = new PrivateFontCollection(); + + IntPtr fontPtr = Marshal.AllocCoTaskMem(fontData.Length); + Marshal.Copy(fontData, 0, fontPtr, fontData.Length); + fonts.AddMemoryFont(fontPtr, fontData.Length); + AddFontMemResourceEx(fontPtr, (uint) fontData.Length, IntPtr.Zero, ref dummy); + Marshal.FreeCoTaskMem(fontPtr); + + return new Font(fonts.Families[0], 14.0F); + } + + [DllImport("gdi32.dll")] + private static extern IntPtr AddFontMemResourceEx(IntPtr pbFont, uint cbFont, + IntPtr pdv, [In] ref uint pcFonts); + } +} \ No newline at end of file Index: Core/Components/src/Core.Components.DotSpatial.Forms/MapControl.cs =================================================================== diff -u -re25cbbd88e41c07ec5be2ba2f686f2e85e0f3706 -rc0a586e98573119668b51c29185aab183b580e40 --- Core/Components/src/Core.Components.DotSpatial.Forms/MapControl.cs (.../MapControl.cs) (revision e25cbbd88e41c07ec5be2ba2f686f2e85e0f3706) +++ Core/Components/src/Core.Components.DotSpatial.Forms/MapControl.cs (.../MapControl.cs) (revision c0a586e98573119668b51c29185aab183b580e40) @@ -22,11 +22,10 @@ using System; using System.Collections.Generic; using System.Drawing; -using System.Drawing.Text; using System.Linq; -using System.Runtime.InteropServices; using System.Windows.Forms; using Core.Common.Base; +using Core.Common.Util.Drawing; using Core.Components.DotSpatial.Forms.Properties; using Core.Components.DotSpatial.Layer; using Core.Components.DotSpatial.Layer.BruTile; @@ -56,7 +55,6 @@ private readonly List drawnMapDataList = new List(); private readonly MapControlBackgroundLayerStatus backgroundLayerStatus = new MapControlBackgroundLayerStatus(); private readonly List mapDataLayersToUpdate = new List(); - private readonly PrivateFontCollection fonts = new PrivateFontCollection(); private Map map; private bool removing; @@ -73,7 +71,7 @@ { InitializeComponent(); - InitializeFont(); + SetFonts(); InitializeMap(); @@ -179,22 +177,10 @@ } } - [DllImport("gdi32.dll")] - private static extern IntPtr AddFontMemResourceEx(IntPtr pbFont, uint cbFont, - IntPtr pdv, [In] ref uint pcFonts); - - private void InitializeFont() + private void SetFonts() { - byte[] fontData = Resources.Deltares_Riskeer_Symbols; - IntPtr fontPtr = Marshal.AllocCoTaskMem(fontData.Length); - Marshal.Copy(fontData, 0, fontPtr, fontData.Length); + Font font = FontHelper.CreateFont(Resources.Deltares_Riskeer_Symbols); - uint dummy = 0; - fonts.AddMemoryFont(fontPtr, Resources.Deltares_Riskeer_Symbols.Length); - AddFontMemResourceEx(fontPtr, (uint) Resources.Deltares_Riskeer_Symbols.Length, IntPtr.Zero, ref dummy); - Marshal.FreeCoTaskMem(fontPtr); - - var font = new Font(fonts.Families[0], 14.0F); panToolStripButton.Font = font; zoomToRectangleToolStripButton.Font = font; zoomToVisibleLayersToolStripButton.Font = font;