Ejemplo n.º 1
0
        /// <summary>Gets or synthesises a glyph for the given style settings which include weight and italic. Style code 400 means regular.</summary>
        public Glyph GetGlyph(int charcode, FontFaceFlags style)
        {
            // Try getting the face:
            FontFace face = null;

            if (FontFaces.TryGetValue(style, out face))
            {
                // Great! Raster using that font face:
                return(face.GetGlyph(charcode));
            }

            // Get the code as an int:
            int styleCode = (int)style;

            // Italic?
            bool italic = ((styleCode & 1) == 1);

            // Get the font weight:
            int weight = (styleCode & ~1);

            if (weight == 0)
            {
                // Regular:
                weight = 400;
            }

            int match = 0;

            if (italic)
            {
                // Find one with the closest weight match.
                face = BestWeight(Italics, weight, out match);
            }
            else if (weight == 400)
            {
                // Regular. Note that regular must be set - the family wouldn't exist otherwise.
                return(Regular.GetGlyph(charcode));
            }
            else
            {
                // Find best weight match. Must also be not italic (this is why the bold set doesn't contain italic ones).
                face = BestWeight(Bold, weight, out match);
            }

            if (face == null || match != 0)
            {
                // We're synthesizing!

                if (face == null)
                {
                    face = Regular;
                }

                // Derive from face.
                face = face.CreateSynthetic(italic, weight);
            }

            return(face.GetGlyph(charcode));
        }
Ejemplo n.º 2
0
        /// <summary>Sets the weight of this face and if it's italic.</summary>
        public void SetFlags(bool italic, int weight)
        {
            // Build the flags:
            int flags = weight;

            if (italic)
            {
                flags |= 1;
            }

            // Apply the flags:
            StyleFlags = (FontFaceFlags)flags;

            // Apply weight:
            Weight = weight;
        }
Ejemplo n.º 3
0
        /// <summary>Adds the given font face to this family.</summary>
        public void Add(FontFace font)
        {
            font.DisableExtrude = DisableExtrude;

            // Grab the flags which represent the styling of this font:
            FontFaceFlags flags = font.StyleFlags;

            // Push:
            FontFaces[flags] = font;

            if (Regular == null || font.Regular)
            {
                Regular = font;
            }

            bool italic = font.Italic;

            if (font.Bold && !italic)
            {
                if (Bold == null)
                {
                    Bold = new List <FontFace>();
                }

                Bold.Add(font);
            }

            if (italic)
            {
                if (Italics == null)
                {
                    Italics = new List <FontFace>();
                }

                Italics.Add(font);
            }
        }