Author: dsnell
Date: 2006-08-08 20:35:46 -0400 (Tue, 08 Aug 2006)
New Revision: 63512

Added:
   branches/dmsnell/heap-buddy/analyzer/Graphics.cs
Modified:
   branches/dmsnell/heap-buddy/analyzer/Makefile.am
   branches/dmsnell/heap-buddy/analyzer/Makefile.in
   branches/dmsnell/heap-buddy/analyzer/MemGraph.cs
Log:
I don't want to lose anything, sorry if I broke you!


Added: branches/dmsnell/heap-buddy/analyzer/Graphics.cs
===================================================================
--- branches/dmsnell/heap-buddy/analyzer/Graphics.cs    2006-08-08 22:54:16 UTC 
(rev 63511)
+++ branches/dmsnell/heap-buddy/analyzer/Graphics.cs    2006-08-09 00:35:46 UTC 
(rev 63512)
@@ -0,0 +1,70 @@
+using System;
+using System.Runtime.InteropServices;
+using Cairo;
+
+namespace Gdk
+{
+       public class Context
+       {
+               private Context () {}
+
+               // Note: we don't need or want a .dll.config since we p/invoke
+               // the proper lib based on the os check below
+
+               // win32 only imports
+               [DllImport("libgdk-win32-2.0-0.dll")]
+               internal static extern IntPtr gdk_win32_hdc_get(IntPtr 
drawable, IntPtr gc, int usage);
+               
+               [DllImport("libgdk-win32-2.0-0.dll")]
+               internal static extern void gdk_win32_hdc_release(IntPtr 
drawable,IntPtr gc,int usage);
+
+               // x11 only imports
+               [DllImport("libgdk-x11-2.0.so.0")]
+               internal static extern IntPtr gdk_x11_drawable_get_xdisplay 
(IntPtr handle);
+
+               [DllImport("libgdk-x11-2.0.so.0")]
+               internal static extern IntPtr gdk_drawable_get_visual (IntPtr 
handle);
+
+               [DllImport("libgdk-x11-2.0.so.0")]
+               internal static extern IntPtr gdk_x11_visual_get_xvisual 
(IntPtr handle);
+
+               [DllImport("libgdk-x11-2.0.so.0")]
+               internal static extern IntPtr gdk_x11_drawable_get_xid (IntPtr 
handle);
+               
+               public static Cairo.Context CreateDrawable (Gdk.Drawable 
drawable)
+               {
+                       return CreateDrawable (drawable, true);
+               }
+
+               public static Cairo.Context CreateDrawable (Gdk.Drawable 
drawable, bool double_buffered)
+               {
+                       int x = 0, y = 0;
+                       Cairo.Surface surface;
+                       
+                       PlatformID os = Environment.OSVersion.Platform;
+
+                       if (drawable is Gdk.Window && double_buffered)
+                           ((Gdk.Window)drawable).GetInternalPaintInfo (out 
drawable, out x, out y);
+
+                       if (os == PlatformID.Win32Windows || os == 
PlatformID.Win32NT ||
+                           os == PlatformID.Win32S || os == PlatformID.WinCE) {
+
+                               Gdk.GC gcc = new Gdk.GC (drawable);
+                               IntPtr windc = gdk_win32_hdc_get 
(drawable.Handle, gcc.Handle, 0);
+                               surface = new Win32Surface (windc);
+                               
+                               if (double_buffered)
+                                       gdk_win32_hdc_release (drawable.Handle, 
gcc.Handle, 0);
+                       } else {
+                               IntPtr display = gdk_x11_drawable_get_xdisplay 
(drawable.Handle);
+                               IntPtr visual = gdk_drawable_get_visual 
(drawable.Handle);
+                               IntPtr xvisual = gdk_x11_visual_get_xvisual 
(visual);
+                               IntPtr xdrawable = gdk_x11_drawable_get_xid 
(drawable.Handle);
+                               surface = new XlibSurface (display, xdrawable, 
xvisual, x, y);
+                       }
+                       
+                       return new Cairo.Context (surface);
+               }
+       }
+}
+

Modified: branches/dmsnell/heap-buddy/analyzer/Makefile.am
===================================================================
--- branches/dmsnell/heap-buddy/analyzer/Makefile.am    2006-08-08 22:54:16 UTC 
(rev 63511)
+++ branches/dmsnell/heap-buddy/analyzer/Makefile.am    2006-08-09 00:35:46 UTC 
(rev 63512)
@@ -1,6 +1,6 @@
 
 CSC = mcs -debug
