Ejemplo n.º 1
0
        private System.Drawing.Point GetCharSize(System.Drawing.Graphics CurGraphics)
        {
            //prntSome.printSome("GetCharSize");
            // DrawString doesn't actually print where you tell it to but instead consistently prints
            // with an offset. This is annoying when the other draw commands do not print with an offset
            // this method returns a point defining the offset so we can take it off the printstring command.

            System.Drawing.CharacterRange[] characterRanges =
            {
                new System.Drawing.CharacterRange(0, 1)
            };

            System.Drawing.RectangleF layoutRect = new System.Drawing.RectangleF(0, 0, 100, 100);

            System.Drawing.StringFormat stringFormat = new System.Drawing.StringFormat();

            stringFormat.SetMeasurableCharacterRanges(characterRanges);

            System.Drawing.Region[] stringRegions = new System.Drawing.Region[1];

            stringRegions = CurGraphics.MeasureCharacterRanges(
                "A",
                this.Font,
                layoutRect,
                stringFormat);

            System.Drawing.RectangleF measureRect1 = stringRegions[0].GetBounds(CurGraphics);

            return(new System.Drawing.Point((int)(measureRect1.Width + 0.5), (int)(measureRect1.Height + 0.5)));
        }
Ejemplo n.º 2
0
        public static int CharacterLength(char c, float fontSize, string fontName)
        {
            System.Drawing.Bitmap   holderBmp = new System.Drawing.Bitmap(1, 1);
            System.Drawing.Graphics g         = System.Drawing.Graphics.FromImage(holderBmp);
            //bool needRF = needRefresh;

            if (c == ' ')
            {
            }

            string text = "" + c;

            System.Drawing.SizeF size = g.MeasureString(text,
                                                        new System.Drawing.Font(fontName, fontSize));
            System.Drawing.Font         font   = new System.Drawing.Font(fontName, fontSize);
            System.Drawing.StringFormat format = new System.Drawing.StringFormat();
            format.FormatFlags = System.Drawing.StringFormatFlags.MeasureTrailingSpaces;
            System.Drawing.CharacterRange[] ranges = new System.Drawing.CharacterRange[] { new System.Drawing.CharacterRange(0, 1) };
            format.SetMeasurableCharacterRanges(ranges);
            System.Drawing.Rectangle  sdRect  = new System.Drawing.Rectangle(0, 0, (int)(size.Width + 0.5), (int)(size.Height + 0.5));
            System.Drawing.Region[]   regions = g.MeasureCharacterRanges(text, font, sdRect, format);
            System.Drawing.RectangleF rectF   = regions[0].GetBounds(g);

            //needRefresh = needRF;
            holderBmp.Dispose();
            return((int)(rectF.Width * (c == ' ' ? 1.7 : 1) + 0.5));
        }
Ejemplo n.º 3
0
 protected static void DrawString(System.Drawing.Graphics graphics, string s, System.Drawing.Font font, System.Drawing.Brush brush, float x, float y)
 {
     System.Drawing.StringFormat stringFormat = new System.Drawing.StringFormat(System.Drawing.StringFormat.GenericTypographic);
     stringFormat.FormatFlags = stringFormat.FormatFlags | System.Drawing.StringFormatFlags.MeasureTrailingSpaces;
     stringFormat.SetMeasurableCharacterRanges(new System.Drawing.CharacterRange[] { new System.Drawing.CharacterRange(0, s.Length) });
     stringFormat.SetTabStops(0, new float[] { 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80 });
     graphics.DrawString(s, font, brush, x, y, stringFormat);
 }
Ejemplo n.º 4
0
 public static System.Drawing.SizeF MeasureString(System.Drawing.Graphics graphics, string s, System.Drawing.Font font)
 {
     System.Drawing.StringFormat stringFormat = new System.Drawing.StringFormat(System.Drawing.StringFormat.GenericTypographic);
     stringFormat.FormatFlags = stringFormat.FormatFlags | System.Drawing.StringFormatFlags.MeasureTrailingSpaces;
     stringFormat.SetMeasurableCharacterRanges(new System.Drawing.CharacterRange[] { new System.Drawing.CharacterRange(0, s.Length) });
     stringFormat.SetTabStops(0, new float[] { 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80 });
     System.Drawing.Region[]   regions = graphics.MeasureCharacterRanges(s, font, new System.Drawing.RectangleF(0, 0, s.Length * font.Height, font.Height), stringFormat);
     System.Drawing.RectangleF rect    = regions[0].GetBounds(graphics);
     return(rect.Size);
 }
