From 8be7f55e87b8e967e57b0bafa1e85d0554973eaa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Ku=C4=8Dera?= Date: Thu, 2 Mar 2023 15:25:02 +0000 Subject: [PATCH] initial commit --- .gitignore | 363 +++++++++++++++++ DWBox.png | Bin 0 -> 91012 bytes DWBox.sln | 33 ++ DWBox/App.config | 18 + DWBox/App.xaml | 128 ++++++ DWBox/App.xaml.cs | 25 ++ DWBox/Converters/FeaturesConverter.cs | 45 +++ DWBox/DWBox.csproj | 35 ++ DWBox/DirectWriteElement.cs | 294 ++++++++++++++ DWBox/FontFaceReferenceCollection.cs | 92 +++++ DWBox/FontFolder.ico | Bin 0 -> 69248 bytes DWBox/GlyphRunWindow.xaml | 43 ++ DWBox/GlyphRunWindow.xaml.cs | 44 +++ DWBox/MainWindow.xaml | 274 +++++++++++++ DWBox/MainWindow.xaml.cs | 504 ++++++++++++++++++++++++ DWBox/Properties/AssemblyInfo.cs | 58 +++ DWBox/Properties/Settings.Designer.cs | 38 ++ DWBox/Properties/Settings.settings | 9 + DWBox/Renderers/BitmapRenderer.cs | 33 ++ DWBox/Renderers/RecordingRenderer.cs | 70 ++++ DWBox/TextAnalysisWindow.xaml | 62 +++ DWBox/TextAnalysisWindow.xaml.cs | 39 ++ DWBox/UAM/LabelGrid.cs | 161 ++++++++ DWBox/ViewModels/BoxItem.cs | 132 +++++++ DWBox/ViewModels/BoxItemCollection.cs | 72 ++++ DWBox/ViewModels/GlyphRunDetails.cs | 37 ++ DWBox/ViewModels/GlyphRunDetailsItem.cs | 51 +++ DWBox/ViewModels/TextAnalysis.cs | 99 +++++ DWBox/ViewModels/TextAnalysisItem.cs | 62 +++ GlyphRun.png | Bin 0 -> 33467 bytes README.md | 15 + TextAnalysis.png | Bin 0 -> 56905 bytes 32 files changed, 2836 insertions(+) create mode 100644 .gitignore create mode 100644 DWBox.png create mode 100644 DWBox.sln create mode 100644 DWBox/App.config create mode 100644 DWBox/App.xaml create mode 100644 DWBox/App.xaml.cs create mode 100644 DWBox/Converters/FeaturesConverter.cs create mode 100644 DWBox/DWBox.csproj create mode 100644 DWBox/DirectWriteElement.cs create mode 100644 DWBox/FontFaceReferenceCollection.cs create mode 100644 DWBox/FontFolder.ico create mode 100644 DWBox/GlyphRunWindow.xaml create mode 100644 DWBox/GlyphRunWindow.xaml.cs create mode 100644 DWBox/MainWindow.xaml create mode 100644 DWBox/MainWindow.xaml.cs create mode 100644 DWBox/Properties/AssemblyInfo.cs create mode 100644 DWBox/Properties/Settings.Designer.cs create mode 100644 DWBox/Properties/Settings.settings create mode 100644 DWBox/Renderers/BitmapRenderer.cs create mode 100644 DWBox/Renderers/RecordingRenderer.cs create mode 100644 DWBox/TextAnalysisWindow.xaml create mode 100644 DWBox/TextAnalysisWindow.xaml.cs create mode 100644 DWBox/UAM/LabelGrid.cs create mode 100644 DWBox/ViewModels/BoxItem.cs create mode 100644 DWBox/ViewModels/BoxItemCollection.cs create mode 100644 DWBox/ViewModels/GlyphRunDetails.cs create mode 100644 DWBox/ViewModels/GlyphRunDetailsItem.cs create mode 100644 DWBox/ViewModels/TextAnalysis.cs create mode 100644 DWBox/ViewModels/TextAnalysisItem.cs create mode 100644 GlyphRun.png create mode 100644 README.md create mode 100644 TextAnalysis.png diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7d8da62 --- /dev/null +++ b/.gitignore @@ -0,0 +1,363 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore + +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Mono auto generated files +mono_crash.* + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Ww][Ii][Nn]32/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Oo]ut/ +[Ll]og/ +[Ll]ogs/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUnit +*.VisualState.xml +TestResult.xml +nunit-*.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ + +# ASP.NET Scaffolding +ScaffoldingReadMe.txt + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Coverlet is a free, cross platform Code Coverage Tool +coverage*.json +coverage*.xml +coverage*.info + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# NuGet Symbol Packages +*.snupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx +*.appxbundle +*.appxupload + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- [Bb]ackup.rdl +*- [Bb]ackup ([0-9]).rdl +*- [Bb]ackup ([0-9][0-9]).rdl + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ + +# Ionide (cross platform F# VS Code tools) working folder +.ionide/ + +# Fody - auto-generated XML schema +FodyWeavers.xsd \ No newline at end of file diff --git a/DWBox.png b/DWBox.png new file mode 100644 index 0000000000000000000000000000000000000000..1aa4a76be27bd7c932fe73c772563ac01e469b33 GIT binary patch literal 91012 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 literal 0 HcmV?d00001 diff --git a/DWBox.sln b/DWBox.sln new file mode 100644 index 0000000..149c76f --- /dev/null +++ b/DWBox.sln @@ -0,0 +1,33 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.6.33417.168 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DWBox", "DWBox\DWBox.csproj", "{12AA4F14-7A34-40F6-B94F-5CADD8D5A95D}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{DF38D520-5481-4E5C-8592-8E4DA1F13B6E}" + ProjectSection(SolutionItems) = preProject + DWBox.png = DWBox.png + GlyphRun.png = GlyphRun.png + README.md = README.md + TextAnalysis.png = TextAnalysis.png + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {12AA4F14-7A34-40F6-B94F-5CADD8D5A95D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {12AA4F14-7A34-40F6-B94F-5CADD8D5A95D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {12AA4F14-7A34-40F6-B94F-5CADD8D5A95D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {12AA4F14-7A34-40F6-B94F-5CADD8D5A95D}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {C5B93731-25A7-4B49-91E8-A368BF436AC4} + EndGlobalSection +EndGlobal diff --git a/DWBox/App.config b/DWBox/App.config new file mode 100644 index 0000000..b4b029a --- /dev/null +++ b/DWBox/App.config @@ -0,0 +1,18 @@ + + + + +

