public HRESULT GetCurrentFontFile(out IDWriteFontFile fontFile) { DWriteFontFile file; try { file = _enumerator.Current; } catch (Exception e) { ComError.SetError(e.GetAllMessages()); fontFile = null; return(HRESULTS.DISP_E_EXCEPTION); } if (file is DWriteFontStreamFile sf && sf.FilePath != null) { using (var mem = new ComMemory(Marshal.SizeOf <long>())) { if (sf.LastWriteTime.HasValue) { Marshal.WriteInt64(mem.Pointer, sf.LastWriteTime.Value.ToFileTime()); } var ptr = sf.LastWriteTime.HasValue ? mem.Pointer : IntPtr.Zero; return(_factory.CreateFontFileReference(sf.FilePath, ptr, out fontFile)); } } var stream = new FontFileStream(file); _loader.AddStream(stream); return(_factory.CreateCustomFontFileReference(stream.Key, (uint)stream.KeySize, _loader, out fontFile)); }
public IDWriteFontFile[] GetFiles() { int numberOfFiles = FilesCount; IDWriteFontFile[] files = new IDWriteFontFile[numberOfFiles]; GetFiles(ref numberOfFiles, files).CheckError(); return(files); }
public DWriteFontFile[] GetFiles() { uint numberOfFiles = 0; this.handle.GetFiles(ref numberOfFiles, null); IDWriteFontFile[] fontFiles = new IDWriteFontFile[numberOfFiles]; this.handle.GetFiles(ref numberOfFiles, fontFiles); return(Array.ConvertAll(fontFiles, t => new DWriteFontFile(t))); }
public int GetCurrentFontFile(out IDWriteFontFile fontFile) { fontFile = null; try { fontFile = Factory.CreateFontFile( _factory, _fontFileLoader, _fontSourceCollectionEnumerator.Current.Uri ); } catch (Exception e) { return(Marshal.GetHRForException(e)); } return(0); }
public FontFile CreateFontFile(Uri filePathUri) { IDWriteFontFile dwriteFontFile = null; try { dwriteFontFile = CreateFontFile(_pFactory, WpfFontFileLoader, filePathUri); } catch { // If DWrite's CreateFontFileReference fails then try opening the file using WPF's logic. // The failures that WPF returns are more granular than the HRESULTs that DWrite returns // thus we use WPF's logic to open the file to throw the same exceptions that // WPF would have thrown before. IFontSource fontSource = _fontSourceFactory.Create(filePathUri.AbsoluteUri); fontSource.TestFileOpenable(); throw; } return(new FontFile(dwriteFontFile)); }
public void CreateFontFaceTest() { var ldr = new FontLoader(); var pList = Directory.EnumerateFiles(fontDir).Take(1).Select(f => Instance.CreateFontFileReference(f)).ToArray(); try { pList[0].Analyze(out var sup, out var ft, out var fc, out var fcn); TestContext.WriteLine($"Supported={sup}; FileType={ft}; FaceType={fc}; FaceCnt={fcn}"); var pFF = ComReleaserFactory.Create(Instance.CreateFontFace(fc, (uint)pList.Length, pList, 0, DWRITE_FONT_SIMULATIONS.DWRITE_FONT_SIMULATIONS_NONE)); Assert.That(pFF.Item.GetType(), Is.EqualTo(fc)); var ff = new IDWriteFontFile[pList.Length]; var fflen = (uint)ff.Length; Assert.That(() => pFF.Item.GetFiles(ref fflen, ff), Throws.Nothing); ff.WriteValues(); TestContext.WriteLine($"Index in font files: {pFF.Item.GetIndex()}"); TestContext.WriteLine($"Simulations: {pFF.Item.GetSimulations()}"); Assert.That(pFF.Item.IsSymbolFont(), Is.False); Assert.That(() => { pFF.Item.GetMetrics(out var faceMetrics); faceMetrics.WriteValues(); }, Throws.Nothing); var glCnt = (int)pFF.Item.GetGlyphCount(); Assert.That(glCnt, Is.GreaterThan(0)); glCnt = Math.Min(3, glCnt); var glm = new DWRITE_GLYPH_METRICS[glCnt]; var glidx = Enumerable.Range(0, glCnt).Select(i => (ushort)i).ToArray(); Assert.That(() => pFF.Item.GetDesignGlyphMetrics(glidx, (uint)glCnt, glm), Throws.Nothing); glm.WriteValues(); Assert.That(() => { var tag = DWRITE_FONT_FEATURE_TAG.DWRITE_FONT_FEATURE_TAG_DEFAULT; pFF.Item.TryGetFontTable((uint)tag, out var tableData, out var tableSize, out var tableCtx, out var tableExists); TestContext.WriteLine($"Table: {tag} = Sz:{tableSize}, {tableExists}"); pFF.Item.ReleaseFontTable(tableCtx); }, Throws.Nothing); var rParams = Instance.CreateRenderingParams(); pFF.Item.GetRecommendedRenderingMode(9f, 72f, DWRITE_MEASURING_MODE.DWRITE_MEASURING_MODE_NATURAL, rParams).WriteValues(); var hMon = User32.MonitorFromPoint(System.Drawing.Point.Empty, User32.MonitorFlags.MONITOR_DEFAULTTOPRIMARY); rParams = Instance.CreateMonitorRenderingParams(hMon); pFF.Item.GetRecommendedRenderingMode(9f, 72f, DWRITE_MEASURING_MODE.DWRITE_MEASURING_MODE_NATURAL, rParams).WriteValues(); rParams = Instance.CreateCustomRenderingParams(2.2f, 1f, 1f, DWRITE_PIXEL_GEOMETRY.DWRITE_PIXEL_GEOMETRY_BGR, DWRITE_RENDERING_MODE.DWRITE_RENDERING_MODE_ALIASED); pFF.Item.GetRecommendedRenderingMode(9f, 72f, DWRITE_MEASURING_MODE.DWRITE_MEASURING_MODE_NATURAL, rParams).WriteValues(); pFF.Item.GetGdiCompatibleMetrics(9f, 72f).WriteValues(); Assert.That(() => pFF.Item.GetGdiCompatibleGlyphMetrics(9f, 72f, default, true, glidx, (uint)glCnt, glm), Throws.Nothing);
internal FontFile(IDWriteFontFile fontFile) { _fontFile = fontFile; }
public DWriteFontFile[] GetFiles() { uint numberOfFiles = 0; this.handle.GetFiles(ref numberOfFiles, null); IDWriteFontFile[] fontFiles = new IDWriteFontFile[numberOfFiles]; this.handle.GetFiles(ref numberOfFiles, fontFiles); return Array.ConvertAll(fontFiles, t => new DWriteFontFile(t)); }
internal DWriteFontFile(IDWriteFontFile handle) { this.handle = handle; }