void ObtainFontMetrics(Graphics g) { string infoString = ""; // enough space for one line of output int ascent; // font family ascent in design units float ascentPixel; // ascent converted to pixels int descent; // font family descent in design units float descentPixel; // descent converted to pixels int lineSpacing; // font family line spacing in design units float lineSpacingPixel; // line spacing converted to pixels FontStyle fontStyle = FontStyle.Regular; //fontStyle = FontStyle.Italic | FontStyle.Bold; FontFamily fontFamily = new FontFamily("arial"); //fontFamily = FontFamily.GenericSansSerif; Font font = new Font( fontFamily, 16, fontStyle, GraphicsUnit.Pixel); PointF pointF = new PointF(10, 10); SolidBrush solidBrush = new SolidBrush(Color.Black); // Display the font size in pixels. infoString = "font family : " + font.FontFamily.Name + " " + fontStyle + "."; g.DrawString(infoString, font, solidBrush, pointF); // Move down one line. pointF.Y += font.Height; // Display the font size in pixels. infoString = "font.Size returns " + font.Size + "."; g.DrawString(infoString, font, solidBrush, pointF); // Move down one line. pointF.Y += font.Height; // Display the font family em height in design units. infoString = "fontFamily.GetEmHeight() returns " + fontFamily.GetEmHeight(fontStyle) + "."; g.DrawString(infoString, font, solidBrush, pointF); // Move down two lines. pointF.Y += 2 * font.Height; // Display the ascent in design units and pixels. ascent = fontFamily.GetCellAscent(fontStyle); // 14.484375 = 16.0 * 1854 / 2048 ascentPixel = font.Size * ascent / fontFamily.GetEmHeight(fontStyle); infoString = "The ascent is " + ascent + " design units, " + ascentPixel + " pixels."; g.DrawString(infoString, font, solidBrush, pointF); // Move down one line. pointF.Y += font.Height; // Display the descent in design units and pixels. descent = fontFamily.GetCellDescent(fontStyle); // 3.390625 = 16.0 * 434 / 2048 descentPixel = font.Size * descent / fontFamily.GetEmHeight(fontStyle); infoString = "The descent is " + descent + " design units, " + descentPixel + " pixels."; g.DrawString(infoString, font, solidBrush, pointF); // Move down one line. pointF.Y += font.Height; // Display the line spacing in design units and pixels. lineSpacing = fontFamily.GetLineSpacing(fontStyle); // 18.398438 = 16.0 * 2355 / 2048 lineSpacingPixel = font.Size * lineSpacing / fontFamily.GetEmHeight(fontStyle); infoString = "The line spacing is " + lineSpacing + " design units, " + lineSpacingPixel + " pixels."; g.DrawString(infoString, font, solidBrush, pointF); title = "ObtainFontMetrics"; }
/// <summary> /// Connects the specifications of a font from XFont to a real glyph type face. /// </summary> void Initialize() { XFontMetrics fm = null; #if DEBUG___ FontData[] fontDataArray = FontDataStock.Global.GetFontDataList(); if (fontDataArray.Length > 0) { //// GetType(); ////#if GDI //// var x = XPrivateFontCollection.global.GlobalPrivateFontCollection; //// families = x.Families; //// bool fff = families[0].IsStyleAvailable(System.Drawing.FontStyle.Regular); //// fff.GetType(); //// this.font = new Font(families[0].Name, 12, System.Drawing.FontStyle.Regular, GraphicsUnit.Pixel); //// this.font = new Font("Oblivious", 12, System.Drawing.FontStyle.Regular, GraphicsUnit.Pixel); //// this.font = new Font(families[0], 12, System.Drawing.FontStyle.Regular, GraphicsUnit.Pixel); //// System.Drawing.FontFamily f = new System.Drawing.FontFamily(families[0].Name); //// f.GetType(); ////#endif } #endif #if GDI if (this.font == null) { if (this.gdifamily != null) { this.font = new Font(this.gdifamily, (float)this.emSize, (System.Drawing.FontStyle) this.style, GraphicsUnit.World); this.familyName = this.gdifamily.Name; // Do we need this??? } else { // First check private fonts this.font = XPrivateFontCollection.TryFindPrivateFont(this.familyName, this.emSize, (System.Drawing.FontStyle) this.style) ?? new Font(this.familyName, (float)this.emSize, (System.Drawing.FontStyle) this.style, GraphicsUnit.World); } #if DEBUG // new Font returns MSSansSerif if the requested font was not found ... //Debug.Assert(this.familyName == this.font.FontFamily.Name); #endif } fm = Metrics; System.Drawing.FontFamily fontFamily = this.font.FontFamily; this.unitsPerEm = fm.UnitsPerEm; System.Drawing.FontFamily fontFamily2 = this.font.FontFamily; this.cellSpace = fontFamily2.GetLineSpacing(font.Style); //Debug.Assert(this.cellSpace == fm.Ascent + Math.Abs(fm.Descent) + fm.Leading, "Value differs from information retrieved from font image."); this.cellAscent = fontFamily.GetCellAscent(font.Style); #pragma warning disable 1030 #warning delTHHO //!!!delTHHO 14.08.2008 Debug.Assert(this.cellAscent == fm.Ascent, "Value differs from information retrieved from font image."); //Debug.Assert(this.cellAscent == fm.Ascent, "Value differs from information retrieved from font image."); this.cellDescent = fontFamily.GetCellDescent(font.Style); #if DEBUG int desc = Math.Abs(fm.Descent); if (this.cellDescent != desc) { Debug.Assert(false, "Value differs from information retrieved from font image."); } #endif #endif #if WPF #if !SILVERLIGHT if (this.family == null) { Debug.Assert(this.typeface == null); this.typeface = XPrivateFontCollection.TryFindTypeface(Name, this.style, out this.family); #if true if (this.typeface != null) { GlyphTypeface glyphTypeface; ICollection <Typeface> list = this.family.GetTypefaces(); foreach (Typeface tf in list) { if (!tf.TryGetGlyphTypeface(out glyphTypeface)) { Debugger.Break(); } } if (!this.typeface.TryGetGlyphTypeface(out glyphTypeface)) { throw new InvalidOperationException(PSSR.CannotGetGlyphTypeface(Name)); } } #endif } if (this.family == null) { this.family = new System.Windows.Media.FontFamily(Name); } if (typeface == null) { this.typeface = FontHelper.CreateTypeface(this.family, style); } fm = Metrics; Debug.Assert(this.unitsPerEm == 0 || this.unitsPerEm == fm.UnitsPerEm); this.unitsPerEm = fm.UnitsPerEm; //Debug.Assert(this.cellSpace == 0 || this.cellSpace == fm.Ascent + Math.Abs(fm.Descent) + fm.Leading); this.cellSpace = fm.Ascent + Math.Abs(fm.Descent) + fm.Leading; Debug.Assert(this.cellAscent == 0 || this.cellAscent == fm.Ascent); this.cellAscent = fm.Ascent; Debug.Assert(this.cellDescent == 0 || this.cellDescent == Math.Abs(fm.Descent)); this.cellDescent = Math.Abs(fm.Descent); #else if (fm != null) { fm.GetType(); } #endif #endif }
public void FontFamily_String () { HostIgnoreList.CheckTest ("MonoTests.System.Drawing.FontFamilyTest.FontFamily_String"); FontFamily ff = new FontFamily (name); CheckMono (ff); FontStyle style = FontStyle.Bold; Assert.AreEqual (ff.Name, ff.GetName (0), "GetName"); Assert.IsTrue ((ff.GetCellAscent (style) > 0), "GetCellAscent"); Assert.IsTrue ((ff.GetCellDescent (style) > 0), "GetCellDescent"); Assert.IsTrue ((ff.GetEmHeight (style) > 0), "GetEmHeight"); Assert.IsTrue ((ff.GetLineSpacing (style) > 0), "GetLineSpacing"); Assert.IsTrue (ff.IsStyleAvailable (style), "IsStyleAvailable"); }
public MetricsInfo GetMetricInfo(int character, GraphicsContext context, DeviceDescription description) { var svgContext = _mapper.MapGraphicsContextToSvg(new Point(), 0, context); var s = new string(new[] { (char)character }); var family = new FontFamily(svgContext.Font.Family); var style = GetStyle(context.FontFace); return new MetricsInfo { Ascent = family.GetCellAscent(style), Descent = family.GetCellDescent(style), Width = MeasureWidth(s, context, description), }; }
private void InitializeSizes() { _fretWidth = 4 * _size; _nutHeight = _fretWidth / 2f; _lineWidth = (int)Math.Ceiling(_size * 0.31); _dotWidth = (int)Math.Ceiling(0.9 * _fretWidth); _markerWidth = 0.7f * _fretWidth; _boxWidth = 5 * _fretWidth + 6 * _lineWidth; _boxHeight = FRET_COUNT * (_fretWidth + _lineWidth) + _lineWidth; //Find out font sizes FontFamily family = new FontFamily(FONT_NAME); float perc = family.GetCellAscent(FontStyle.Regular) / (float)family.GetLineSpacing(FontStyle.Regular); _fretFontSize = _fretWidth / perc; _fingerFontSize = _fretWidth * 0.8f; _nameFontSize = _fretWidth * 2f / perc; _superScriptFontSize = 0.7f * _nameFontSize; if (_size == 1) { _nameFontSize += 2; _fingerFontSize += 2; _fretFontSize += 2; _superScriptFontSize += 2; } _xstart = _fretWidth; _ystart = (float) Math.Round(0.2f * _superScriptFontSize + _nameFontSize + _nutHeight + 1.7f * _markerWidth); _imageWidth = (int)(_boxWidth + 5 * _fretWidth); _imageHeight = (int)(_boxHeight + _ystart + _fretWidth + _fretWidth); _signWidth = (int)(_fretWidth * 0.75); _signRadius = _signWidth / 2; }