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 - [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches