예제 #1
0
            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)));
        }
예제 #4
0
 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);
 }
예제 #5
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));
        }
예제 #6
0
        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);
예제 #7
0
 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;
 }
예제 #10
0
 internal DWriteFontFile(IDWriteFontFile handle)
 {
     this.handle = handle;
 }