Initial revision

svn path=/trunk/gtk-sharp/; revision=834
This commit is contained in:
Mike Kestner 2001-09-16 23:15:56 +00:00
commit 7d69671d49
12 changed files with 415 additions and 0 deletions

3
.cvsignore Executable file
View file

@ -0,0 +1,3 @@
*.dll
*.exe

11
README Normal file
View file

@ -0,0 +1,11 @@
Gtk# is a C# binding for the Gtk toolkit (www.gtk.org). The target is the
2.0 platform, and no plans are currently in place to backport to 1.2.
The effort essentially boils down to an exercise in PInvoke against the C
dynamic libraries. It may end up being slow as hell, but we'll see when we get
there and adjust accordingly.
The "Hello World" application in the sample directory has been executed
on Win32 using the Gtk and associated binaries provided by the Gimp Win32
porting project. Links to these binaries can be found on the Gtk Homepage.

BIN
gtk/.Widget.cs.swp Executable file

Binary file not shown.

3
gtk/.cvsignore Executable file
View file

@ -0,0 +1,3 @@
*.dll
*.exe

77
gtk/Application.cs Executable file
View file

@ -0,0 +1,77 @@
// GTK.Application.cs - GTK Main Event Loop class implementation
//
// Author: Mike Kestner <mkestner@speakeasy.net>
//
// (c) 2001 Mike Kestner
namespace GTK {
using System;
using System.Runtime.InteropServices;
/// <summary>
/// Application Class
/// </summary>
///
/// <remarks>
/// Provides the initialization and event loop iteration related
/// methods for the GTK widget library. Since GTK is an event
/// driven toolkit, Applications register callbacks against various
/// events to handle user input. These callbacks are invoked from
/// the main event loop when events are detected.
/// </remarks>
public class Application {
[DllImport("gtk-1.3")]
static extern void gtk_init (ref int argc, ref String[] argv);
/// <summary>
/// Init Method
/// </summary>
///
/// <remarks>
/// Initializes GTK resources.
/// </remarks>
public static void Init (ref string[] args)
{
int argc = args.Length;
gtk_init (ref argc, ref args);
}
/// <summary>
/// Run Method
/// </summary>
///
/// <remarks>
/// Begins the event loop iteration.
/// </remarks>
[DllImport("gtk-1.3")]
static extern void gtk_main ();
public static void Run ()
{
gtk_main ();
}
/// <summary>
/// Quit Method
/// </summary>
///
/// <remarks>
/// Terminates the event loop iteration.
/// </remarks>
[DllImport("gtk-1.3")]
static extern void gtk_main_quit ();
public static void Quit ()
{
gtk_main_quit ();
}
}
}

36
gtk/Object.cs Executable file
View file

@ -0,0 +1,36 @@
// Object.cs - GtkObject class wrapper implementation
//
// Author: Mike Kestner <mkestner@speakeasy.net>
//
// (c) 2001 Mike Kestner
namespace GTK {
using System;
using System.Drawing;
using System.Runtime.InteropServices;
public abstract class Object {
protected IntPtr obj;
protected delegate void SimpleCallback (IntPtr obj);
[DllImport("gtk-1.3")]
static extern void gtk_signal_connect_full (
IntPtr obj, string evname,
SimpleCallback cb, IntPtr unsupported,
IntPtr data, IntPtr destroycb,
int objsig, int after );
protected void ConnectSignal (string name, SimpleCallback cb)
{
gtk_signal_connect_full (obj, name, cb,
new IntPtr (0), new IntPtr (0),
new IntPtr (0), 0, 0);
}
}
}

68
gtk/Widget.cs Executable file
View file

@ -0,0 +1,68 @@
// GTK.Widget.cs - GTK Widget class implementation
//
// Author: Mike Kestner <mkestner@speakeasy.net>
//
// (c) 2001 Mike Kestner
namespace GTK {
using System;
using System.Runtime.InteropServices;
public abstract class Widget : Object {
/// <summary>
/// ConnectEvents method
/// </summary>
///
/// <remarks>
/// Connects event handlers to the wrapped GTK widget.
/// It is not possible to perform this connection in a
/// constructor, since the leaf class constructor in which
/// the wrapped object is created is not executed until
/// after the base class' constructor.
/// </remarks>
protected void PrepareEvents ()
{
ConnectSignal ("delete-event",
new SimpleCallback (EmitDeleteEvent));
}
private void EmitDeleteEvent (IntPtr obj)
{
if (Delete != null) {
EventArgs args = new EventArgs ();
Delete (this, args);
}
}
/// <summary>
/// Delete Event
/// </summary>
///
/// <remarks>
/// Occurs when the Widget is deleted by the window
/// manager.
/// </remarks>
public event EventHandler Delete;
/// <summary>
/// Show Method
/// </summary>
///
/// <remarks>
/// Makes the Widget visible on the display.
/// </remarks>
[DllImport("gtk-1.3")]
static extern void gtk_widget_show (IntPtr obj);
public void Show ()
{
gtk_widget_show (obj);
}
}
}

