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