On Wed, Jul 30, 2008 at 11:43:04PM -0400, [EMAIL PROTECTED] wrote:
> On Mon, Jul 28, 2008 at 02:38:10AM +0300, Ivan N. Zlatev wrote:
> > [EMAIL PROTECTED] wrote:
> > > I see another potentially related bug with drawing. I am trying to draw
> > > some Bezier curves (with GraphicsPath); and the positioning and
> > > appearance is way off (at least with respect to MS .NET).
> > > 
> > > Can someone comment on this? I have attached source code, makefile, and
> > > two screenshots (ms.net/windows vs. mono/linux).
> > > 
> > 
> > I see the bad rendering with SVN Head as well. Please file a bug[1] for 
> > the  System.Drawing component with a good description of the problem, a 
> > self-contained test case and the screenshots attached.
> > 
> > [1] http://mono-project.com/Bugs
> > 
> 
> I just filed a bug (Bug #413461)
> 
> --Matt

With some more drawing experiments, I may have uncovered more bugs. I
need a confirmation. I attached two screenshots of renderings from both
frameworks (mono and ms.net), and they are noticeably different. The
common source code is attached as well.

Let me know if these are bugs and if a bug report should be filed.

--Matt

P.S. I am using libgdiplus-110213 and mono-111509.
using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;

namespace SWFTest
{
        /// <summary>
        /// Summary description for Form1.
        /// </summary>
        public class Form1 : Form
        {
                private System.Windows.Forms.Label label1;
                private System.Windows.Forms.LinkLabel linkLabel1;
                private System.Windows.Forms.Button button1;
                private System.Windows.Forms.TextBox textBox1;
                private System.ComponentModel.IContainer components;

                SolidBrush pfsb;
                LinearGradientBrush lgb;
                GraphicsPath path;
                Pen pFS;
                int dX = 520;
                int dY = 320;
                int cirSize = 152;

                public Form1()
                {
                        pFS = new Pen(Color.Blue, 16);
                        lgb = new LinearGradientBrush(new Point(0,dY), new 
Point(0,dY+118), Color.FromArgb(160, Color.Blue), Color.Green);
                        pfsb = new SolidBrush(Color.FromArgb(150, 
Color.Orange));
                        path = new GraphicsPath(new Point[]
                                                                {
                                                                        new 
Point(dX-64, dY-24),//start
                                                                        new 
Point(dX-59, dY-34),//focal point 1
                                                                        new 
Point(dX-52, dY-54),//focal point 2
                                                                        new 
Point(dX-18, dY-66),//top
                                                                        new 
Point(dX-34, dY-47),//focal point 1
                                                                        new 
Point(dX-43, dY-27),//focal point 2
                                                                        new 
Point(dX-44, dY-8),//end
                        }, new byte[]
                                                                {
                                                                        
(byte)PathPointType.Start,
                                                                        
(byte)PathPointType.Bezier,
                                                                        
(byte)PathPointType.Bezier,
                                                                        
(byte)PathPointType.Bezier,
                                                                        
(byte)PathPointType.Bezier,
                                                                        
(byte)PathPointType.Bezier,
                                                                        
(byte)PathPointType.Bezier,
                        });

                        InitializeComponent();

                        this.SetStyle(ControlStyles.UserPaint, true);
                        this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
                }

                protected override void OnPaint(PaintEventArgs e)
                {
                        //draw the plus
                        e.Graphics.DrawLine(pFS, dX-100, dY, dX+100, dY);
                        e.Graphics.DrawLine(pFS, dX, dY-100, dX, dY+100);

                        //draw circle
                        e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
                        e.Graphics.DrawEllipse(pFS, dX-(cirSize/2), 
dY-(cirSize/2), cirSize, cirSize);

                        //draw those pie chunks
                        e.Graphics.FillPie(pfsb, dX-cirSize/2, dY-cirSize/2, 
cirSize, cirSize, 0, 90);
                        e.Graphics.FillPie(pfsb, dX-cirSize/2, dY-cirSize/2, 
cirSize, cirSize, 180, 90);

                        //draw the gradient
                        e.Graphics.FillPath(lgb, path);
                }

                /// <summary>
                /// Clean up any resources being used.
                /// </summary>
                protected override void Dispose( bool disposing )
                {
                        if( disposing )
                        {
                                if (components != null)
                                {
                                        components.Dispose();
                                }
                        }
                        base.Dispose( disposing );
                }

                #region Windows Form Designer generated code
                /// <summary>
                /// Required method for Designer support - do not modify
                /// the contents of this method with the code editor.
                /// </summary>
                private void InitializeComponent()
                {
                        this.components = new System.ComponentModel.Container();
                        this.label1 = new System.Windows.Forms.Label();
                        this.linkLabel1 = new System.Windows.Forms.LinkLabel();
                        this.button1 = new System.Windows.Forms.Button();
                        this.textBox1 = new System.Windows.Forms.TextBox();
                        this.SuspendLayout();
                        //
                        // label1
                        //
                        this.label1.Location = new System.Drawing.Point(111, 
252);
                        this.label1.Name = "label1";
                        this.label1.TabIndex = 0;
                        this.label1.Text = "label1";
                        //
                        // linkLabel1
                        //
                        this.linkLabel1.Location = new System.Drawing.Point(26, 
74);
                        this.linkLabel1.Name = "linkLabel1";
                        this.linkLabel1.TabIndex = 1;
                        this.linkLabel1.TabStop = true;
                        this.linkLabel1.Text = "linkLabel1";
                        //
                        // button1
                        //
                        this.button1.Location = new System.Drawing.Point(26, 
117);
                        this.button1.Name = "button1";
                        this.button1.TabIndex = 2;
                        this.button1.Text = "button1";
                        this.button1.Click += new EventHandler(ohye);
                        //
                        // textBox1
                        //
                        this.textBox1.Location = new System.Drawing.Point(17, 
157);
                        this.textBox1.Name = "textBox1";
                        this.textBox1.TabIndex = 3;
                        this.textBox1.Text = "textBox1";
                        //
                        //
                        //
                        this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
                        this.ClientSize = new System.Drawing.Size(613, 570);
                        this.Controls.Add(this.textBox1);
                        this.Controls.Add(this.button1);
                        this.Controls.Add(this.linkLabel1);
                        this.Controls.Add(this.label1);
                        this.Name = "Form1";
                        this.Text = "Form1";
                        this.ResumeLayout(false);

                }
                #endregion

                void ohye(object asdf, EventArgs fwe)
                {
                        MessageBox.Show("yeah");
                }

                /// <summary>
                /// The main entry point for the application.
                /// </summary>
                [STAThread]
                static void Main()
                {
                        Application.Run(new Form1());
                }
        }
}
all:
        mcs /r:System.Windows.Forms.dll /r:System.Drawing.dll 
/r:System.Data.dll /target:exe /out:digs.exe Form1.cs

<<attachment: linux.png>>

<<attachment: windows.png>>

_______________________________________________
Mono-winforms-list maillist  -  Mono-winforms-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-winforms-list

Reply via email to