+ + + + + + + + + + + + + \ No newline at end of file diff --git a/DWBox/App.xaml b/DWBox/App.xaml new file mode 100644 index 0000000..e332e23 --- /dev/null +++ b/DWBox/App.xaml @@ -0,0 +1,128 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/DWBox/App.xaml.cs b/DWBox/App.xaml.cs new file mode 100644 index 0000000..a76908a --- /dev/null +++ b/DWBox/App.xaml.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Configuration; +using System.Data; +using System.Linq; +using System.Threading.Tasks; +using System.Windows; +using Win32.DWrite; + +namespace DWBox +{ + /// + /// Interaction logic for App.xaml + /// + public partial class App : Application + { + protected override void OnStartup(StartupEventArgs e) + { + if (e.Args?.Contains("core") == true) + DWriteFactory.SwitchLibraries(true); + + base.OnStartup(e); + } + } +} diff --git a/DWBox/Converters/FeaturesConverter.cs b/DWBox/Converters/FeaturesConverter.cs new file mode 100644 index 0000000..ca9f9bd --- /dev/null +++ b/DWBox/Converters/FeaturesConverter.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.Globalization; +using System.Windows.Data; +using Win32.DWrite; + +namespace DWBox +{ + public class FeaturesConverter : IValueConverter + { + public object Convert(object value, Type targetType, object parameter, CultureInfo culture) + { + if (value is not string s || string.IsNullOrWhiteSpace(s)) + return null; + + string[] tags = s.Split(); + List parsed = new List(tags.Length); + + foreach (string tag in tags) + if (TryParse(tag, out var t)) + parsed.Add(t); + + return parsed; + } + + public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) + { + throw new NotImplementedException(); + } + + public static bool TryParse(string s, out FontFeatureTag tag) + { + tag = default; + + if (s == null) + return false; + + if (s.Length != 4) + return Enum.TryParse(s, out tag); + + tag = (FontFeatureTag)DWrite.StringToTag(s); + return true; + } + } +} diff --git a/DWBox/DWBox.csproj b/DWBox/DWBox.csproj new file mode 100644 index 0000000..1b1993d --- /dev/null +++ b/DWBox/DWBox.csproj @@ -0,0 +1,35 @@ + + + + net48 + WinExe + true + latest + false + FontFolder.ico + + https://nuget.miloush.net/nuget + + + + + + + + + + + True + True + Settings.settings + + + + + + SettingsSingleFileGenerator + Settings.designer.cs + + + + \ No newline at end of file diff --git a/DWBox/DirectWriteElement.cs b/DWBox/DirectWriteElement.cs new file mode 100644 index 0000000..36d8453 --- /dev/null +++ b/DWBox/DirectWriteElement.cs @@ -0,0 +1,294 @@ +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Globalization; +using System.Linq; +using System.Runtime.InteropServices; +using System.Windows; +using System.Windows.Data; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Media.Media3D; +using Win32; +using Win32.DWrite; + +namespace DWBox +{ + public class DirectWriteElement : FrameworkElement + { + public static readonly DependencyProperty FontSizeProperty = DependencyProperty.Register(nameof(FontSize), typeof(float), typeof(DirectWriteElement), new FrameworkPropertyMetadata(48f, InvalidateTextFormat)); + public static readonly DependencyProperty LocaleNameProperty = DependencyProperty.Register(nameof(LocaleName), typeof(string), typeof(DirectWriteElement), new FrameworkPropertyMetadata(null, InvalidateTextFormat)); + + public static readonly DependencyProperty FontFaceProperty = DependencyProperty.Register(nameof(FontFace), typeof(FontFace), typeof(DirectWriteElement), new FrameworkPropertyMetadata(null, InvalidateTextFormat)); + public static readonly DependencyProperty FontAxisValuesProperty = DependencyProperty.Register(nameof(FontAxisValues), typeof(IList), typeof(DirectWriteElement), new FrameworkPropertyMetadata(null, InvalidateTextFormat)); + public static readonly DependencyProperty FontSetProperty = DependencyProperty.Register(nameof(FontSet), typeof(FontSet), typeof(DirectWriteElement), new FrameworkPropertyMetadata(null, InvalidateTextFormat)); + + public static readonly DependencyProperty TextProperty = DependencyProperty.Register(nameof(Text), typeof(string), typeof(DirectWriteElement), new FrameworkPropertyMetadata(string.Empty, FrameworkPropertyMetadataOptions.AffectsMeasure | FrameworkPropertyMetadataOptions.AffectsArrange | FrameworkPropertyMetadataOptions.AffectsRender)); + public static readonly DependencyProperty FontFeaturesProperty = DependencyProperty.Register(nameof(FontFeatures), typeof(IList), typeof(DirectWriteElement), new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.AffectsMeasure | FrameworkPropertyMetadataOptions.AffectsArrange | FrameworkPropertyMetadataOptions.AffectsRender)); + public static readonly DependencyProperty ParagraphReadingDirectionProperty = DependencyProperty.Register(nameof(ParagraphReadingDirection), typeof(ReadingDirection), typeof(DirectWriteElement), new FrameworkPropertyMetadata(ReadingDirection.LeftToRight, InvalidateTextFormat)); + public static readonly DependencyProperty ParagraphFlowDirectionProperty = DependencyProperty.Register(nameof(ParagraphFlowDirection), typeof(Win32.DWrite.FlowDirection), typeof(DirectWriteElement), new FrameworkPropertyMetadata(Win32.DWrite.FlowDirection.TopToBottom, InvalidateTextFormat)); + + + public FontSet FontSet + { + get { return (FontSet)GetValue(FontSetProperty); } + set { SetValue(FontSetProperty, value); } + } + + public IList FontAxisValues + { + get { return (FontAxisValue[])GetValue(FontAxisValuesProperty); } + set { SetValue(FontAxisValuesProperty, value); } + } + + public FontFace FontFace + { + get { return (FontFace)GetValue(FontFaceProperty); } + set { SetValue(FontFaceProperty, value); } + } + + public IList FontFeatures + { + get { return (IList)GetValue(FontFeaturesProperty); } + set { SetValue(FontFeaturesProperty, value); } + } + + public string LocaleName + { + get { return (string)GetValue(LocaleNameProperty); } + set { SetValue(LocaleNameProperty, value); } + } + + public Win32.DWrite.FlowDirection ParagraphFlowDirection + { + get { return (Win32.DWrite.FlowDirection)GetValue(ParagraphFlowDirectionProperty); } + set { SetValue(ParagraphFlowDirectionProperty, value); } + } + + public ReadingDirection ParagraphReadingDirection + { + get { return (ReadingDirection)GetValue(ParagraphReadingDirectionProperty); } + set { SetValue(ParagraphReadingDirectionProperty, value); } + } + + public string Text + { + get { return (string)GetValue(TextProperty); } + set { SetValue(TextProperty, value); } + } + + public float FontSize + { + get { return (float)GetValue(FontSizeProperty); } + set { SetValue(FontSizeProperty, value); } + } + + public DWrite.IDWriteTextRenderer AdditionalRenderer; + + private static readonly DWrite.IDWriteFactory7 _factory; + private static readonly DWrite.IDWriteGdiInterop _gdiInterop; + private static readonly DWrite.IDWriteFontFallback _noFallback; + private DWrite.IDWriteBitmapRenderTarget _renderTarget; + private BitmapRenderer _renderer; + private BitmapSource _bitmap; + private IntPtr hBitmapData; + + private DpiScale _dpiScale = new DpiScale(1, 1); + public DpiScale DpiScale => _dpiScale; + protected override void OnDpiChanged(DpiScale oldDpi, DpiScale newDpi) => _dpiScale = newDpi; + + static DirectWriteElement() + { + _factory = DWriteFactory.Shared7; + _gdiInterop = _factory.GetGdiInterop(); + + var fallbackBuilder = _factory.CreateFontFallbackBuilder(); + _noFallback = fallbackBuilder.CreateFontFallback(); + } + + protected override void OnVisualParentChanged(DependencyObject oldParent) + { + if (PresentationSource.FromVisual(this)?.CompositionTarget?.TransformToDevice is System.Windows.Media.Matrix matrix) + _dpiScale = new DpiScale(matrix.M11, matrix.M22); + } + + public void Render(DWrite.IDWriteTextRenderer renderer) => OnRender(null, renderer); + protected override void OnRender(DrawingContext drawingContext) + { + int scaledWidth = (int)(RenderSize.Width * _dpiScale.DpiScaleX); + int scaledHeight = (int)(RenderSize.Height * _dpiScale.DpiScaleY); + + EnsureRenderTarget((uint)scaledWidth, (uint)scaledHeight); + OnRender(drawingContext, _renderer); + } + + private DWrite.IDWriteTextFormat _textFormat; + private void InvalidateTextFormat() + { + _textFormat = null; + InvalidateVisual(); + } + private static void InvalidateTextFormat(DependencyObject d, DependencyPropertyChangedEventArgs e) => ((DirectWriteElement)d).InvalidateTextFormat(); + private DWrite.IDWriteTextFormat GetOrCreateTextFormat() + { + if (_textFormat == null) + { + string familyName = FontFace.TypographicFamilyName; + + FontAxisValue[] axisValues = FontAxisValues as FontAxisValue[] ?? FontAxisValues?.ToArray(); + + DWrite.IDWriteFontCollection collection = null; + if (FontSet != null) + collection = _factory.CreateFontCollectionFromFontSet(FontSet.NativeObject, FontFamilyModel.Typographic); + + var textFormat = _factory.CreateTextFormat(familyName, collection, axisValues, axisValues?.Length ?? 0, FontSize, LocaleName); + textFormat.SetFontFallback(_noFallback); + textFormat.SetFlowDirection(ParagraphFlowDirection); + textFormat.SetReadingDirection(ParagraphReadingDirection); + + _textFormat = textFormat; + } + + return _textFormat; + } + + private DWrite.IDWriteTextLayout _textLayout; + private DWrite.IDWriteTextLayout CreateTextLayout(Size size) + { + var textFormat = GetOrCreateTextFormat(); + var textLayout = _factory.CreateTextLayout(Text, Text?.Length ?? 0, textFormat, (float)size.Width, (float)size.Height); + + var wholeRange = new TextRange { Length = Text?.Length ?? 0 }; + if (FontFeatures is IEnumerable features) + { + var typography = _factory.CreateTypography(); + foreach (var feature in features) + typography.AddFontFeature(new FontFeature { NameTag = feature, Parameter = 1 }); + + textLayout.SetTypography(typography, wholeRange); + } + + return textLayout; + } + + protected override Size MeasureOverride(Size availableSize) + { + try + { + var textLayout = CreateTextLayout(availableSize); + var metrics = textLayout.GetMetrics(); + + return new Size(Math.Ceiling(metrics.Width), Math.Ceiling(metrics.Height)); // bitmap requires integer pixels, when we switch to geometry we can remove + } + catch + { + return base.MeasureOverride(availableSize); + } + } + protected override Size ArrangeOverride(Size finalSize) + { + try + { + _textLayout = CreateTextLayout(finalSize); + return finalSize; + } + catch + { + _textLayout = null; + return base.ArrangeOverride(finalSize); + } + } + + private void OnRender(DrawingContext drawingContext, DWrite.IDWriteTextRenderer renderer) + { + if (_textLayout == null) + return; + + int width = (int)RenderSize.Width; + int height = (int)RenderSize.Height; + int scaledWidth = (int)(RenderSize.Width * _dpiScale.DpiScaleX); + int scaledHeight = (int)(RenderSize.Height * _dpiScale.DpiScaleY); + + try + { + _textLayout.Draw(IntPtr.Zero, renderer, 0, 0); + + if (drawingContext != null && hBitmapData != IntPtr.Zero) + { + _bitmap = BitmapSource.Create(scaledWidth, scaledHeight, 96, 96, PixelFormats.Bgr32, null, hBitmapData, scaledWidth * scaledHeight * 4, scaledWidth * 4); + drawingContext.DrawImage(_bitmap, new Rect(0, 0, width, height)); + } + } + catch (Exception e) + { + if (drawingContext == null) + throw; + + drawingContext.DrawText(new FormattedText(e.Message, CultureInfo.CurrentUICulture, FlowDirection, new Typeface("Segoe UI"), 11, Brushes.Red, _dpiScale.PixelsPerDip) { MaxTextWidth = width }, default); + } + } + + internal BitmapSource GetLastRenderedBoundingBitmap() + { + if (_textLayout == null) + return null; + + var metrics = _textLayout.GetMetrics(); + int left = (int)(metrics.Left * _dpiScale.DpiScaleX); + int top = (int)(metrics.Top * _dpiScale.DpiScaleY); + int width = (int)Math.Ceiling(metrics.Width * _dpiScale.DpiScaleX); + int height = (int)Math.Ceiling(metrics.Height * _dpiScale.DpiScaleY); + + Int32Rect boundingRect = new Int32Rect(left, top, Math.Min(_bitmap.PixelWidth - left, width), Math.Min(_bitmap.PixelHeight - top, height)); + return new CroppedBitmap(_bitmap, boundingRect); + } + + private void EnsureRenderTarget(uint width, uint height) + { + if (_renderTarget == null) + { + _renderTarget = _gdiInterop.CreateBitmapRenderTarget(IntPtr.Zero, width, height); + _renderer = new BitmapRenderer(_renderTarget, _factory.CreateRenderingParams()); + } + else + { + _renderTarget.Resize(width, height); + } + + IntPtr hdc = _renderTarget.GetMemoryDC(); + IntPtr hBitmap = GetCurrentObject(hdc, 7); + + GetObjectW(hBitmap, Marshal.SizeOf(), out tagBITMAP bm); + hBitmapData = bm.bmBits == IntPtr.Zero ? IntPtr.Zero : bm.bmBits; + + if (hBitmapData != IntPtr.Zero) + { + // fill white + int pixels = bm.bmWidth * bm.bmHeight; + for (int i = 0; i < pixels; i++) + Marshal.WriteInt32(hBitmapData, i * 4, 0x00FFFFFF); + } + } + + [DllImport("gdi32.dll")] + private static extern IntPtr GetCurrentObject(IntPtr hdc, int objectType); + + [DllImport("gdi32.dll", SetLastError = true)] + static extern int GetObjectW(IntPtr h, int c, out tagBITMAP pv); + + [DllImport("gdi32.dll", SetLastError = true)] + static extern int GetObjectW(IntPtr h, int c, IntPtr pv); + + [StructLayout(LayoutKind.Sequential, Size = 0x20)] + struct tagBITMAP + { + public int bmType; + public int bmWidth; + public int bmHeight; + public int bmWidthBytes; + public short bmPlanes; + public short bmBitsPixel; + public IntPtr bmBits; + } + } +} diff --git a/DWBox/FontFaceReferenceCollection.cs b/DWBox/FontFaceReferenceCollection.cs new file mode 100644 index 0000000..a8b9417 --- /dev/null +++ b/DWBox/FontFaceReferenceCollection.cs @@ -0,0 +1,92 @@ +using System.Collections; +using System.Collections.Generic; +using System.Collections.Specialized; +using Win32; + +namespace DWBox +{ + //public class FontFaceReferenceCollection : IndexedSetCollection + //{ + // protected override int GetSetCount(DirectWrite.IDWriteFontSet set) => set.GetFontCount(); + // protected override DirectWrite.IDWriteFontFaceReference GetItem(DirectWrite.IDWriteFontSet set, int index) => set.GetFontFaceReference(index); + // protected override bool FindItem(DirectWrite.IDWriteFontSet set, DirectWrite.IDWriteFontFaceReference item, out int index) => set.FindFontFaceReference(item, out index); + + // public string GetProperty(int index, DirectWrite.FontPropertyId propertyId, string locale) + // { + // DirectWrite.IDWriteLocalizedStrings localizesdStrings = Set.GetPropertyValues(Items[index].Index, propertyId, out bool exists); + // if (!exists) + // return null; + + + // } + //} + + public abstract class IndexedSetCollection : INotifyCollectionChanged, IReadOnlyList + { + protected class IndexedReference + { + public int Index; + public TItem Item; + public TSet Set; + + public IndexedReference(TSet set, TItem item, int index) + { + Set = set; + Item = item; + Index = index; + } + } + + private TSet _lastSet; + protected TSet Set => _lastSet; + + private readonly List _items = new List(); + protected IList Items => _items; + + protected abstract int GetSetCount(TSet set); + protected abstract TItem GetItem(TSet set, int index); + protected abstract bool FindItem(TSet set, TItem item, out int index); + + public void UpdateWith(TSet set) + { + int count = GetSetCount(set); + for (int i = 0; i < count; i++) + { + TItem item = GetItem(set, i); + if (_lastSet == null || !FindItem(_lastSet, item, out int lastIndex)) + { + _items.Add(new IndexedReference(set, item, i)); + CollectionChanged?.Invoke(this, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, item, _items.Count - 1)); + } + else + { + IndexedReference reference = _items.Find(ixref => ReferenceEquals(ixref.Set, set) && ixref.Index == lastIndex); // PERF: replace with dictionary + reference.Set = set; + reference.Index = i; + } + } + + for (int i = _items.Count - 1; i >= 0; i--) + if (!ReferenceEquals(_items[i], set)) + { + IndexedReference reference = _items[i]; + _items.RemoveAt(i); + CollectionChanged?.Invoke(this, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Remove, reference, i)); + } + + _lastSet = set; + } + + public event NotifyCollectionChangedEventHandler CollectionChanged; + + public TItem this[int index] => _items[index].Item; + public int Count => _items.Count; + IEnumerator IEnumerable.GetEnumerator() => GetEnumerator(); + public IEnumerator GetEnumerator() + { + foreach (IndexedReference ixref in _items) + yield return ixref.Item; + } + } + +} diff --git a/DWBox/FontFolder.ico b/DWBox/FontFolder.ico new file mode 100644 index 0000000000000000000000000000000000000000..f37fca063b75c99033054ec3d49698d1ee4ab0d6 GIT binary patch literal 69248 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 a!Eh>|l|zHGewkJVJ?z^o;J@YlyZ;5}1vu0I literal 0 HcmV?d00001 diff --git a/DWBox/GlyphRunWindow.xaml b/DWBox/GlyphRunWindow.xaml new file mode 100644 index 0000000..019fbc4 --- /dev/null +++ b/DWBox/GlyphRunWindow.xaml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/DWBox/GlyphRunWindow.xaml.cs b/DWBox/GlyphRunWindow.xaml.cs new file mode 100644 index 0000000..4351255 --- /dev/null +++ b/DWBox/GlyphRunWindow.xaml.cs @@ -0,0 +1,44 @@ +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Input; +using System.Windows.Media; +using Win32; + +namespace DWBox +{ + public partial class GlyphRunWindow : Window + { + public GlyphRunWindow() + { + InitializeComponent(); + } + + private void OnKeyDown(object sender, KeyEventArgs e) + { + if (e.Key == Key.Escape) + Close(); + } + } + + public class AlternatingClusterRowStyleSelector : StyleSelector + { + public Style OddStyle { get; set; } + public Style EvenStyle { get; set; } + + public override Style SelectStyle(object item, DependencyObject container) + { + if (item is GlyphRunDetailsItem detail) + { + if (detail.ClusterIndex % 2 == 0) + return EvenStyle; + else + return OddStyle; + } + + return base.SelectStyle(item, container); + } + } +} diff --git a/DWBox/MainWindow.xaml b/DWBox/MainWindow.xaml new file mode 100644 index 0000000..1511a21 --- /dev/null +++ b/DWBox/MainWindow.xaml @@ -0,0 +1,274 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/DWBox/MainWindow.xaml.cs b/DWBox/MainWindow.xaml.cs new file mode 100644 index 0000000..f9a694b --- /dev/null +++ b/DWBox/MainWindow.xaml.cs @@ -0,0 +1,504 @@ +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.ComponentModel; +using System.Diagnostics; +using System.Globalization; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Shell; +using DWBox.Properties; +using Win32.DWrite; + +namespace DWBox +{ + public partial class MainWindow : Window + { + private readonly BoxItemCollection _items = new BoxItemCollection(); + + public MainWindow() + { + InitializeComponent(); + _readingSelector.ItemsSource = new[] { ReadingDirection.LeftToRight, ReadingDirection.RightToLeft }; + _flowSelector.ItemsSource = new[] { Win32.DWrite.FlowDirection.TopToBottom, Win32.DWrite.FlowDirection.BottomToTop }; + _renderings.ItemsSource = _items.View; + + try { _boxInput.Text = Settings.Default.LastInput; } + catch { } + } + + private void OnLoaded(object sender, RoutedEventArgs e) + { + _modules.ItemsSource = from module in Process.GetCurrentProcess().Modules.OfType() + where module.ModuleName.StartsWith("dwrite", StringComparison.OrdinalIgnoreCase) || module.ModuleName.StartsWith("textshaping", StringComparison.OrdinalIgnoreCase) + select new { module.ModuleName, module.FileVersionInfo, FileInfo = new FileInfo(module.FileName) }; + + RefreshSystemFonts(sender, e); + + TaskbarItemInfo info = new TaskbarItemInfo(); + info.ThumbButtonInfos.Add(CreateThumbButton(Brushes.Transparent)); + info.ThumbButtonInfos.Add(CreateThumbButton(new SolidColorBrush(Color.FromRgb(242, 80, 34)))); + info.ThumbButtonInfos.Add(CreateThumbButton(new SolidColorBrush(Color.FromRgb(127, 186, 2)))); + info.ThumbButtonInfos.Add(CreateThumbButton(new SolidColorBrush(Color.FromRgb(1, 165, 239)))); + //info.ThumbButtonInfos.Add(CreateThumbButton(new SolidColorBrush(Color.FromRgb(254, 185, 3)))); + TaskbarItemInfo = info; + } + + private ThumbButtonInfo CreateThumbButton(Brush brush) + { + ThumbButtonInfo info = new ThumbButtonInfo(); + + Geometry square = Geometry.Parse("M0,0 H32 V32 Z"); + square.Freeze(); + info.ImageSource = new DrawingImage { Drawing = new GeometryDrawing(brush, null, square) }; + info.Click += OnInstanceColorChanged; + return info; + } + + private void OnInstanceColorChanged(object sender, EventArgs e) + { + if (sender is ThumbButtonInfo info && info.ImageSource is ImageSource overlay) + { + TaskbarItemInfo.Overlay = overlay; + if (overlay is DrawingImage image && image.Drawing is GeometryDrawing drawing) + Application.Current.Resources["InstanceBrush"] = drawing.Brush; + } + } + + private void RefreshSystemFonts(object sender, EventArgs e) + { + if (sender is FontSet oldSet) + oldSet.Expired -= RefreshSystemFonts; + + var fontset = new FontSet(DWriteFactory.Shared6.GetSystemFontSet(includeDownloadableFonts: false)); + fontset.Expired += RefreshSystemFonts; + + Dispatcher.BeginInvoke(ApplyAndSelect, fontset); + } + private void ApplyAndSelect(FontSet fontset) + { + string selectedName = (_fontSelector.SelectedItem as FontSetEntry)?.FullName ?? "Segoe UI"; + + ListCollectionView view = new ListCollectionView(fontset); + view.SortDescriptions.Add(new SortDescription(nameof(FontSetEntry.FullName), ListSortDirection.Ascending)); + view.GroupDescriptions.Add(new PropertyGroupDescription(nameof(FontSetEntry.TypographicFamilyName))); + + _fontSelector.ItemsSource = view; + _fontSelector.SelectedItem = fontset.FirstOrDefault(e => e.FullName == selectedName); + } + + private void OnAdd(object sender, RoutedEventArgs e) + { + try { Settings.Default.Save(); } + catch { } + + if (_fontSelector.SelectedItem is FontSetEntry entry) + _items.Add(entry, AddEmSize); + } + + private async void OnAddInput(object sender, RoutedEventArgs e) + { + try { Settings.Default.Save(); } + catch { } + + List entries = new List(); + try + { + Cursor = Cursors.Wait; + await GetMatchingEntries(entries); + } + finally + { + ClearValue(CursorProperty); + } + + if (MessageBox.Show(this, $"Add {entries.Count} fonts?", Title, MessageBoxButton.YesNo) == MessageBoxResult.Yes) + foreach (var entry in entries) + _items.Add(entry, AddEmSize); + } + + Task GetMatchingEntries(IList entries) + { + TaskbarItemInfo.ProgressState = TaskbarItemProgressState.Indeterminate; + + int[] codepoints = ToCodepoints(_boxOutput.Text).ToArray(); + ushort[] glyphs = new ushort[codepoints.Length]; + + var set = DWriteFactory.Shared6.GetSystemFontSet(includeDownloadableFonts: false); + int count = set.GetFontCount(); + + TaskbarItemInfo.ProgressState = 0; + TaskbarItemInfo.ProgressState = TaskbarItemProgressState.Normal; + + for (int i = 0; i < count; i++) + { + var face = set.CreateFontFace(i); + face.GetGlyphIndices(codepoints, codepoints.Length, glyphs); + + if (Array.IndexOf(glyphs, (ushort)0) < 0) + entries.Add(new FontSetEntry(set, i)); + + if ((i % 100) == 0) + TaskbarItemInfo.ProgressValue = (double)i / count; + } + + TaskbarItemInfo.ProgressState = TaskbarItemProgressState.None; + + return Task.FromResult(entries); + } + + private void OnRemove(object sender, RoutedEventArgs e) + { + if (sender is FrameworkElement el) + { + BoxItem removingItem = (BoxItem)el.DataContext; + + if (el.Tag is string tag) + switch (tag) + { + case "T": + break; + + case "B": + _items.Remove(item => item != removingItem); + return; + + case "F": + _items.Remove(item => item.TypographicFamilyName == removingItem.TypographicFamilyName); + return; + + case "M": + _items.Remove(item => item.FontSetEntry.FontSourceType == FontSourceType.PerMachine); + return; + + case "U": + _items.Remove(item => item.FontSetEntry.FontSourceType == FontSourceType.PerUser); + return; + + case "D": + _items.Remove(item => item.FontSetEntry.FontSourceType == FontSourceType.Unknown); + return; + + case "A": + _items.Clear(); + return; + } + + _items.Remove(removingItem); + } + } + + private void InvalidateOutput(object sender, RoutedEventArgs e) + { + if (_boxOutput != null) + { + _boxOutput.Text = _decode.IsChecked == true ? Decode(_boxInput.Text) : _boxInput.Text; + + Settings.Default.LastInput = _boxInput.Text; + } + } + + private static string Decode(string text) + { + string[] tokens = text.Split(' '); + uint cp; + + StringBuilder output = new StringBuilder(text.Length); + foreach (string token in tokens) + { + if (string.IsNullOrEmpty(token)) + output.Append(' '); + else if (token.Length >= 3 && uint.TryParse(token, NumberStyles.HexNumber, null, out cp) && IsValidCodepoint(cp)) + output.Append(char.ConvertFromUtf32((int)cp)); + else if (token.StartsWith("U+") && uint.TryParse(token.Substring(2), NumberStyles.HexNumber, null, out cp) && IsValidCodepoint(cp)) + output.Append(char.ConvertFromUtf32((int)cp)); + else if (DecodeAcronym(token) is string acronym) + output.Append(acronym); + else + output.Append(token); + } + + text = output.ToString(); + output.Length = 0; + + int index = -1; + int chunkStart = 0; + while (index < text.Length) + { + index = text.IndexOf('\\', index + 1); + if (index < 0 || index + 1 >= text.Length) + break; + + switch (text[index + 1]) + { + case 'n': + case 'r': + case 't': + case '\\': + output.Append(text.Substring(chunkStart, index - chunkStart)); + index += 1; + output.Append(text[index] switch { 'n' => '\n', 'r' => '\r', 't' => '\t', _ => text[index] }); + chunkStart = index + 1; + break; + case 'u' when index + 3 < text.Length: // \uXXXX..\uXXXX + int hexLength = Math.Min(GetHexLengthAt(text, index + 2), 6); + if (hexLength >= 2) + { + uint startCode = uint.Parse(text.Substring(index + 2, hexLength), NumberStyles.HexNumber); + if (IsValidCodepoint(startCode)) + { + output.Append(text.Substring(chunkStart, index - chunkStart)); + index += 1 + hexLength; + + uint endCode = startCode; + if (index + 5 < text.Length && + text[index + 1] == '.' && + text[index + 2] == '.' && + text[index + 3] == '\\' && + text[index + 4] == 'u') + { + hexLength = Math.Min(GetHexLengthAt(text, index + 5), 6); + if (hexLength >= 2) + { + endCode = uint.Parse(text.Substring(index + 5, hexLength), NumberStyles.HexNumber); + if (endCode < startCode || !IsValidCodepoint(endCode)) + endCode = startCode; + else + index += 4 + hexLength; + } + } + + for (cp = startCode; cp <= endCode; cp++) + if (IsValidCodepoint(cp)) // TODO: deal with surrogates + output.Append(char.ConvertFromUtf32((int)cp)); + + chunkStart = index + 1; + } + } + break; + } + } + + output.Append(text.Substring(chunkStart)); + + return output.ToString(); + } + private static string DecodeAcronym(string s) + { + switch (s) + { + case "CGJ": return "\u034F"; + case "ZWSP": return "\u200B"; + case "ZWNJ": return "\u200C"; + case "ZWJ": return "\u200D"; + case "LRM": return "\u200E"; + case "RLM": return "\u200F"; + case "LRE": return "\u202A"; + case "RLE": return "\u202B"; + case "PDF": return "\u202C"; + case "LRO": return "\u202D"; + case "RLO": return "\u202E"; + case "NBSP": return "\u202F"; + case "LRI": return "\u2066"; + case "RLI": return "\u2067"; + case "FSI": return "\u2068"; + case "PDI": return "\u2069"; + case "ISS": return "\u206A"; + case "ASS": return "\u206B"; + case "IAFS": return "\u206C"; + case "AAFS": return "\u206D"; + case "NADS": return "\u206E"; + case "NODS": return "\u206F"; + default: return null; + } + } + + private static int GetHexLengthAt(string s, int index) + { + int i; + for (i = index; i < s.Length; i++) + { + char c = s[i]; + if ((c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F')) + continue; + break; + } + return i - index; + } + + private static bool IsValidCodepoint(uint cp) + { + const uint Plane16End = 0x10FFFF; + const uint HighSurrogateStart = 0xD800; + const uint LowSurrogateEnd = 0xDFFF; + + return cp < Plane16End && (cp < HighSurrogateStart || cp > LowSurrogateEnd); + } + + private static IEnumerable ToCodepoints(string s) + { + if (string.IsNullOrEmpty(s)) + yield break; + + int i = 0; + while (i < s.Length) + { + if (char.IsSurrogate(s, i)) + if (char.IsSurrogatePair(s, i)) + yield return char.ConvertToUtf32(s, i++); + else + yield return s[i]; + + else + yield return s[i]; + + i++; + } + } + + private void OnRenderingsDragOver(object sender, DragEventArgs e) + { + string[] formats = e.Data.GetFormats(); + if (e.Data.GetDataPresent(DataFormats.FileDrop)) + e.Effects = DragDropEffects.Copy; + else + e.Effects = DragDropEffects.None; + } + + private void OnRenderingsDrop(object sender, DragEventArgs e) + { + if (e.Data.GetData(DataFormats.FileDrop, false) is string[] paths) + { + try { Settings.Default.Save(); } + catch { } + + var builder = DWriteFactory.Shared6.CreateFontSetBuilder2(); + foreach (string path in paths) + builder.AddFontFile(path); + + var set = new FontSet(builder.CreateFontSet()); + + foreach (var entry in set) + _items.Add(entry, AddEmSize); + } + } + + private void OnTextAnalysis(object sender, RoutedEventArgs e) + { + var analysis = TextAnalysis.Analyze(_boxOutput.Text, (ReadingDirection)_readingSelector.SelectedItem, _boxLocale.Text); + + new TextAnalysisWindow { DataContext = analysis, Title = "Text Analysis: " + analysis.Text }.Show(); + } + + private void OnGlyphRunDetails(object sender, RoutedEventArgs e) + { + if (sender is FrameworkElement { DataContext: BoxItem item }) + { + if (item.RenderingElement == null) + return; + + GlyphRunDetails details = new GlyphRunDetails(item); + RecordingRenderer renderer = new RecordingRenderer(details); + item.RenderingElement.Render(renderer); + new GlyphRunWindow { DataContext = renderer.Details }.Show(); + } + } + + private void CopyBitmap(BitmapSource bitmap) + { + PngBitmapEncoder png = new PngBitmapEncoder(); + png.Frames.Add(BitmapFrame.Create(bitmap)); + + MemoryStream pngStream = new MemoryStream(); + png.Save(pngStream); + pngStream.Seek(0, SeekOrigin.Begin); + + DataObject data = new DataObject(); + data.SetData("PNG", pngStream); + data.SetImage(bitmap); + + Clipboard.SetDataObject(data); + } + + private void OnCopyBitmap(object sender, RoutedEventArgs e) + { + if (sender is FrameworkElement { DataContext: BoxItem item }) + if (ItemsControl.ContainerFromElement(_renderings, item.RenderingElement) is FrameworkElement el) + { + RenderTargetBitmap bitmap = new RenderTargetBitmap((int)el.ActualWidth, (int)el.ActualHeight, 96, 96, PixelFormats.Pbgra32); + bitmap.Render(el); + + CopyBitmap(bitmap); + } + } + + private void OnCopyName(object sender, RoutedEventArgs e) + { + if (sender is FrameworkElement { DataContext: BoxItem item }) + Clipboard.SetText(item.NameVersion); + } + + private void OnCopyGlyphRunBitmap(object sender, RoutedEventArgs e) + { + if (sender is FrameworkElement { DataContext: BoxItem item }) + { + if (item.RenderingElement?.GetLastRenderedBoundingBitmap() is BitmapSource bitmap) + CopyBitmap(bitmap); + } + } + + public static readonly DependencyProperty AddEmSizeProperty = DependencyProperty.Register(nameof(AddEmSize), typeof(float), typeof(MainWindow), new PropertyMetadata(48f)); + + public float AddEmSize + { + get { return (float)GetValue(AddEmSizeProperty); } + set { SetValue(AddEmSizeProperty, value); } + } + + private void OnSizeKeyDown(object sender, KeyEventArgs e) + { + bool handled = true; + switch (e.Key) + { + case Key.Up: AddEmSize++; break; + case Key.Down: AddEmSize--; break; + case Key.PageUp: AddEmSize = (float)Math.Ceiling(AddEmSize * 1.5); break; + case Key.PageDown: AddEmSize = (float)Math.Ceiling(AddEmSize / 1.5); break; + default: handled = false; break; + } + + if (handled) + _sizeBox.SelectAll(); + + e.Handled |= handled; + } + + private void OpenContextMenu(object sender, RoutedEventArgs e) + { + if (sender is FrameworkElement { ContextMenu: ContextMenu menu }) + { + menu.PlacementTarget = sender as UIElement; + menu.IsOpen = true; + } + } + + private void OnSetSize(object sender, RoutedEventArgs e) + { + if (float.TryParse(_sizeBox.Text, out float em)) + foreach (BoxItem item in _items) + { + item.EmSize = em; + if (item.RenderingElement is DirectWriteElement el) + BindingOperations.GetBindingExpression(el, DirectWriteElement.FontSizeProperty).UpdateTarget(); + } + } + } +} diff --git a/DWBox/Properties/AssemblyInfo.cs b/DWBox/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..9fb4691 --- /dev/null +++ b/DWBox/Properties/AssemblyInfo.cs @@ -0,0 +1,58 @@ +using System.Reflection; +using System.Runtime.InteropServices; +using System.Windows; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("DirectWrite Box")] +[assembly: AssemblyDescription("A tool for testing text shaping")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("DWBox")] +[assembly: AssemblyCopyright("Copyright © Jan Kučera 2022-2023")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +//In order to begin building localizable applications, set +//CultureYouAreCodingWith in your .csproj file +//inside a . For example, if you are using US english +//in your source files, set the to en-US. Then uncomment +//the NeutralResourceLanguage attribute below. Update the "en-US" in +//the line below to match the UICulture setting in the project file. + +//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)] + + +[assembly: ThemeInfo( + ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located + //(used if a resource is not found in the page, + // or application resource dictionaries) + ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located + //(used if a resource is not found in the page, + // app, or any theme specific resource dictionaries) +)] + + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("2.2.0.0")] +[assembly: AssemblyFileVersion("2.2.0.0")] + +// 2.2.0.0 copy image/box/name to clipboard, DirectWriteElement measuring, bitmap AV fix, empty GlyphRun analysis fix, remove all but this font, save settings on drop, \u U+ and acronyms decoding, core switch +// 2.1.0.0 refactor DWrite into namespace & struct with properties, text analysis, remove filter, set size, font face strings, add all progress, remember last input +// 2.0.0.1 instance brush +// 2.0.0.0 font selection migrated to DWrite, GlyphRun and GlyphRunDescription report \ No newline at end of file diff --git a/DWBox/Properties/Settings.Designer.cs b/DWBox/Properties/Settings.Designer.cs new file mode 100644 index 0000000..51c5109 --- /dev/null +++ b/DWBox/Properties/Settings.Designer.cs @@ -0,0 +1,38 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace DWBox.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.6.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default { + get { + return defaultInstance; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("")] + public string LastInput { + get { + return ((string)(this["LastInput"])); + } + set { + this["LastInput"] = value; + } + } + } +} diff --git a/DWBox/Properties/Settings.settings b/DWBox/Properties/Settings.settings new file mode 100644 index 0000000..f495453 --- /dev/null +++ b/DWBox/Properties/Settings.settings @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/DWBox/Renderers/BitmapRenderer.cs b/DWBox/Renderers/BitmapRenderer.cs new file mode 100644 index 0000000..0454875 --- /dev/null +++ b/DWBox/Renderers/BitmapRenderer.cs @@ -0,0 +1,33 @@ +using System; +using System.Diagnostics; +using System.Runtime.InteropServices; +using Win32.DWrite; + +namespace DWBox +{ + public class BitmapRenderer : DWrite.IDWriteTextRenderer + { + private readonly DWrite.IDWriteBitmapRenderTarget _bitmapRenderTarget; + private readonly DWrite.IDWriteRenderingParams _renderingParams; + + internal BitmapRenderer(DWrite.IDWriteBitmapRenderTarget bitmapRenderTarget, DWrite.IDWriteRenderingParams renderingParams) + { + _bitmapRenderTarget = bitmapRenderTarget; + _renderingParams = renderingParams; + } + + internal uint TextColor { get; set; } + public bool IsPixelSnappingDisabled(IntPtr clientDrawingContext) => false; + public Matrix GetCurrentTransform(IntPtr clientDrawingContext) => Matrix.Identity; + public float GetPixelsPerDip(IntPtr clientDrawingContext) => 96f; + + public void DrawGlyphRun(IntPtr clientDrawingContext, float baselineOriginX, float baselineOriginY, MeasuringMode measuringMode, IntPtr glyphRun, IntPtr glyphRunDescription, [In, MarshalAs(UnmanagedType.IUnknown)] object clientDrawingEffect) + { + _bitmapRenderTarget.DrawGlyphRun(baselineOriginX, baselineOriginY, measuringMode, glyphRun, _renderingParams, TextColor, IntPtr.Zero); + } + + public void DrawUnderline(IntPtr clientDrawingContext, float baselineOriginX, float baselineOriginY, IntPtr underline, [In, MarshalAs(UnmanagedType.IUnknown)] object clientDrawingEffect) { } + public void DrawStrikethrough(IntPtr clientDrawingContext, float baselineOriginX, float baselineOriginY, IntPtr strikethrough, [In, MarshalAs(UnmanagedType.IUnknown)] object clientDrawingEffect) { } + public void DrawInlineObject(IntPtr clientDrawingContext, float originX, float originY, IntPtr inlineObject, bool isSideways, bool isRightToLeft, [In, MarshalAs(UnmanagedType.IUnknown)] object clientDrawingEffect) { } + } +} diff --git a/DWBox/Renderers/RecordingRenderer.cs b/DWBox/Renderers/RecordingRenderer.cs new file mode 100644 index 0000000..aac7f92 --- /dev/null +++ b/DWBox/Renderers/RecordingRenderer.cs @@ -0,0 +1,70 @@ +using System; +using System.Collections.Generic; +using System.Runtime.InteropServices; +using Win32.DWrite; + +namespace DWBox +{ + public class RecordingRenderer : DWrite.IDWriteTextRenderer + { + public GlyphRunDetails Details { get; } + + public RecordingRenderer(GlyphRunDetails details) + { + Details = details; + } + + public bool IsPixelSnappingDisabled(IntPtr clientDrawingContext) => false; + public Matrix GetCurrentTransform(IntPtr clientDrawingContext) => new Matrix { M11 = 1, M22 = 1 }; + public float GetPixelsPerDip(IntPtr clientDrawingContext) => 96f; + + public void DrawGlyphRun(IntPtr clientDrawingContext, float baselineOriginX, float baselineOriginY, MeasuringMode measuringMode, IntPtr glyphRun, IntPtr glyphRunDescription, [In, MarshalAs(UnmanagedType.IUnknown)] object clientDrawingEffect) + { + GlyphRun run = Marshal.PtrToStructure(glyphRun); + GlyphRunDescription desc = Marshal.PtrToStructure(glyphRunDescription); + + float[] advances = run.GetGlyphAdvances(); + ushort[] glyphIndices = run.GetGlyphIndices(); + GlyphOffset[] glyphOffsets = run.GetGlyphOffsets(); + + GlyphRunDetailsItem[] items = new GlyphRunDetailsItem[run.GlyphCount]; + + for (int i = 0; i < run.GlyphCount; i++) + items[i] = new GlyphRunDetailsItem(Details) + { + GlyphID = glyphIndices[i], + Advance = advances[i], + AdvanceOffset = glyphOffsets[i].AdvanceOffset, + AscenderOffset = glyphOffsets[i].AscenderOffset, + FontName = run.FontFace.FullName, + }; + + short[] clusterMap = desc.GetClusterMap(); + for (int i = 0; i < clusterMap.Length; i++) + { + int index = clusterMap[i]; + int codepoint = desc.Text[i]; + + items[index].Codepoints.Add(codepoint); + } + + int clusterIndex = -1; + if (Details.Count > 0) + clusterIndex = Details[Details.Count - 1].ClusterIndex; + + foreach (var item in items) + { + if (item.Codepoints.Count > 0) + clusterIndex++; + + item.Index = Details.Count; + item.ClusterIndex = clusterIndex; + Details.Add(item); + } + } + + public void DrawUnderline(IntPtr clientDrwaingContext, float baselineOriginX, float baselineOriginY, IntPtr underline, [In, MarshalAs(UnmanagedType.IUnknown)] object clientDrawingEffect) { } + public void DrawStrikethrough(IntPtr clientDrawingContext, float baselineOriginX, float baselineOriginY, IntPtr strikethrough, [In, MarshalAs(UnmanagedType.IUnknown)] object clientDrawingEffect) { } + public void DrawInlineObject(IntPtr clientDrawingContext, float originX, float originY, IntPtr inlineObject, bool isSideways, bool isRightToLeft, [In, MarshalAs(UnmanagedType.IUnknown)] object clientDrawingEffect) { } + } +} diff --git a/DWBox/TextAnalysisWindow.xaml b/DWBox/TextAnalysisWindow.xaml new file mode 100644 index 0000000..6405e46 --- /dev/null +++ b/DWBox/TextAnalysisWindow.xaml @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/DWBox/TextAnalysisWindow.xaml.cs b/DWBox/TextAnalysisWindow.xaml.cs new file mode 100644 index 0000000..fd80c69 --- /dev/null +++ b/DWBox/TextAnalysisWindow.xaml.cs @@ -0,0 +1,39 @@ +using System.Windows; +using System.Windows.Controls; +using System.Windows.Input; + +namespace DWBox +{ + public partial class TextAnalysisWindow : Window + { + public TextAnalysisWindow() + { + InitializeComponent(); + } + + private void OnKeyDown(object sender, KeyEventArgs e) + { + if (e.Key == Key.Escape) + Close(); + } + } + + public class BidiRowStyleSelector : StyleSelector + { + public Style LeftToRightStyle { get; set; } + public Style RightToLeftStyle { get; set; } + + public override Style SelectStyle(object item, DependencyObject container) + { + if (item is TextAnalysisItem detail) + { + if (detail.BidiResolvedLevel % 2 == 0) + return LeftToRightStyle; + else + return RightToLeftStyle; + } + + return base.SelectStyle(item, container); + } + } +} diff --git a/DWBox/UAM/LabelGrid.cs b/DWBox/UAM/LabelGrid.cs new file mode 100644 index 0000000..ceb75fe --- /dev/null +++ b/DWBox/UAM/LabelGrid.cs @@ -0,0 +1,161 @@ +// +// © 2019-2020 miloush.net. All rights reserved. +// + +using System; +using System.Windows; +using System.Windows.Controls; + +namespace UAM.InformatiX.Windows.Controls +{ + public class LabelGrid : Panel + { + // TOOD: alignments - maybe styles, scrolling, virtualization, alternating row background + + public static readonly DependencyProperty VerticalSpacingProperty = DependencyProperty.Register(nameof(VerticalSpacing), typeof(double), typeof(LabelGrid), new FrameworkPropertyMetadata(5.0, FrameworkPropertyMetadataOptions.AffectsMeasure)); + public static readonly DependencyProperty HorizontalSpacingProperty = DependencyProperty.Register(nameof(HorizontalSpacing), typeof(double), typeof(LabelGrid), new FrameworkPropertyMetadata(5.0, FrameworkPropertyMetadataOptions.AffectsMeasure)); + public static readonly DependencyProperty LabelStyleProperty = DependencyProperty.Register(nameof(LabelStyle), typeof(Style), typeof(LabelGrid)); + public static readonly DependencyProperty ContentStyleProperty = DependencyProperty.Register(nameof(ContentStyle), typeof(Style), typeof(LabelGrid)); + + public double VerticalSpacing + { + get { return (double)GetValue(VerticalSpacingProperty); } + set { SetValue(VerticalSpacingProperty, value); } + } + + public double HorizontalSpacing + { + get { return (double)GetValue(HorizontalSpacingProperty); } + set { SetValue(HorizontalSpacingProperty, value); } + } + + public Style ContentStyle + { + get { return (Style)GetValue(ContentStyleProperty); } + set { SetValue(ContentStyleProperty, value); } + } + + public Style LabelStyle + { + get { return (Style)GetValue(LabelStyleProperty); } + set { SetValue(LabelStyleProperty, value); } + } + + + private double _maxLabelWidth; + protected override Size MeasureOverride(Size availableSize) + { + availableSize.Height = double.PositiveInfinity; + UIElementCollection children = InternalChildren; + + // When the available size is smaller than labels + content would desire, we will give all available space to labels (arbitrary choice). + // This needs to be done in two passes: finding the widest label and then measuring the contents with the remaining space. + _maxLabelWidth = 0; + + for (int i = 0; i < children.Count; i += 2) + { + UIElement label = children[i]; + if (label == null) continue; + + label.Measure(availableSize); + _maxLabelWidth = Math.Max(_maxLabelWidth, label.DesiredSize.Width); + } + + double maxContentWidth = 0; + availableSize.Width -= _maxLabelWidth + HorizontalSpacing; + + // The height must be tracked simultaneously for label and content as they need to be aligned. + double desiredHeight = 0; + int lines = 0; + + for (int i = 1; i < children.Count; i += 2) + { + UIElement content = children[i]; + double contentHeight = 0; + if (content != null) + { + content.Measure(availableSize); + maxContentWidth = Math.Max(maxContentWidth, content.DesiredSize.Width); + contentHeight = content.DesiredSize.Height; + } + + UIElement label = children[i - 1]; + double labelHeight = 0; + if (label != null) + labelHeight = label.DesiredSize.Height; + + lines++; + desiredHeight += Math.Max(labelHeight, contentHeight); + } + + if (lines > 0) + desiredHeight += VerticalSpacing * (lines - 1); + + return new Size(_maxLabelWidth + HorizontalSpacing + maxContentWidth, desiredHeight); + } + + protected override Size ArrangeOverride(Size finalSize) + { + UIElementCollection children = InternalChildren; + bool even = children.Count % 2 == 0; + + double labelLeft = 0; + double contentLeft = _maxLabelWidth + HorizontalSpacing; + double contentWidth = finalSize.Width - contentLeft; + + double top = 0; + + for (int i = 0; i < children.Count; i += 2) + { + double rowHeight = 0; + + UIElement label = children[i]; + if (label?.DesiredSize.Height > rowHeight) + rowHeight = label.DesiredSize.Height; + + UIElement content = null; + if (even || (i + 1 < children.Count)) content = children[i + 1]; + if (content?.DesiredSize.Height > rowHeight) + rowHeight = content.DesiredSize.Height; + + Rect labelRect = new Rect(labelLeft, top, _maxLabelWidth, rowHeight); + label?.Arrange(labelRect); + + Rect contentRect = new Rect(contentLeft, top, contentWidth, rowHeight); + content?.Arrange(contentRect); + + top += rowHeight + VerticalSpacing; + } + + return new Size(finalSize.Width, top - VerticalSpacing); + } + + protected override void OnVisualChildrenChanged(DependencyObject visualAdded, DependencyObject visualRemoved) + { + if (visualAdded is FrameworkElement elementAdded) + { + int index = InternalChildren.IndexOf(elementAdded); + bool isLabel = index % 2 == 0; + + if (isLabel) + { + if (elementAdded.Style == null && LabelStyle != null) + elementAdded.Style = LabelStyle; + + if (visualAdded is Label label && label.Target == null) + if (index >= 0 && index < InternalChildren.Count - 1) + label.Target = InternalChildren[index + 1]; + } + else + { + if (elementAdded.Style == null && ContentStyle != null) + elementAdded.Style = ContentStyle; + + if (index > 0 && index < InternalChildren.Count) + if (InternalChildren[index - 1] is Label label && label.Target == null) + label.Target = elementAdded; + } + } + } + } +} diff --git a/DWBox/ViewModels/BoxItem.cs b/DWBox/ViewModels/BoxItem.cs new file mode 100644 index 0000000..5dc3eeb --- /dev/null +++ b/DWBox/ViewModels/BoxItem.cs @@ -0,0 +1,132 @@ +using System; +using System.Text; +using System.Windows; +using System.Windows.Media; +using Win32.DWrite; + +namespace DWBox +{ + public class BoxItem + { + public BoxItem(FontSetEntry entry) + { + FontSetEntry = entry; + } + + public FontSetEntry FontSetEntry { get; } + public FontSet FontSet => FontSetEntry.FontSet; + public string Name => FontSetEntry.FullName; + public string TypographicFamilyName => FontSetEntry.TypographicFamilyName; + + public float EmSize { get; set; } = 48; + + private FontSet _singleFontSet; + public FontSet SingleFontSet + { + get + { + if (_singleFontSet == null) + { + if (FontSet.Count == 1) + return _singleFontSet = FontSet; + else + { + var builder = DWriteFactory.Shared6.CreateFontSetBuilder2(); + var reference = FontSetEntry.NativeObject.GetFontFaceReference(FontSetEntry.Index); + builder.AddFontFaceReference(reference); + + _singleFontSet = new FontSet(builder.CreateFontSet()); + } + } + + return _singleFontSet; + } + } + + private FontFace _fontFace; + public FontFace FontFace => _fontFace ??= FontSetEntry.CreateFontFace(); + public FontAxisValue[] FontAxisValues => FontFace.GetFontAxisValues(); + + private FontResource _fontResource; + public FontResource FontResource => _fontResource ??= FontSetEntry.CreateFontResource(); + + private FontFile _fontFile; + public FontFile FontFile => _fontFile ??= FontResource.GetFontFile(); + + public string FilePath + { + get + { + var resource = FontSetEntry.CreateFontResource(); + var file = resource.GetFontFile(); + + file.NativeObject.GetReferenceKey(out IntPtr keyData, out int keyLength); + + try + { + var loader = (DWrite.IDWriteLocalFontFileLoader)file.NativeObject.GetLoader(); + int pathLength = loader.GetFilePathLengthFromKey(keyData, keyLength); + StringBuilder path = new StringBuilder(pathLength + 1); + loader.GetFilePathFromKey(keyData, keyLength, path, path.Capacity); + return path.ToString(); + } + catch (InvalidCastException) + { + return null; + } + } + } + + public string Version => FontFace.Version; + public string NameVersion + { + get + { + if (Version is string version) + { + if (version.StartsWith("Version ", System.StringComparison.OrdinalIgnoreCase)) + return string.Join(" ", Name, version.Substring("Version ".Length)); + } + + return Name; + } + } + + public ImageSource SourceTypeImage + { + get + { + return FontSetEntry.FontSourceType switch + { + FontSourceType.Unknown => (ImageSource)Application.Current.FindResource("FileDestination"), + FontSourceType.PerMachine => (ImageSource)Application.Current.FindResource("LocalServer"), + FontSourceType.PerUser => (ImageSource)Application.Current.FindResource("User"), + FontSourceType.AppxPackage => (ImageSource)Application.Current.FindResource("Package"), + FontSourceType.RemoteFontProvider => (ImageSource)Application.Current.FindResource("Cloud"), + _ => null, + }; + } + } + + private DirectWriteElement _el; + public DirectWriteElement RenderingElement { get { return _el; } set { _el = value; } } + + + public static readonly DependencyProperty OwningItemProperty = DependencyProperty.RegisterAttached("OwningItem", typeof(BoxItem), typeof(BoxItem), new PropertyMetadata(null, OnPropertyChanged)); + + private static void OnPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) + { + SetOwningItem((DirectWriteElement)d, (BoxItem)e.NewValue); + } + + public static BoxItem GetOwningItem(DirectWriteElement obj) + { + return obj.DataContext as BoxItem; + } + public static void SetOwningItem(DirectWriteElement obj, BoxItem value) + { + value.RenderingElement = obj; + } + + } +} \ No newline at end of file diff --git a/DWBox/ViewModels/BoxItemCollection.cs b/DWBox/ViewModels/BoxItemCollection.cs new file mode 100644 index 0000000..2201bfd --- /dev/null +++ b/DWBox/ViewModels/BoxItemCollection.cs @@ -0,0 +1,72 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.ComponentModel; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Media; +using Win32.DWrite; + +namespace DWBox +{ + public class BoxItemCollection : IEnumerable + { + private readonly Dictionary> _itemsDictionary = new Dictionary>(); + private readonly ObservableCollection _items = new ObservableCollection(); + + public void Clear() + { + _itemsDictionary.Clear(); + _items.Clear(); + } + + public bool Add(FontSetEntry entry, float emSize) + { + BoxItem item = new BoxItem(entry) { EmSize = emSize }; + + if (!_itemsDictionary.TryGetValue(entry.FullName, out var items)) + _itemsDictionary[entry.FullName] = items = new List(); + + foreach (BoxItem existingItem in items) + if (item.FontFace.Equals(existingItem.FontFace)) + return false; + + items.Add(item); + _items.Add(item); + return true; + } + + public bool Remove(BoxItem item) + { + if (_itemsDictionary.TryGetValue(item.Name, out var items)) + items.Remove(item); + + return _items.Remove(item); + } + + public void Remove(Predicate predicate) + { + for (int i = _items.Count - 1; i >= 0; i--) + if (predicate(_items[i])) + { + _itemsDictionary.Remove(_items[i].Name); + _items.RemoveAt(i); + } + } + + public ICollectionView View + { + get + { + ListCollectionView view = new ListCollectionView(_items); + view.SortDescriptions.Add(new SortDescription(nameof(BoxItem.Name), ListSortDirection.Ascending)); + view.GroupDescriptions.Add(new PropertyGroupDescription(nameof(BoxItem.TypographicFamilyName))); + return view; + } + } + + public IEnumerator GetEnumerator() => _items.GetEnumerator(); + IEnumerator IEnumerable.GetEnumerator() => GetEnumerator(); + } +} diff --git a/DWBox/ViewModels/GlyphRunDetails.cs b/DWBox/ViewModels/GlyphRunDetails.cs new file mode 100644 index 0000000..8480c76 --- /dev/null +++ b/DWBox/ViewModels/GlyphRunDetails.cs @@ -0,0 +1,37 @@ +using System.Collections.ObjectModel; +using System.Windows.Media; + +namespace DWBox +{ + public class GlyphRunDetails : Collection + { + private BoxItem _item; + + public GlyphRunDetails(BoxItem item) + { + _item = item; + } + + public string Name => _item.NameVersion; + public float EmSize => _item.RenderingElement?.FontSize ?? 48f; + + private bool _noTypeface; + private GlyphTypeface _typeface; + public GlyphTypeface GlyphTypeface + { + get + { + if (_noTypeface) + return null; + + if (_typeface == null && _item.FilePath is string path) + { + try { _typeface = new GlyphTypeface(new System.Uri(path)); } + catch { _noTypeface = true; } + } + + return _typeface; + } + } + } +} diff --git a/DWBox/ViewModels/GlyphRunDetailsItem.cs b/DWBox/ViewModels/GlyphRunDetailsItem.cs new file mode 100644 index 0000000..6394363 --- /dev/null +++ b/DWBox/ViewModels/GlyphRunDetailsItem.cs @@ -0,0 +1,51 @@ +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Windows.Media; + +namespace DWBox +{ + public class GlyphRunDetailsItem + { + private GlyphRunDetails _details; + + public GlyphRunDetailsItem(GlyphRunDetails details) + { + _details = details; + } + + public int Index { get; set; } + public int ClusterIndex { get; set; } + public ushort GlyphID { get; set; } + public float Advance { get; set; } + public float AdvanceOffset { get; set; } + public float AscenderOffset { get; set; } + + public string FontName { get; set; } + + public List Codepoints { get; } = new List(); + public string CodepointsString => string.Join(" ", Codepoints.Select(c => c.ToString("X4"))); + public string String + { + get + { + StringBuilder s = new StringBuilder(Codepoints.Count); + foreach (int cp in Codepoints) + s.Append(char.ConvertFromUtf32(cp)); + return s.ToString(); + } + } + + public ImageSource GlyphImage + { + get + { + Geometry geometry = _details?.GlyphTypeface?.GetGlyphOutline(GlyphID, _details.EmSize, _details.EmSize); + if (geometry == null) + return null; + + return new DrawingImage(new GeometryDrawing(Brushes.Black, null, geometry)); + } + } + } +} diff --git a/DWBox/ViewModels/TextAnalysis.cs b/DWBox/ViewModels/TextAnalysis.cs new file mode 100644 index 0000000..916097d --- /dev/null +++ b/DWBox/ViewModels/TextAnalysis.cs @@ -0,0 +1,99 @@ +using System.Collections.Generic; +using System.Collections.ObjectModel; +using Win32.DWrite; + +namespace DWBox +{ + public class TextAnalysis : Collection + { + //private string _text; + //private BoxItem _item; + + //public TextAnalysis(string text, BoxItem item) + //{ + // _text = text; + // _item = item; + //} + + //public string Name => _item.NameVersion; + //public float EmSize => _item.RenderingElement?.FontSize ?? 48f; + + + public string Text { get; } + + public TextAnalysis(string text) + { + Text = text; + } + + public static TextAnalysis Analyze(string text, ReadingDirection readingDirection = ReadingDirection.LeftToRight, string cultureName = null) + { + TextAnalysis items = new TextAnalysis(text); + for (int i = 0; i < text.Length; i++) + items.Add(new TextAnalysisItem()); + + for (int i = 0; i < text.Length; i++) + { + items[i].Character = text[i]; + + if (char.IsSurrogatePair(text, i)) + { + items[i].CharacterString = text.Substring(i, 2); + items[i + 1].CharacterString = ""; + } + } + + var propertiesCache = new Dictionary(); + + var analyzer = (DWrite.IDWriteTextAnalyzer1)DWriteFactory.Shared.CreateTextAnalyzer(); + var source = new StringAnalysisSource(text, readingDirection, cultureName); + + var sink = new TextAnalysisSink(); + + sink.OnScriptAnalysis += (s, e) => + { + if (!propertiesCache.TryGetValue(e.ScriptAnalysis.Script, out ScriptProperties properties)) + properties = analyzer.GetScriptProperties(e.ScriptAnalysis); + + for (int i = 0; i < e.TextLength; i++) + items[e.TextPosition + i].ScriptProperties = properties; + }; + + sink.OnLineBreakpointAnalysis += (s, e) => + { + for (int i = 0; i < e.TextLength; i++) + items[e.TextPosition + i].LineBreakpoint = e.LineBreakpoints[i]; + }; + + sink.OnBidiLevelAnalysis += (s, e) => + { + for (int i = 0; i < e.TextLength; i++) + { + TextAnalysisItem item = items[e.TextPosition + i]; + item.BidiExplicitLevel = e.ExplicitLevel; + item.BidiResolvedLevel = e.ResolvedLevel; + } + }; + + sink.OnGlyphOrientationAnalysis += (s, e) => + { + for (int i = 0; i < e.TextLength; i++) + { + TextAnalysisItem item = items[e.TextPosition + i]; + item.GlyphOrientationAngle = e.GlyphOrientationAngle; + item.AdjustedBidiLevel = e.AdjustedBidiLevel; + item.IsSideWays = e.IsSideWays; + item.IsRightToLeft = e.IsRightToLeft; + } + }; + + analyzer.AnalyzeScript(source, 0, text.Length, sink); + analyzer.AnalyzeLineBreakpoints(source, 0, text.Length, sink); + analyzer.AnalyzeBidi(source, 0, text.Length, sink); + analyzer.AnalyzeVerticalGlyphOrientation(source, 0, text.Length, sink); + + return items; + } + + } +} diff --git a/DWBox/ViewModels/TextAnalysisItem.cs b/DWBox/ViewModels/TextAnalysisItem.cs new file mode 100644 index 0000000..3ab06c0 --- /dev/null +++ b/DWBox/ViewModels/TextAnalysisItem.cs @@ -0,0 +1,62 @@ +using System; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Media; +using Win32.DWrite; + +namespace DWBox +{ + public class TextAnalysisItem + { + public char Character { get; set; } + public string CharacterCode => "U+" + ((int)Character).ToString("X4"); + private string _characterString; + public string CharacterString + { + get { return _characterString ?? Character.ToString(); } + set { _characterString = value; } + } + + public ScriptProperties ScriptProperties { get; set; } + + public LineBreakpoint LineBreakpoint { get; set; } + + public int BidiExplicitLevel { get; set; } + public int BidiResolvedLevel { get; set; } + + public GlyphOrientationAngle GlyphOrientationAngle { get; set; } + public int AdjustedBidiLevel { get; set; } + public bool IsSideWays { get; set; } + public bool IsRightToLeft { get; set; } + + public Brush BreakBeforeBrush => GetBreakBrush(LineBreakpoint.BreakConditionBefore); + public Brush BreakAfterBrush => GetBreakBrush(LineBreakpoint.BreakConditionAfter); + + public Brush BidiExplicitBrush => GetBidiBrush(BidiExplicitLevel); + public Brush BidiResolvedBrush => GetBidiBrush(BidiResolvedLevel); + public Brush BidiAdjustedBrush => GetBidiBrush(AdjustedBidiLevel); + + private static Brush GetBidiBrush(int level) + { + return level % 2 == 0 ? Brushes.PaleTurquoise : Brushes.PaleGoldenrod; + } + + private static Brush GetBreakBrush(BreakCondition condition) + { + switch (condition) + { + case BreakCondition.CanBreak: + return Brushes.PaleGreen; + case BreakCondition.MayNotBreak: + return Brushes.PaleGoldenrod; + case BreakCondition.MustBreak: + return Brushes.PaleVioletRed; + + case BreakCondition.Neutral: + default: + return Brushes.White; + + } + } + } +} \ No newline at end of file diff --git a/GlyphRun.png b/GlyphRun.png new file mode 100644 index 0000000000000000000000000000000000000000..fb2a249f338dc5a4712cc7840a8ee1d019a36ed8 GIT binary patch literal 33467 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 z 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 jz4@R?q{nB^o|C>pd0P2a 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 ZtqWbS9kEjJPu;f#7;rNyQ>w9R literal 0 HcmV?d00001