1 //
2 //
3 //	X11 Interface
4 //	Authors: Hisham Mardam Bey <hisham.mardambey@gmail.com>
5 //
6 
7 //
8 // Copyright (C) 2004 Novell, Inc (http://www.novell.com)
9 //
10 // Permission is hereby granted, free of charge, to any person obtaining
11 // a copy of this software and associated documentation files (the
12 // "Software"), to deal in the Software without restriction, including
13 // without limitation the rights to use, copy, modify, merge, publish,
14 // distribute, sublicense, and/or sell copies of the Software, and to
15 // permit persons to whom the Software is furnished to do so, subject to
16 // the following conditions:
17 //
18 // The above copyright notice and this permission notice shall be
19 // included in all copies or substantial portions of the Software.
20 //
21 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
22 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
23 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
24 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
25 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
26 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
27 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
28 //
29 
30 using System;
31 using Cairo;
32 using System.Runtime.InteropServices;
33 
34 
35 	public class Window {
36 
37 		protected IntPtr display;
38 		protected int screen;
39 		protected IntPtr window;
40 		protected IntPtr gc;
41 		protected uint width = 0;
42 		protected uint height = 0;
43 
Window()44 		public Window () {
45 		}
46 
Window(uint width, uint height)47 		public Window (uint width, uint height)
48 		{
49 			this.width = width;
50 			this.height = height;
51 
52 			display = X11.XOpenDisplay (0);
53 
54 			IntPtr root = X11.XDefaultRootWindow (display);
55 			screen = X11.XDefaultScreen (display);
56 
57 			window = X11.XCreateSimpleWindow (display, root, 0, 0,
58 					      width, height, (ulong)0,
59 					      X11.XWhitePixel (display, screen),
60 					      X11.XWhitePixel (display, screen));
61 		}
62 
Show()63 		public int Show ()
64 		{
65 			return X11.XMapWindow(display, window);
66 		}
67 
Clear()68 		public int Clear ()
69 		{
70 			return X11.XClearWindow (display, window);
71 		}
72 
73 		public uint Width {
74 			get { return width; }
75 			set { width = value; }
76 		}
77 
78 		public uint Height {
79 			get { return height; }
80 			set { height = value; }
81 		}
82 
83 		public IntPtr Display {
84 			get { return display; }
85 		}
86 
87 		public IntPtr XWindow {
88 			get { return window; }
89 		}
90 
91 		public int Screen {
92 			get { return screen; }
93 		}
94 
Close()95 		public void Close ()
96 		{
97 			 X11.XCloseDisplay(display);
98 		}
99 
100 	}
101 
102 
103 	public class X11
104 	{
105 		[DllImport("X11")]
XDefaultVisual(IntPtr display, int screen_number)106 		  internal static extern IntPtr XDefaultVisual (IntPtr display,
107 								int screen_number);
108 
109 		[DllImport("X11")]
XDefaultRootWindow(IntPtr display)110 		  internal static extern IntPtr XDefaultRootWindow (IntPtr display);
111 
112 		[DllImport("X11")]
XDefaultScreen(IntPtr display)113 		  internal static extern int XDefaultScreen (IntPtr display);
114 
115 		[DllImport("X11")]
XCreateSimpleWindow(IntPtr display, IntPtr window, int x, int y, uint width, uint height, ulong border_width, ulong border, ulong background)116 		  internal static extern IntPtr XCreateSimpleWindow (IntPtr display,
117 							      IntPtr window,
118 							      int x,
119 							      int y,
120 							      uint width,
121 							      uint height,
122 							      ulong border_width,
123 							      ulong border,
124 							      ulong background);
125 		[DllImport("X11")]
XMapWindow(IntPtr display, IntPtr window)126 		  internal static extern int XMapWindow (IntPtr display,
127 							 IntPtr window);
128 
129 		[DllImport("X11")]
XClearWindow(IntPtr display, IntPtr window)130 		  internal static extern int XClearWindow (IntPtr display,
131 							   IntPtr window);
132 
133 		[DllImport("X11")]
XOpenDisplay(int display_name)134 		  internal static extern IntPtr XOpenDisplay (int display_name);
135 
136 		[DllImport("X11")]
XScreenOfDisplay(IntPtr display, int screen_number)137 		  internal static extern IntPtr XScreenOfDisplay (IntPtr display,
138 								  int screen_number);
139 
140 		[DllImport("X11")]
XCloseDisplay(IntPtr display)141 		  internal static extern int XCloseDisplay(IntPtr display);
142 
143 		[DllImport("X11")]
XBlackPixel(IntPtr display, int screen)144 		  internal static extern ulong XBlackPixel (IntPtr display,
145 							    int screen);
146 
147 		[DllImport("X11")]
XWhitePixel(IntPtr display, int screen)148 		  internal static extern ulong XWhitePixel (IntPtr display,
149 							    int screen);
150 
151 		[DllImport("X11")]
XNextEvent(IntPtr display, IntPtr event_return)152 		  internal static extern int XNextEvent (IntPtr display,
153 							 IntPtr event_return);
154 	}
155 
156