示例#1
0
        public override void drawGlyphVector(java.awt.font.GlyphVector gv, float x, float y)
        {
            java.awt.Font javaFont = gv.getFont();
            if (javaFont == null)
            {
                javaFont = font;
            }
            int count = gv.getNumGlyphs();

            char[] text = new char[count];
            for (int i = 0; i < count; i++)
            {
                text[i] = (char)gv.getGlyphCode(i);
            }
            java.awt.font.FontRenderContext frc = gv.getFontRenderContext();
            Matrix matrix = null;

            try
            {
                if (frc != null && !frc.getTransform().equals(getTransform()))
                {
                    // save the old context and use the transformation from the renderContext
                    matrix      = g.Transform;
                    g.Transform = J2C.ConvertTransform(frc.getTransform());
                }
                g.DrawString(new string(text), javaFont.getNetFont(), brush, x, y - javaFont.getSize(), StringFormat.GenericTypographic);
            }
            finally
            {
                // Restore the old context if needed
                if (matrix != null)
                {
                    g.Transform = matrix;
                }
            }
        }
示例#2
0
 public override void drawString(String text, float x, float y)
 {
     if (text.Length == 0)
     {
         return;
     }
     bool fractional = isFractionalMetrics();
     StringFormat format = new StringFormat(StringFormat.GenericTypographic);
     format.FormatFlags = StringFormatFlags.MeasureTrailingSpaces | StringFormatFlags.NoWrap | StringFormatFlags.FitBlackBox;
     format.Trimming = StringTrimming.None;
     if (fractional || !sun.font.StandardGlyphVector.isSimpleString(font, text))
     {
         g.DrawString(text, netfont, brush, x, y - font.getSize(), format);
     }
     else
     {
         // fixed metric for simple text, we position every character to simulate the Java behaviour
         java.awt.font.FontRenderContext frc = new java.awt.font.FontRenderContext(null, isAntiAlias(), fractional);
         sun.font.FontDesignMetrics metrics = sun.font.FontDesignMetrics.getMetrics(font, frc);
         y -= font.getSize();
         for (int i = 0; i < text.Length; i++)
         {
             g.DrawString(text.Substring(i, 1), netfont, brush, x, y, format);
             x += metrics.charWidth(text[i]);
         }
     }
 }
示例#3
0
        public override void drawString(String text, float x, float y) {
            if (text.Length == 0) {
                return;
            }
            CompositingMode origCM = g.CompositingMode;
            try {
                if (origCM != CompositingMode.SourceOver) {
                    // Java has a different behaviar for AlphaComposite and Text Antialiasing
                    g.CompositingMode = CompositingMode.SourceOver;
                }

                bool fractional = isFractionalMetrics();
                if (fractional || !sun.font.StandardGlyphVector.isSimpleString(font, text)) {
                    g.DrawString(text, netfont, brush, x, y - baseline, FORMAT);
                } else {
                    // fixed metric for simple text, we position every character to simulate the Java behaviour
                    java.awt.font.FontRenderContext frc = new java.awt.font.FontRenderContext(null, isAntiAlias(), fractional);
                    sun.font.FontDesignMetrics metrics = sun.font.FontDesignMetrics.getMetrics(font, frc);
                    y -= baseline;
                    for (int i = 0; i < text.Length; i++) {
                        g.DrawString(text.Substring(i, 1), netfont, brush, x, y, FORMAT);
                        x += metrics.charWidth(text[i]);
                    }
                }
            } finally {
                if (origCM != CompositingMode.SourceOver) {
                    g.CompositingMode = origCM;
                }
            }
        }