[Mono-list] About the thumbnail creator

Todd Berman tberman@sevenl.net
Wed, 16 Jun 2004 12:59:26 -0400


heh, the or something was important ;)

The proper way to do it, is to write a new event handle, and bind that 
to NetStop. Inside that event handler, you set a Gtk.Timeout for 3 
seconds later, and then in the Gtk.Function the Gtk.Timeout calls, you 
take your sshot.

--TOdd

Benoit Caccinolo wrote:
> On Wed, 2004-06-16 at 18:20, Todd Berman wrote:
> 
>>I think the issue is mozilla not getting enough time to render. I would 
>>try putting a Thread.Sleep (3000) or something as the first line of code 
>>in the NetStop handler.
> 
> 
> The problem is surely a problem of time. But with a Thread.Sleep in the
> MakeShot method the problem is not solved cause the sleep stops the
> rendering too :)
> 
> My solution is too put a button to launch the MakeShot method. It is
> less elegant but it works.
> 
> Thx
> 
> Here is the code.
> 
> using System;
> using Gtk;
> using Gecko;
> 
> class Thumbnail { 
> 	static WebControl wc;
> 	static string output = "shot.png";
> 	static string url;
> 	static int width = -1;
> 	static int height = -1;
> 	
> 	static void Main (string [] args)
> 	{
> 		for (int i = 0; i < args.Length; i++){
> 			switch (args [i]){
> 			case "-width":
> 				try {
> 					i++;
> 					width = Int32.Parse (args [i]);
> 				} catch {
> 					Console.WriteLine ("-width requires an numeric argument");
> 				}
> 				break;
> 			case "-height":
> 				try {
> 					i++;
> 					height = Int32.Parse (args [i]);
> 				} catch {
> 					Console.WriteLine ("-height requires an numeric argument");
> 				}
> 				break;
> 			case "-help":
> 			case "-h":
> 				Help ();
> 				break;
> 				
> 			default:
> 				if (url == null)
> 					url = args [i];
> 				else if (output == null)
> 					output = args [i];
> 				else
> 					Help ();
> 				break;
> 			}
> 		}
> 
> 		Application.Init();
> 		Window w = new Window ("test");
> 		VBox vbox = new VBox ();
> 		Button bt = new Button ("Take a Shot");
> 		bt.Clicked += new EventHandler (btn_click);
> 		vbox.PackStart (bt);	
> 
> 		wc = new WebControl ();
> 		wc.LoadUrl (url);
> 		//wc.NetStop += MakeShot;
> 		//wc.Show ();
> 		wc.SetSizeRequest (800, 600);
> 		vbox.PackStart (wc);
> 		w.Add (vbox);
> 		w.ShowAll ();
> 		Application.Run();
> 		
> 		System.Threading.Thread.Sleep (1500);
> 	}
> 
> 	static void Help ()
> 	{
> 		Console.WriteLine ("Usage is: shot [-width N] [-height N] url
> [shot]");
> 		Environment.Exit (0);
> 	}
> 	
> 	 static void btn_click (object obj, EventArgs args)
>      {
>           Console.WriteLine ("Button Clicked");
>           MakeShot();
>      }
>      
> 	static void MakeShot()
> 	{		
> 		System.Console.Write("Taking a new shot");	
> 		
> 		Gdk.Window win = wc.GdkWindow;
> 		int iwidth = wc.Allocation.Width;
> 		int iheight = wc.Allocation.Height;
> 		Gdk.Pixbuf p = new Gdk.Pixbuf (Gdk.Colorspace.Rgb, false, 8, iwidth,
> iheight);
> 		Gdk.Pixbuf scaled;
> 		
> 		p = p.GetFromDrawable (win, win.Colormap, 0, 0, 0, 0, iwidth,
> iheight);
> 		if (width == -1){
> 			if (height == -1)
> 				scaled = p;
> 			else
> 				scaled = p.ScaleSimple (height * iwidth / iheight, height,
> Gdk.InterpType.Hyper);
> 		} else {
> 			if (height == -1)
> 				scaled = p.ScaleSimple (width, width * iheight / iwidth,
> Gdk.InterpType.Hyper);
> 			else
> 				scaled = p.ScaleSimple (width, height, Gdk.InterpType.Hyper);
> 		}
> 		
> 		scaled.Savev (output, "png", null, null);  
> 	}
> 	
> }
> 
> 
> 
> _______________________________________________
> Mono-list maillist  -  Mono-list@lists.ximian.com
> http://lists.ximian.com/mailman/listinfo/mono-list
>