Ejemplo n.º 5
0
        private void UpdateTextArea(System.Drawing.PointF origin)
        {
            using (System.Drawing.Graphics g = System.Drawing.Graphics.FromHwnd(System.IntPtr.Zero))
            {
                System.Drawing.StringFormat sf = (System.Drawing.StringFormat)_format.Clone();
                sf.FormatFlags |= System.Drawing.StringFormatFlags.MeasureTrailingSpaces;
                sf.Trimming     = System.Drawing.StringTrimming.Character;
                sf.SetMeasurableCharacterRanges(new System.Drawing.CharacterRange[] { new System.Drawing.CharacterRange(0, _text.Length) });

                g.PageUnit          = System.Drawing.GraphicsUnit.Point;
                g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
                System.Drawing.SizeF textSize = g.MeasureString(_text, _font, origin, sf);

                float x, y;
                switch (_format.Alignment)
                {
                case System.Drawing.StringAlignment.Far:
                    x = origin.X - textSize.Width;
                    break;

                case System.Drawing.StringAlignment.Center:
                    x = origin.X - textSize.Width / 2;
                    break;

                case System.Drawing.StringAlignment.Near:
                    x = origin.X;
                    break;

                default:
                    throw new Aurigma.GraphicsMill.UnexpectedException();
                }

                switch (_format.LineAlignment)
                {
                case System.Drawing.StringAlignment.Far:
                    y = origin.Y - textSize.Height;
                    break;

                case System.Drawing.StringAlignment.Center:
                    y = origin.Y - textSize.Height / 2;
                    break;

                case System.Drawing.StringAlignment.Near:
                    y = origin.Y;
                    break;

                default:
                    throw new Aurigma.GraphicsMill.UnexpectedException();
                }

                _textArea = new System.Drawing.RectangleF(x, y, textSize.Width, textSize.Height);
            }
        }
Ejemplo n.º 6
0
        private CharSize InternalMeasureChar(char ch)
        {
            Debug.Assert(CharUtil.CanDraw(ch));

            using (var sf = new System.Drawing.StringFormat(System.Drawing.StringFormat.GenericTypographic))
            {
                var g = _measureCharOffscreen.Graphics;
                sf.SetMeasurableCharacterRanges(new[] { new System.Drawing.CharacterRange(0, 1) });
                var text    = ch + "a"; // 文字がスペースの場合にサイズが0になってしまうので、その回避
                var regions = g.MeasureCharacterRanges(text, _font, new System.Drawing.RectangleF(0, 0, 1000, 1000), sf);
                System.Drawing.RectangleF rect = regions[0].GetBounds(g);
                return(new CharSize(rect.Width, rect.Height));
            }
        }
Ejemplo n.º 7
0
        private System.Drawing.SizeF MeasureString(string s, System.Drawing.Graphics g, System.Drawing.Font drawFont, System.Drawing.StringFormat drawFormat)
        {
            if (s == null || s.Length == 0)
            {
                return(System.Drawing.SizeF.Empty);
            }

            System.Drawing.CharacterRange[] cr = { new System.Drawing.CharacterRange(0, s.Length) };
            drawFormat.SetMeasurableCharacterRanges(cr);
            System.Drawing.Region[] rs = new System.Drawing.Region[1];
            rs = g.MeasureCharacterRanges(s, drawFont, new System.Drawing.RectangleF(0, 0, float.MaxValue, float.MaxValue),
                                          drawFormat);
            System.Drawing.RectangleF mr = rs[0].GetBounds(g);

            return(new System.Drawing.SizeF(mr.Width, mr.Height));
        }
Ejemplo n.º 8
0
        /// <summary>
        /// Measures the location of words within a string;  limited by .Net 1.1 to 32 words
        ///     MEASUREMAX is a constant that defines that limit
        /// </summary>
        /// <param name="s"></param>
        /// <param name="g"></param>
        /// <param name="drawFont"></param>
        /// <param name="drawFormat"></param>
        /// <param name="cra"></param>
        /// <returns></returns>
        private WordStartFinish[] MeasureString32(string s, System.Drawing.Graphics g, System.Drawing.Font drawFont, System.Drawing.StringFormat drawFormat, System.Drawing.CharacterRange[] cra)
        {
            if (s == null || s.Length == 0)
            {
                return(null);
            }

            drawFormat.SetMeasurableCharacterRanges(cra);
            System.Drawing.Region[] rs = new System.Drawing.Region[cra.Length];
            rs = g.MeasureCharacterRanges(s, drawFont, new System.Drawing.RectangleF(0, 0, float.MaxValue, float.MaxValue),
                                          drawFormat);
            WordStartFinish[] sz = new WordStartFinish[cra.Length];
            int isz = 0;

            foreach (System.Drawing.Region r in rs)
            {
                System.Drawing.RectangleF mr = r.GetBounds(g);
                sz[isz].start = RSize.PointsFromPixels(g, mr.Left);
                sz[isz].end   = RSize.PointsFromPixels(g, mr.Right);
                isz++;
            }
            return(sz);
        }
