Hi:

1) The first and the most importan problem: I'm having problem to make a 
draw into a drawable. It uses to much memory. My application get to much 
bussy for this operation. The idea is to show a number of lines in a drawing 
area with line numbers (It is a file viewer like, so the number of lines is 
around 1500 or 100000 and even more).

2) The other problem is that the Rectangle that i Draw in 
OnDrawing_ButtonPressed is displayed but at the same time, it is hidden 
automatically. Why is that? (If i did a rectangle on expose event it works 
great, but i need to do when the user press the mouse button).

The source code:

using System;
using System.Drawing;
using Gtk;

namespace Test
{
        public partial class TextViewer : Gtk.Bin
        {
                protected int MaxWidth;
                protected string[] Lines;
                public TextViewer(string[] lines)
                {
                        this.Build();
                        this.da.AddEvents((int)Gdk.EventMask.ButtonPressMask);
                        this.da.ExposeEvent += new 
ExposeEventHandler(this.OnDrawing_Exposed);
                        this.da.ButtonPressEvent += new 
ButtonPressEventHandler(this.OnDrawing_ButtonPressed);
                        Lines = lines;
                        this.ShowAll();
                }

                protected void OnDrawing_Exposed(object sender, ExposeEventArgs 
args)
                {
                        int h = this.Lines.Length * 10 + 10;
                        DrawingArea da = (DrawingArea)sender;
                        using(Graphics g = 
Gtk.DotNet.Graphics.FromDrawable(da.GdkWindow))
                        {
                       Font f = new Font("Arial", 10);
                       using(Brush b = new SolidBrush(Color.Black))
                       {
                               for(int i = 0; i < this.Lines.Length; i ++)
                               {
                                        int pos = 0 + (10 * i);
                                                        
g.DrawString(i.ToString().PadLeft(8, '0'), f, b, 5, pos);
                                                        
g.DrawString(this.Lines[i], f, b, 90, pos);
                                                        
if(this.Lines[i].Trim().Length > this.MaxWidth)
                                                                this.MaxWidth = 
this.Lines[i].Trim().Length;
                               }
                               this.MaxWidth = this.MaxWidth * 2;
                                           using(Pen p = new Pen(b))
                                                        g.DrawLine(p, 80, 0, 
80, h);
                           }
                        }
                        da.SetSizeRequest(this.MaxWidth, h);
                }

                protected void OnDrawing_ButtonPressed(object sender, 
ButtonPressEventArgs 
args)
                {
                        DrawingArea da = (DrawingArea)sender;
                        int lmin;
                        int l = Convert.ToInt32(args.Event.Y);
                        string ls = l.ToString();
                        if(ls.Length == 1) {
                                lmin = 0;
                        }
                        else {
                                lmin = Convert.ToInt32(ls.Substring(0, 
ls.Length-1) + "0");
                        }
                        using(Graphics g = 
Gtk.DotNet.Graphics.FromDrawable(da.GdkWindow))
                        {
                                Point p = new Point(0, lmin);
                                Size sz = new Size(this.MaxWidth, 10);
                                Rectangle r = new Rectangle(p, sz);
                                Brush b = new SolidBrush(Color.Red);
                                Pen pe = new Pen(b);
                                g.DrawRectangle(pe, r);
                                ((IDisposable)b).Dispose();
                                ((IDisposable)pe).Dispose();
                        }

                }
        }
}


Thanks a lot
Luciano

_________________________________________________________________
¿Cuánto vale tu auto? Tips para mantener tu carro. ¡De todo en MSN Latino 
Autos! http://latino.msn.com/autos/

_______________________________________________
Gtk-sharp-list maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/gtk-sharp-list

Reply via email to