Beispiel #1
0
 public static void TransformPoints(GlyphPoint[] p, GlyphComponent c)
 {
     foreach (var t in p)
     {
         var px = t.X;
         var py = t.Y;
         t.X = (short)(c.XScale * px + c.Scale01 * py + c.DX);
         t.Y = (short)(c.Scale10 * px + c.YScale * py + c.DY);
     }
 }
Beispiel #2
0
                public static GlyphComponent Load(FontSource p)
                {
                    var gc    = new GlyphComponent();
                    var flags = p.ReadUShort();

                    gc.GlyphId = p.ReadUShort();

                    if ((flags & 1) > 0)
                    {
                        if ((flags & 2) > 0)
                        {
                            gc.DX = p.ReadShort();
                            gc.DY = p.ReadShort();
                        }
                        else
                        {
                            gc.MatchedPoints = new[] { p.ReadUShort(), p.ReadUShort() };
                        }
                    }
                    else
                    {
                        if ((flags & 2) > 0)
                        {
                            gc.DX = p.ReadSByte();
                            gc.DY = p.ReadSByte();
                        }
                        else
                        {
                            gc.MatchedPoints = new[] { p.ReadUShort(), p.ReadUShort() };
                        }
                    }

                    if ((flags & 8) > 0)
                    {
                        gc.XScale = gc.YScale = p.ReadF2Dot14();
                    }
                    else if ((flags & 64) > 0)
                    {
                        gc.XScale = p.ReadF2Dot14();
                        gc.YScale = p.ReadF2Dot14();
                    }
                    else if ((flags & 128) > 0)
                    {
                        gc.XScale  = p.ReadF2Dot14();
                        gc.Scale01 = p.ReadF2Dot14();
                        gc.Scale10 = p.ReadF2Dot14();
                        gc.YScale  = p.ReadF2Dot14();
                    }

                    gc.MoreComponents = (flags & 32) > 0;

                    return(gc);
                }
Beispiel #3
0
            public GlyphComponent[] GetGlyphComponents(FontSource source)
            {
                source.Offset = Offset;

                var list = new List <GlyphComponent>();

                var limit = 10;

                while (limit-- > 0)
                {
                    var component = GlyphComponent.Load(source);
                    list.Add(component);
                    if (!component.MoreComponents)
                    {
                        break;
                    }
                }

                return(list.ToArray());
            }