Ejemplo n.º 9
0
        /// <summary>
        /// Gets the rectangle taken up by the rendered text.
        /// </summary>
        /// <param name="text">The text to render</param>
        /// <param name="font">The font to render the text in</param>
        /// <returns>The rectangle taken up by rendering the text</returns>
        private static SysSystem.Drawing.RectangleF GetTextRectangle(string text, SysSystem.Drawing.Font font)
        {
            // Create a small bitmap just to get a device context
            SysSystem.Drawing.Bitmap tmpBitmap = new SysSystem.Drawing.Bitmap(1, 1);

            using (SysSystem.Drawing.Graphics g = SysSystem.Drawing.Graphics.FromImage(tmpBitmap))
                using (SysSystem.Drawing.StringFormat stringFormat = new SysSystem.Drawing.StringFormat())
                {
                    stringFormat.Alignment   = SysSystem.Drawing.StringAlignment.Near;
                    stringFormat.Trimming    = SysSystem.Drawing.StringTrimming.None;
                    stringFormat.FormatFlags = SysSystem.Drawing.StringFormatFlags.NoClip | SysSystem.Drawing.StringFormatFlags.NoWrap;
                    // Do a small rectangle. The size will be ignored with the flags being used
                    SysSystem.Drawing.RectangleF rectangle = new SysSystem.Drawing.RectangleF(0, 0, 1, 1);
                    // Set the stringFormat for measuring the first character
                    SysSystem.Drawing.CharacterRange[] characterRanges = { new SysSystem.Drawing.CharacterRange(0, text.Length) };
                    stringFormat.SetMeasurableCharacterRanges(characterRanges);

                    SysSystem.Drawing.Region[] stringRegions = g.MeasureCharacterRanges(text, font, rectangle, stringFormat);

                    // Draw rectangle for first measured range.
                    return(stringRegions[0].GetBounds(g));
                }
        }
Ejemplo n.º 10
0
        private System.Drawing.Point GetDrawStringOffset(System.Drawing.Graphics CurGraphics, System.Int32 X, System.Int32 Y, System.Char CurChar)
        {
            //prntSome.printSome("GetDrawStringOffset");
               // DrawString doesn't actually print where you tell it to but instead consistently prints
               // with an offset. This is annoying when the other draw commands do not print with an offset
               // this method returns a point defining the offset so we can take it off the printstring command.

               System.Drawing.CharacterRange[] characterRanges =
               {
               new System.Drawing.CharacterRange(0, 1)
               };

               System.Drawing.RectangleF layoutRect = new System.Drawing.RectangleF (X, Y, 100, 100);

               System.Drawing.StringFormat stringFormat = new System.Drawing.StringFormat();

               stringFormat.SetMeasurableCharacterRanges(characterRanges);

               System.Drawing.Region[] stringRegions = new System.Drawing.Region[1];

               stringRegions = CurGraphics.MeasureCharacterRanges(
                CurChar.ToString (),
                this.Font,
                layoutRect,
                stringFormat);

            System.Drawing.RectangleF measureRect1 = stringRegions[0].GetBounds (CurGraphics);

            return new System.Drawing.Point ((int) (measureRect1.X + 0.5), (int) (measureRect1.Y + 0.5));
        }
		/// <summary>
		/// Gets the rectangle taken up by the rendered text.
		/// </summary>
		/// <param name="text">The text to render</param>
		/// <param name="font">The font to render the text in</param>
		/// <returns>The rectangle taken up by rendering the text</returns>
		private static SysSystem.Drawing.RectangleF GetTextRectangle(string text, SysSystem.Drawing.Font font)
		{
			// Create a small bitmap just to get a device context
			SysSystem.Drawing.Bitmap tmpBitmap = new SysSystem.Drawing.Bitmap(1, 1);

			using (SysSystem.Drawing.Graphics g = SysSystem.Drawing.Graphics.FromImage(tmpBitmap))
			using (SysSystem.Drawing.StringFormat stringFormat = new SysSystem.Drawing.StringFormat())
			{
				stringFormat.Alignment = SysSystem.Drawing.StringAlignment.Near;
				stringFormat.Trimming = SysSystem.Drawing.StringTrimming.None;
				stringFormat.FormatFlags = SysSystem.Drawing.StringFormatFlags.NoClip | SysSystem.Drawing.StringFormatFlags.NoWrap;
				// Do a small rectangle. The size will be ignored with the flags being used
				SysSystem.Drawing.RectangleF rectangle = new SysSystem.Drawing.RectangleF(0, 0, 1, 1);
				// Set the stringFormat for measuring the first character
				SysSystem.Drawing.CharacterRange[] characterRanges ={ new SysSystem.Drawing.CharacterRange(0, text.Length) };
				stringFormat.SetMeasurableCharacterRanges(characterRanges);

				SysSystem.Drawing.Region[] stringRegions = g.MeasureCharacterRanges(text, font, rectangle, stringFormat);

				// Draw rectangle for first measured range.
				return stringRegions[0].GetBounds(g);
			}
		}