162
gtk/Window.cs Executable file
View file

@ -0,0 +1,162 @@
// GTK.Window.cs - GTK Window class implementation
//
// Author: Mike Kestner <mkestner@speakeasy.net>
//
// (c) 2001 Mike Kestner
namespace GTK {
using System;
using System.Drawing;
using System.Runtime.InteropServices;
public enum WindowType {
TopLevel,
Popup,
}
public class Window : Widget {
/// <summary>
/// Window Constructor
/// </summary>
///
/// <remarks>
/// Constructs a new Window of type TopLevel.
/// </remarks>
[DllImport("gtk-1.3")]
static extern IntPtr gtk_window_new (GTK.WindowType type);
public Window ()
{
obj = gtk_window_new (WindowType.TopLevel);
base.PrepareEvents ();
}
/// <summary>
/// Window Constructor
/// </summary>
///
/// <remarks>
/// Constructs a new Window of type TopLevel with the
/// specified Title.
/// </remarks>
public Window (String title) : this ()
{
this.Title = title;
}
/*
/// <summary>
/// AllowGrow Property
/// </summary>
///
/// <remarks>
/// Indicates if the Window can be resized to larger than
/// the default size.
/// </remarks>
public bool AllowGrow {
get {;}
set {;}
}
/// <summary>
/// AllowShrink Property
/// </summary>
///
/// <remarks>
/// Indicates if the Window can be resized to smaller than
/// the default size.
/// </remarks>
public bool AllowShrink {
get {;}
set {;}
}
/// <summary>
/// DefaultSize Property
/// </summary>
///
/// <remarks>
/// The default Size of the Window in Screen Coordinates.
/// </remarks>
public Size DefaultSize {
get {;}
set {;}
}
/// <summary>
/// DestroyWithParent Property
/// </summary>
///
/// <remarks>
/// Indicates if the Window should be destroyed when any
/// associated parent Windows are destroyed.
/// </remarks>
public bool DestroyWithParent {
get {;}
set {;}
}
/// <summary>
/// IsModal Property
/// </summary>
///
/// <remarks>
/// Indicates if the Window is Modal. If true, the input
/// focus is grabbed by the Window and other Windows in
/// the application will not accept input until the Window
/// is closed.
/// </remarks>
public bool IsModal {
get {;}
set {;}
}
*/
/// <summary>
/// Position Property
/// </summary>
///
/// <remarks>
/// The Position of the Window in Screen Coordinates.
/// </remarks>
[DllImport("gtk-1.3")]
static extern void gtk_window_set_position (IntPtr hnd,
int x, int y);
public Point Position {
set
{
gtk_window_set_position (
obj, value.X, value.Y);
}
}
/// <summary>
/// Title Property
/// </summary>
///
/// <remarks>
/// The Title displayed in the Window's Title Bar.
/// </remarks>
[DllImport("gtk-1.3")]
static extern void gtk_window_set_title (IntPtr hnd,
String title);
public String Title {
set
{
gtk_window_set_title (obj, value);
}
}
}
}

11
gtk/makefile Executable file
View file

@ -0,0 +1,11 @@
CSC=/cygdrive/c/windows/microsoft.net/framework/v1.0.2914/csc.exe
all:
@echo "You must use 'make windows' or 'make unix'."
@echo "'make unix' is broken for now."
windows:
$(CSC) /unsafe /target:library /out:gtk-sharp.dll /recurse:*.cs
unix:
@echo "'make unix' is broken for now."

3
sample/.cvsignore Executable file
View file

@ -0,0 +1,3 @@
*.dll
*.exe

30
sample/HelloWorld.cs Executable file
View file

@ -0,0 +1,30 @@
// TestWindow.cs - GTK Window class Test implementation
//
// Author: Mike Kestner <mkestner@speakeasy.net>
//
// (c) 2001 Mike Kestner
namespace GtkSamples {
using GTK;
using System;
public class HelloWorld {
public static int Main (string[] args)
{
Application.Init (ref args);
Window win = new Window ("Gtk# Hello World");
win.Delete += new EventHandler (delete_cb);
win.Show ();
Application.Run ();
return 0;
}
static void delete_cb (object obj, EventArgs args)
{
Application.Quit ();
}
}
}

11
sample/makefile Executable file
View file

@ -0,0 +1,11 @@
CSC=/cygdrive/c/windows/microsoft.net/framework/v1.0.2914/csc.exe
all:
@echo "You must use 'make windows' or 'make unix'."
@echo "'make unix' is broken for now."
windows:
$(CSC) /unsafe /out:gtk-hello-world.exe /r:../gtk/gtk-sharp.dll /recurse:*.cs
unix:
@echo "'make unix' is broken for now."