-CSFLAGS = -target:exe -r:Mono.Cairo
+CSFLAGS = -target:exe -r:Mono.Cairo -pkg:gtk-sharp -r:System.Drawing.dll 
 
 TARGET = HeapBuddy.exe
 WRAPPER = heap-buddy
@@ -28,6 +28,7 @@
        TypeLog.cs              \
        MethodLog.cs            \
        MemGraph.cs             \
+       Graphics.cs             \
        $(REPORT_CSFILES)
 
 bin_SCRIPTS =                  \

Modified: branches/dmsnell/heap-buddy/analyzer/Makefile.in
===================================================================
--- branches/dmsnell/heap-buddy/analyzer/Makefile.in    2006-08-08 22:54:16 UTC 
(rev 63511)
+++ branches/dmsnell/heap-buddy/analyzer/Makefile.in    2006-08-09 00:35:46 UTC 
(rev 63512)
@@ -153,7 +153,7 @@
 sysconfdir = @sysconfdir@
 target_alias = @target_alias@
 CSC = mcs -debug
-CSFLAGS = -target:exe -r:Mono.Cairo
+CSFLAGS = -target:exe -r:Mono.Cairo -pkg:gtk-sharp -r:System.Drawing.dll 
 TARGET = HeapBuddy.exe
 WRAPPER = heap-buddy
 REPORT_CSFILES = \
@@ -179,6 +179,7 @@
        TypeLog.cs              \
        MethodLog.cs            \
        MemGraph.cs             \
+       Graphics.cs             \
        $(REPORT_CSFILES)
 
 bin_SCRIPTS = \

Modified: branches/dmsnell/heap-buddy/analyzer/MemGraph.cs
===================================================================
--- branches/dmsnell/heap-buddy/analyzer/MemGraph.cs    2006-08-08 22:54:16 UTC 
(rev 63511)
+++ branches/dmsnell/heap-buddy/analyzer/MemGraph.cs    2006-08-09 00:35:46 UTC 
(rev 63512)
@@ -1,6 +1,7 @@
 using System;
 using System.Collections;
 using Cairo;
+using Gtk;
 
 namespace HeapBuddy {
        
@@ -17,7 +18,7 @@
                }
                
                private class MemStampComparer : IComparer {
-                       int IComparer.Compare (Object x, Object y) {
+                       int IComparer.Compare (System.Object x, System.Object 
y) {
                                MemStamp a = (MemStamp)x;
                                MemStamp b = (MemStamp)y;
                        
@@ -28,6 +29,7 @@
                }
                
                private ArrayList Stamps;
+               static DrawingArea da;
 
                public MemGraph (OutfileReader reader, string filename)
                {       
@@ -118,6 +120,18 @@
                                c.MoveTo (GraphOriginX + i * GraphWidth / 10 - 
0.5 * e.Width, GraphOriginY + GraphHeight + 10 + e.Height);
                                c.ShowText (s);
                        }
+                       
+                       Application.Init ();
+                       
+                       Window win = new Window ("Heap-Buddy");
+                       win.SetDefaultSize (640, 480);
+                       
+                       da = new CairoGraph ();
+                       win.Add (da);
+                       
+                       win.ShowAll ();
+                       
+                       Application.Run ();                     
                                
                        if (filename == null)
                                filename = "memlog.png";
@@ -126,6 +140,8 @@
                        surface.Finish ();
                }
                
+
+               
                private void CollectStamps (OutfileReader reader)
                {
                        foreach (Gc gc in reader.Gcs) {
@@ -146,3 +162,25 @@
        }
        
 }
+
+public class CairoGraph : DrawingArea
+{
+       protected override bool OnExposeEvent (Gdk.EventExpose args)
+       {
+               Gdk.Window win = args.Window;
+               
+               Cairo.Context g = Gdk.Context.CreateDrawable (win);
+       
+               g.ResetClip ();
+               g.Color = new Color (0, .6, .6, 1);
+               g.Paint ();
+               
+               g.Color = new Color (1, 1, 1, 1);
+               g.MoveTo (0, 0);
+               g.LineTo (500, 500);
+               g.LineWidth = 4;
+               g.Stroke ();
+               
+               return true;
+       }
+}

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

Reply via email to