diff --git a/Avalonia.sln b/Avalonia.sln index f86c18ba1e..ac678ba9ba 100644 --- a/Avalonia.sln +++ b/Avalonia.sln @@ -63,8 +63,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Shared", "Shared", "{A689DE src\Shared\SharedAssemblyInfo.cs = src\Shared\SharedAssemblyInfo.cs EndProjectSection EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Gtk", "Gtk", "{B9894058-278A-46B5-B6ED-AD613FCC03B3}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.ReactiveUI", "src\Avalonia.ReactiveUI\Avalonia.ReactiveUI.csproj", "{6417B24E-49C2-4985-8DB2-3AB9D898EC91}" EndProject Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "PlatformSupport", "src\Shared\PlatformSupport\PlatformSupport.shproj", "{E4D9629C-F168-4224-3F51-A5E482FFBC42}" @@ -123,8 +121,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ControlCatalog.Android", "s EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.Skia", "src\Skia\Avalonia.Skia\Avalonia.Skia.csproj", "{7D2D3083-71DD-4CC9-8907-39A0D86FB322}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.Gtk3", "src\Gtk\Avalonia.Gtk3\Avalonia.Gtk3.csproj", "{BB1F7BB5-6AD4-4776-94D9-C09D0A972658}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ControlCatalog.NetCore", "samples\ControlCatalog.NetCore\ControlCatalog.NetCore.csproj", "{39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Props", "Props", "{F3AC8BC1-27F5-4255-9AFC-04ABFD11683A}" @@ -1318,30 +1314,6 @@ Global {7D2D3083-71DD-4CC9-8907-39A0D86FB322}.Release|iPhone.Build.0 = Release|Any CPU {7D2D3083-71DD-4CC9-8907-39A0D86FB322}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU {7D2D3083-71DD-4CC9-8907-39A0D86FB322}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {BB1F7BB5-6AD4-4776-94D9-C09D0A972658}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU - {BB1F7BB5-6AD4-4776-94D9-C09D0A972658}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU - {BB1F7BB5-6AD4-4776-94D9-C09D0A972658}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU - {BB1F7BB5-6AD4-4776-94D9-C09D0A972658}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU - {BB1F7BB5-6AD4-4776-94D9-C09D0A972658}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU - {BB1F7BB5-6AD4-4776-94D9-C09D0A972658}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|Any CPU - {BB1F7BB5-6AD4-4776-94D9-C09D0A972658}.AppStore|Any CPU.ActiveCfg = Release|Any CPU - {BB1F7BB5-6AD4-4776-94D9-C09D0A972658}.AppStore|Any CPU.Build.0 = Release|Any CPU - {BB1F7BB5-6AD4-4776-94D9-C09D0A972658}.AppStore|iPhone.ActiveCfg = Release|Any CPU - {BB1F7BB5-6AD4-4776-94D9-C09D0A972658}.AppStore|iPhone.Build.0 = Release|Any CPU - {BB1F7BB5-6AD4-4776-94D9-C09D0A972658}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU - {BB1F7BB5-6AD4-4776-94D9-C09D0A972658}.AppStore|iPhoneSimulator.Build.0 = Release|Any CPU - {BB1F7BB5-6AD4-4776-94D9-C09D0A972658}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BB1F7BB5-6AD4-4776-94D9-C09D0A972658}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BB1F7BB5-6AD4-4776-94D9-C09D0A972658}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {BB1F7BB5-6AD4-4776-94D9-C09D0A972658}.Debug|iPhone.Build.0 = Debug|Any CPU - {BB1F7BB5-6AD4-4776-94D9-C09D0A972658}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {BB1F7BB5-6AD4-4776-94D9-C09D0A972658}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {BB1F7BB5-6AD4-4776-94D9-C09D0A972658}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BB1F7BB5-6AD4-4776-94D9-C09D0A972658}.Release|Any CPU.Build.0 = Release|Any CPU - {BB1F7BB5-6AD4-4776-94D9-C09D0A972658}.Release|iPhone.ActiveCfg = Release|Any CPU - {BB1F7BB5-6AD4-4776-94D9-C09D0A972658}.Release|iPhone.Build.0 = Release|Any CPU - {BB1F7BB5-6AD4-4776-94D9-C09D0A972658}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {BB1F7BB5-6AD4-4776-94D9-C09D0A972658}.Release|iPhoneSimulator.Build.0 = Release|Any CPU {39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU {39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU {39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU @@ -1911,7 +1883,6 @@ Global {F1FDC5B0-4654-416F-AE69-E3E9BBD87801} = {9B9E3891-2366-4253-A952-D08BCEB71098} {29132311-1848-4FD6-AE0C-4FF841151BD3} = {9B9E3891-2366-4253-A952-D08BCEB71098} {7D2D3083-71DD-4CC9-8907-39A0D86FB322} = {3743B0F2-CC41-4F14-A8C8-267F579BF91E} - {BB1F7BB5-6AD4-4776-94D9-C09D0A972658} = {B9894058-278A-46B5-B6ED-AD613FCC03B3} {39D7B147-1A5B-47C2-9D01-21FB7C47C4B3} = {9B9E3891-2366-4253-A952-D08BCEB71098} {854568D5-13D1-4B4F-B50D-534DC7EFD3C9} = {86C53C40-57AA-45B8-AD42-FAE0EFDF0F2B} {638580B0-7910-40EF-B674-DCB34DA308CD} = {A0CC0258-D18C-4AB3-854F-7101680FC3F9} diff --git a/src/Gtk/Avalonia.Gtk3/Avalonia.Gtk3.csproj b/src/Gtk/Avalonia.Gtk3/Avalonia.Gtk3.csproj deleted file mode 100644 index 95443a364e..0000000000 --- a/src/Gtk/Avalonia.Gtk3/Avalonia.Gtk3.csproj +++ /dev/null @@ -1,11 +0,0 @@ - - - netstandard2.0 - true - $(DefineConstants);GTK3_PINVOKE - Avalonia.Gtk3 - - - - - diff --git a/src/Gtk/Avalonia.Gtk3/ClipboardImpl.cs b/src/Gtk/Avalonia.Gtk3/ClipboardImpl.cs deleted file mode 100644 index a860673732..0000000000 --- a/src/Gtk/Avalonia.Gtk3/ClipboardImpl.cs +++ /dev/null @@ -1,51 +0,0 @@ -using System; -using System.Runtime.InteropServices; -using System.Threading.Tasks; -using Avalonia.Gtk3.Interop; -using Avalonia.Input.Platform; -using Avalonia.Platform.Interop; - -namespace Avalonia.Gtk3 -{ - class ClipboardImpl : IClipboard - { - - IntPtr GetClipboard() => Native.GtkClipboardGetForDisplay(Native.GdkGetDefaultDisplay(), IntPtr.Zero); - - static void OnText(IntPtr clipboard, IntPtr utf8string, IntPtr userdata) - { - var handle = GCHandle.FromIntPtr(userdata); - - ((TaskCompletionSource) handle.Target) - .TrySetResult(Utf8Buffer.StringFromPtr(utf8string)); - handle.Free(); - } - - private static readonly Native.D.GtkClipboardTextReceivedFunc OnTextDelegate = OnText; - - static ClipboardImpl() - { - GCHandle.Alloc(OnTextDelegate); - } - - public Task GetTextAsync() - { - var tcs = new TaskCompletionSource(); - Native.GtkClipboardRequestText(GetClipboard(), OnTextDelegate, GCHandle.ToIntPtr(GCHandle.Alloc(tcs))); - return tcs.Task; - } - - public Task SetTextAsync(string text) - { - using (var buf = new Utf8Buffer(text)) - Native.GtkClipboardSetText(GetClipboard(), buf, buf.ByteLen); - return Task.FromResult(0); - } - - public Task ClearAsync() - { - Native.GtkClipboardRequestClear(GetClipboard()); - return Task.FromResult(0); - } - } -} diff --git a/src/Gtk/Avalonia.Gtk3/CursorFactory.cs b/src/Gtk/Avalonia.Gtk3/CursorFactory.cs deleted file mode 100644 index 95fa3ba9e3..0000000000 --- a/src/Gtk/Avalonia.Gtk3/CursorFactory.cs +++ /dev/null @@ -1,84 +0,0 @@ -using System; -using System.Collections.Generic; -using Avalonia.Gtk3.Interop; -using Avalonia.Input; -using Avalonia.Platform; -using Avalonia.Platform.Interop; -using CursorType = Avalonia.Gtk3.GdkCursorType; -namespace Avalonia.Gtk3 -{ - class CursorFactory : IStandardCursorFactory - { - private static readonly Dictionary CursorTypeMapping = new Dictionary - - { - {StandardCursorType.None, CursorType.Blank}, - {StandardCursorType.AppStarting, CursorType.Watch}, - {StandardCursorType.Arrow, CursorType.LeftPtr}, - {StandardCursorType.Cross, CursorType.Cross}, - {StandardCursorType.Hand, CursorType.Hand1}, - {StandardCursorType.Ibeam, CursorType.Xterm}, - {StandardCursorType.No, "gtk-cancel"}, - {StandardCursorType.SizeAll, CursorType.Sizing}, - //{ StandardCursorType.SizeNorthEastSouthWest, 32643 }, - {StandardCursorType.SizeNorthSouth, CursorType.SbVDoubleArrow}, - //{ StandardCursorType.SizeNorthWestSouthEast, 32642 }, - {StandardCursorType.SizeWestEast, CursorType.SbHDoubleArrow}, - {StandardCursorType.UpArrow, CursorType.BasedArrowUp}, - {StandardCursorType.Wait, CursorType.Watch}, - {StandardCursorType.Help, "gtk-help"}, - {StandardCursorType.TopSide, CursorType.TopSide}, - {StandardCursorType.BottomSize, CursorType.BottomSide}, - {StandardCursorType.LeftSide, CursorType.LeftSide}, - {StandardCursorType.RightSide, CursorType.RightSide}, - {StandardCursorType.TopLeftCorner, CursorType.TopLeftCorner}, - {StandardCursorType.TopRightCorner, CursorType.TopRightCorner}, - {StandardCursorType.BottomLeftCorner, CursorType.BottomLeftCorner}, - {StandardCursorType.BottomRightCorner, CursorType.BottomRightCorner}, - {StandardCursorType.DragCopy, CursorType.CenterPtr}, - {StandardCursorType.DragMove, CursorType.Fleur}, - {StandardCursorType.DragLink, CursorType.Cross}, - }; - - private static readonly Dictionary Cache = - new Dictionary(); - - private IntPtr GetCursor(object desc) - { - IntPtr rv; - var name = desc as string; - if (name != null) - { - var theme = Native.GtkIconThemeGetDefault(); - IntPtr icon, error; - using (var u = new Utf8Buffer(name)) - icon = Native.GtkIconThemeLoadIcon(theme, u, 32, 0, out error); - rv = icon == IntPtr.Zero - ? Native.GdkCursorNew(GdkCursorType.XCursor) - : Native.GdkCursorNewFromPixbuf(Native.GdkGetDefaultDisplay(), icon, 0, 0); - } - else - { - rv = Native.GdkCursorNew((CursorType)desc); - } - - - return rv; - } - - public IPlatformHandle GetCursor(StandardCursorType cursorType) - { - IPlatformHandle rv; - if (!Cache.TryGetValue(cursorType, out rv)) - { - Cache[cursorType] = - rv = - new PlatformHandle( - GetCursor(CursorTypeMapping[cursorType]), - "GTKCURSOR"); - } - - return rv; - } - } -} diff --git a/src/Gtk/Avalonia.Gtk3/FramebufferManager.cs b/src/Gtk/Avalonia.Gtk3/FramebufferManager.cs deleted file mode 100644 index e3bbe19978..0000000000 --- a/src/Gtk/Avalonia.Gtk3/FramebufferManager.cs +++ /dev/null @@ -1,62 +0,0 @@ -using System; -using Avalonia.Controls.Platform.Surfaces; -using Avalonia.Platform; -using Avalonia.Threading; - -namespace Avalonia.Gtk3 -{ - class FramebufferManager : IFramebufferPlatformSurface, IDisposable - { - private readonly WindowBaseImpl _window; - public FramebufferManager(WindowBaseImpl window) - { - _window = window; - } - - public void Dispose() - { - // - } - - public ILockedFramebuffer Lock() - { - // This method may be called from non-UI thread, don't touch anything that calls back to GTK/GDK - var s = _window.ClientSize; - var width = Math.Max(1, (int) s.Width); - var height = Math.Max(1, (int) s.Height); - - - if (!Dispatcher.UIThread.CheckAccess() && Gtk3Platform.DisplayClassName.ToLower().Contains("x11")) - { - var x11 = LockX11Framebuffer(width, height); - if (x11 != null) - return x11; - } - - - return new ImageSurfaceFramebuffer(_window, width, height, _window.LastKnownScaleFactor); - } - - private static int X11ErrorHandler(IntPtr d, ref X11.XErrorEvent e) - { - return 0; - } - - private static X11.XErrorHandler X11ErrorHandlerDelegate = X11ErrorHandler; - - private static IntPtr X11Display; - private ILockedFramebuffer LockX11Framebuffer(int width, int height) - { - if (!_window.GdkWindowHandle.HasValue) - return null; - if (X11Display == IntPtr.Zero) - { - X11Display = X11.XOpenDisplay(IntPtr.Zero); - if (X11Display == IntPtr.Zero) - return null; - X11.XSetErrorHandler(X11ErrorHandlerDelegate); - } - return new X11Framebuffer(X11Display, _window.GdkWindowHandle.Value, width, height, _window.LastKnownScaleFactor); - } - } -} diff --git a/src/Gtk/Avalonia.Gtk3/GdkCursor.cs b/src/Gtk/Avalonia.Gtk3/GdkCursor.cs deleted file mode 100644 index aa0f8cde0d..0000000000 --- a/src/Gtk/Avalonia.Gtk3/GdkCursor.cs +++ /dev/null @@ -1,86 +0,0 @@ -namespace Avalonia.Gtk3 -{ - enum GdkCursorType - { - Blank = -2, - CursorIsPixmap = -1, - XCursor = 0, - Arrow = 2, - BasedArrowDown = 4, - BasedArrowUp = 6, - Boat = 8, - Bogosity = 10, - BottomLeftCorner = 12, - BottomRightCorner = 14, - BottomSide = 16, - BottomTee = 18, - BoxSpiral = 20, - CenterPtr = 22, - Circle = 24, - Clock = 26, - CoffeeMug = 28, - Cross = 30, - CrossReverse = 32, - Crosshair = 34, - DiamondCross = 36, - Dot = 38, - Dotbox = 40, - DoubleArrow = 42, - DraftLarge = 44, - DraftSmall = 46, - DrapedBox = 48, - Exchange = 50, - Fleur = 52, - Gobbler = 54, - Gumby = 56, - Hand1 = 58, - Hand2 = 60, - Heart = 62, - Icon = 64, - IronCross = 66, - LeftPtr = 68, - LeftSide = 70, - LeftTee = 72, - Leftbutton = 74, - LlAngle = 76, - LrAngle = 78, - Man = 80, - Middlebutton = 82, - Mouse = 84, - Pencil = 86, - Pirate = 88, - Plus = 90, - QuestionArrow = 92, - RightPtr = 94, - RightSide = 96, - RightTee = 98, - Rightbutton = 100, - RtlLogo = 102, - Sailboat = 104, - SbDownArrow = 106, - SbHDoubleArrow = 108, - SbLeftArrow = 110, - SbRightArrow = 112, - SbUpArrow = 114, - SbVDoubleArrow = 116, - Shuttle = 118, - Sizing = 120, - Spider = 122, - Spraycan = 124, - Star = 126, - Target = 128, - Tcross = 130, - TopLeftArrow = 132, - TopLeftCorner = 134, - TopRightCorner = 136, - TopSide = 138, - TopTee = 140, - Trek = 142, - UlAngle = 144, - Umbrella = 146, - UrAngle = 148, - Watch = 150, - Xterm = 152, - LastCursor = 153, - } -} diff --git a/src/Gtk/Avalonia.Gtk3/GdkKey.cs b/src/Gtk/Avalonia.Gtk3/GdkKey.cs deleted file mode 100644 index 7aa165a1da..0000000000 --- a/src/Gtk/Avalonia.Gtk3/GdkKey.cs +++ /dev/null @@ -1,1341 +0,0 @@ -namespace Avalonia.Gtk3 -{ - enum GdkKey - { - space = 32, - exclam = 33, - quotedbl = 34, - numbersign = 35, - dollar = 36, - percent = 37, - ampersand = 38, - apostrophe = 39, - quoteright = 39, - parenleft = 40, - parenright = 41, - asterisk = 42, - plus = 43, - comma = 44, - minus = 45, - period = 46, - slash = 47, - Key_0 = 48, - Key_1 = 49, - Key_2 = 50, - Key_3 = 51, - Key_4 = 52, - Key_5 = 53, - Key_6 = 54, - Key_7 = 55, - Key_8 = 56, - Key_9 = 57, - colon = 58, - semicolon = 59, - less = 60, - equal = 61, - greater = 62, - question = 63, - at = 64, - A = 65, - B = 66, - C = 67, - D = 68, - E = 69, - F = 70, - G = 71, - H = 72, - I = 73, - J = 74, - K = 75, - L = 76, - M = 77, - N = 78, - O = 79, - P = 80, - Q = 81, - R = 82, - S = 83, - T = 84, - U = 85, - V = 86, - W = 87, - X = 88, - Y = 89, - Z = 90, - bracketleft = 91, - backslash = 92, - bracketright = 93, - asciicircum = 94, - underscore = 95, - grave = 96, - quoteleft = 96, - a = 97, - b = 98, - c = 99, - d = 100, - e = 101, - f = 102, - g = 103, - h = 104, - i = 105, - j = 106, - k = 107, - l = 108, - m = 109, - n = 110, - o = 111, - p = 112, - q = 113, - r = 114, - s = 115, - t = 116, - u = 117, - v = 118, - w = 119, - x = 120, - y = 121, - z = 122, - braceleft = 123, - bar = 124, - braceright = 125, - asciitilde = 126, - nobreakspace = 160, - exclamdown = 161, - cent = 162, - sterling = 163, - currency = 164, - yen = 165, - brokenbar = 166, - section = 167, - diaeresis = 168, - copyright = 169, - ordfeminine = 170, - guillemotleft = 171, - notsign = 172, - hyphen = 173, - registered = 174, - macron = 175, - degree = 176, - plusminus = 177, - twosuperior = 178, - threesuperior = 179, - acute = 180, - mu = 181, - paragraph = 182, - periodcentered = 183, - cedilla = 184, - onesuperior = 185, - masculine = 186, - guillemotright = 187, - onequarter = 188, - onehalf = 189, - threequarters = 190, - questiondown = 191, - Agrave = 192, - Aacute = 193, - Acircumflex = 194, - Atilde = 195, - Adiaeresis = 196, - Aring = 197, - AE = 198, - Ccedilla = 199, - Egrave = 200, - Eacute = 201, - Ecircumflex = 202, - Ediaeresis = 203, - Igrave = 204, - Iacute = 205, - Icircumflex = 206, - Idiaeresis = 207, - ETH = 208, - Eth = 208, - Ntilde = 209, - Ograve = 210, - Oacute = 211, - Ocircumflex = 212, - Otilde = 213, - Odiaeresis = 214, - multiply = 215, - Ooblique = 216, - Ugrave = 217, - Uacute = 218, - Ucircumflex = 219, - Udiaeresis = 220, - Yacute = 221, - THORN = 222, - Thorn = 222, - ssharp = 223, - agrave = 224, - aacute = 225, - acircumflex = 226, - atilde = 227, - adiaeresis = 228, - aring = 229, - ae = 230, - ccedilla = 231, - egrave = 232, - eacute = 233, - ecircumflex = 234, - ediaeresis = 235, - igrave = 236, - iacute = 237, - icircumflex = 238, - idiaeresis = 239, - eth = 240, - ntilde = 241, - ograve = 242, - oacute = 243, - ocircumflex = 244, - otilde = 245, - odiaeresis = 246, - division = 247, - oslash = 248, - ugrave = 249, - uacute = 250, - ucircumflex = 251, - udiaeresis = 252, - yacute = 253, - thorn = 254, - ydiaeresis = 255, - Aogonek = 417, - breve = 418, - Lstroke = 419, - Lcaron = 421, - Sacute = 422, - Scaron = 425, - Scedilla = 426, - Tcaron = 427, - Zacute = 428, - Zcaron = 430, - Zabovedot = 431, - aogonek = 433, - ogonek = 434, - lstroke = 435, - lcaron = 437, - sacute = 438, - caron = 439, - scaron = 441, - scedilla = 442, - tcaron = 443, - zacute = 444, - doubleacute = 445, - zcaron = 446, - zabovedot = 447, - Racute = 448, - Abreve = 451, - Lacute = 453, - Cacute = 454, - Ccaron = 456, - Eogonek = 458, - Ecaron = 460, - Dcaron = 463, - Dstroke = 464, - Nacute = 465, - Ncaron = 466, - Odoubleacute = 469, - Rcaron = 472, - Uring = 473, - Udoubleacute = 475, - Tcedilla = 478, - racute = 480, - abreve = 483, - lacute = 485, - cacute = 486, - ccaron = 488, - eogonek = 490, - ecaron = 492, - dcaron = 495, - dstroke = 496, - nacute = 497, - ncaron = 498, - odoubleacute = 501, - rcaron = 504, - uring = 505, - udoubleacute = 507, - tcedilla = 510, - abovedot = 511, - Hstroke = 673, - Hcircumflex = 678, - Iabovedot = 681, - Gbreve = 683, - Jcircumflex = 684, - hstroke = 689, - hcircumflex = 694, - idotless = 697, - gbreve = 699, - jcircumflex = 700, - Cabovedot = 709, - Ccircumflex = 710, - Gabovedot = 725, - Gcircumflex = 728, - Ubreve = 733, - Scircumflex = 734, - cabovedot = 741, - ccircumflex = 742, - gabovedot = 757, - gcircumflex = 760, - ubreve = 765, - scircumflex = 766, - kappa = 930, - kra = 930, - Rcedilla = 931, - Itilde = 933, - Lcedilla = 934, - Emacron = 938, - Gcedilla = 939, - Tslash = 940, - rcedilla = 947, - itilde = 949, - lcedilla = 950, - emacron = 954, - gcedilla = 955, - tslash = 956, - ENG = 957, - eng = 959, - Amacron = 960, - Iogonek = 967, - Eabovedot = 972, - Imacron = 975, - Ncedilla = 977, - Omacron = 978, - Kcedilla = 979, - Uogonek = 985, - Utilde = 989, - Umacron = 990, - amacron = 992, - iogonek = 999, - eabovedot = 1004, - imacron = 1007, - ncedilla = 1009, - omacron = 1010, - kcedilla = 1011, - uogonek = 1017, - utilde = 1021, - umacron = 1022, - overline = 1150, - kana_fullstop = 1185, - kana_openingbracket = 1186, - kana_closingbracket = 1187, - kana_comma = 1188, - kana_conjunctive = 1189, - kana_middledot = 1189, - kana_WO = 1190, - kana_a = 1191, - kana_i = 1192, - kana_u = 1193, - kana_e = 1194, - kana_o = 1195, - kana_ya = 1196, - kana_yu = 1197, - kana_yo = 1198, - kana_tsu = 1199, - kana_tu = 1199, - prolongedsound = 1200, - kana_A = 1201, - kana_I = 1202, - kana_U = 1203, - kana_E = 1204, - kana_O = 1205, - kana_KA = 1206, - kana_KI = 1207, - kana_KU = 1208, - kana_KE = 1209, - kana_KO = 1210, - kana_SA = 1211, - kana_SHI = 1212, - kana_SU = 1213, - kana_SE = 1214, - kana_SO = 1215, - kana_TA = 1216, - kana_CHI = 1217, - kana_TI = 1217, - kana_TSU = 1218, - kana_TU = 1218, - kana_TE = 1219, - kana_TO = 1220, - kana_NA = 1221, - kana_NI = 1222, - kana_NU = 1223, - kana_NE = 1224, - kana_NO = 1225, - kana_HA = 1226, - kana_HI = 1227, - kana_FU = 1228, - kana_HU = 1228, - kana_HE = 1229, - kana_HO = 1230, - kana_MA = 1231, - kana_MI = 1232, - kana_MU = 1233, - kana_ME = 1234, - kana_MO = 1235, - kana_YA = 1236, - kana_YU = 1237, - kana_YO = 1238, - kana_RA = 1239, - kana_RI = 1240, - kana_RU = 1241, - kana_RE = 1242, - kana_RO = 1243, - kana_WA = 1244, - kana_N = 1245, - voicedsound = 1246, - semivoicedsound = 1247, - Arabic_comma = 1452, - Arabic_semicolon = 1467, - Arabic_question_mark = 1471, - Arabic_hamza = 1473, - Arabic_maddaonalef = 1474, - Arabic_hamzaonalef = 1475, - Arabic_hamzaonwaw = 1476, - Arabic_hamzaunderalef = 1477, - Arabic_hamzaonyeh = 1478, - Arabic_alef = 1479, - Arabic_beh = 1480, - Arabic_tehmarbuta = 1481, - Arabic_teh = 1482, - Arabic_theh = 1483, - Arabic_jeem = 1484, - Arabic_hah = 1485, - Arabic_khah = 1486, - Arabic_dal = 1487, - Arabic_thal = 1488, - Arabic_ra = 1489, - Arabic_zain = 1490, - Arabic_seen = 1491, - Arabic_sheen = 1492, - Arabic_sad = 1493, - Arabic_dad = 1494, - Arabic_tah = 1495, - Arabic_zah = 1496, - Arabic_ain = 1497, - Arabic_ghain = 1498, - Arabic_tatweel = 1504, - Arabic_feh = 1505, - Arabic_qaf = 1506, - Arabic_kaf = 1507, - Arabic_lam = 1508, - Arabic_meem = 1509, - Arabic_noon = 1510, - Arabic_ha = 1511, - Arabic_heh = 1511, - Arabic_waw = 1512, - Arabic_alefmaksura = 1513, - Arabic_yeh = 1514, - Arabic_fathatan = 1515, - Arabic_dammatan = 1516, - Arabic_kasratan = 1517, - Arabic_fatha = 1518, - Arabic_damma = 1519, - Arabic_kasra = 1520, - Arabic_shadda = 1521, - Arabic_sukun = 1522, - Serbian_dje = 1697, - Macedonia_gje = 1698, - Cyrillic_io = 1699, - Ukrainian_ie = 1700, - Ukranian_je = 1700, - Macedonia_dse = 1701, - Ukrainian_i = 1702, - Ukranian_i = 1702, - Ukrainian_yi = 1703, - Ukranian_yi = 1703, - Cyrillic_je = 1704, - Serbian_je = 1704, - Cyrillic_lje = 1705, - Serbian_lje = 1705, - Cyrillic_nje = 1706, - Serbian_nje = 1706, - Serbian_tshe = 1707, - Macedonia_kje = 1708, - Byelorussian_shortu = 1710, - Cyrillic_dzhe = 1711, - Serbian_dze = 1711, - numerosign = 1712, - Serbian_DJE = 1713, - Macedonia_GJE = 1714, - Cyrillic_IO = 1715, - Ukrainian_IE = 1716, - Ukranian_JE = 1716, - Macedonia_DSE = 1717, - Ukrainian_I = 1718, - Ukranian_I = 1718, - Ukrainian_YI = 1719, - Ukranian_YI = 1719, - Cyrillic_JE = 1720, - Serbian_JE = 1720, - Cyrillic_LJE = 1721, - Serbian_LJE = 1721, - Cyrillic_NJE = 1722, - Serbian_NJE = 1722, - Serbian_TSHE = 1723, - Macedonia_KJE = 1724, - Byelorussian_SHORTU = 1726, - Cyrillic_DZHE = 1727, - Serbian_DZE = 1727, - Cyrillic_yu = 1728, - Cyrillic_a = 1729, - Cyrillic_be = 1730, - Cyrillic_tse = 1731, - Cyrillic_de = 1732, - Cyrillic_ie = 1733, - Cyrillic_ef = 1734, - Cyrillic_ghe = 1735, - Cyrillic_ha = 1736, - Cyrillic_i = 1737, - Cyrillic_shorti = 1738, - Cyrillic_ka = 1739, - Cyrillic_el = 1740, - Cyrillic_em = 1741, - Cyrillic_en = 1742, - Cyrillic_o = 1743, - Cyrillic_pe = 1744, - Cyrillic_ya = 1745, - Cyrillic_er = 1746, - Cyrillic_es = 1747, - Cyrillic_te = 1748, - Cyrillic_u = 1749, - Cyrillic_zhe = 1750, - Cyrillic_ve = 1751, - Cyrillic_softsign = 1752, - Cyrillic_yeru = 1753, - Cyrillic_ze = 1754, - Cyrillic_sha = 1755, - Cyrillic_e = 1756, - Cyrillic_shcha = 1757, - Cyrillic_che = 1758, - Cyrillic_hardsign = 1759, - Cyrillic_YU = 1760, - Cyrillic_A = 1761, - Cyrillic_BE = 1762, - Cyrillic_TSE = 1763, - Cyrillic_DE = 1764, - Cyrillic_IE = 1765, - Cyrillic_EF = 1766, - Cyrillic_GHE = 1767, - Cyrillic_HA = 1768, - Cyrillic_I = 1769, - Cyrillic_SHORTI = 1770, - Cyrillic_KA = 1771, - Cyrillic_EL = 1772, - Cyrillic_EM = 1773, - Cyrillic_EN = 1774, - Cyrillic_O = 1775, - Cyrillic_PE = 1776, - Cyrillic_YA = 1777, - Cyrillic_ER = 1778, - Cyrillic_ES = 1779, - Cyrillic_TE = 1780, - Cyrillic_U = 1781, - Cyrillic_ZHE = 1782, - Cyrillic_VE = 1783, - Cyrillic_SOFTSIGN = 1784, - Cyrillic_YERU = 1785, - Cyrillic_ZE = 1786, - Cyrillic_SHA = 1787, - Cyrillic_E = 1788, - Cyrillic_SHCHA = 1789, - Cyrillic_CHE = 1790, - Cyrillic_HARDSIGN = 1791, - Greek_ALPHAaccent = 1953, - Greek_EPSILONaccent = 1954, - Greek_ETAaccent = 1955, - Greek_IOTAaccent = 1956, - Greek_IOTAdiaeresis = 1957, - Greek_OMICRONaccent = 1959, - Greek_UPSILONaccent = 1960, - Greek_UPSILONdieresis = 1961, - Greek_OMEGAaccent = 1963, - Greek_accentdieresis = 1966, - Greek_horizbar = 1967, - Greek_alphaaccent = 1969, - Greek_epsilonaccent = 1970, - Greek_etaaccent = 1971, - Greek_iotaaccent = 1972, - Greek_iotadieresis = 1973, - Greek_iotaaccentdieresis = 1974, - Greek_omicronaccent = 1975, - Greek_upsilonaccent = 1976, - Greek_upsilondieresis = 1977, - Greek_upsilonaccentdieresis = 1978, - Greek_omegaaccent = 1979, - Greek_ALPHA = 1985, - Greek_BETA = 1986, - Greek_GAMMA = 1987, - Greek_DELTA = 1988, - Greek_EPSILON = 1989, - Greek_ZETA = 1990, - Greek_ETA = 1991, - Greek_THETA = 1992, - Greek_IOTA = 1993, - Greek_KAPPA = 1994, - Greek_LAMBDA = 1995, - Greek_LAMDA = 1995, - Greek_MU = 1996, - Greek_NU = 1997, - Greek_XI = 1998, - Greek_OMICRON = 1999, - Greek_PI = 2000, - Greek_RHO = 2001, - Greek_SIGMA = 2002, - Greek_TAU = 2004, - Greek_UPSILON = 2005, - Greek_PHI = 2006, - Greek_CHI = 2007, - Greek_PSI = 2008, - Greek_OMEGA = 2009, - Greek_alpha = 2017, - Greek_beta = 2018, - Greek_gamma = 2019, - Greek_delta = 2020, - Greek_epsilon = 2021, - Greek_zeta = 2022, - Greek_eta = 2023, - Greek_theta = 2024, - Greek_iota = 2025, - Greek_kappa = 2026, - Greek_lambda = 2027, - Greek_lamda = 2027, - Greek_mu = 2028, - Greek_nu = 2029, - Greek_xi = 2030, - Greek_omicron = 2031, - Greek_pi = 2032, - Greek_rho = 2033, - Greek_sigma = 2034, - Greek_finalsmallsigma = 2035, - Greek_tau = 2036, - Greek_upsilon = 2037, - Greek_phi = 2038, - Greek_chi = 2039, - Greek_psi = 2040, - Greek_omega = 2041, - leftradical = 2209, - topleftradical = 2210, - horizconnector = 2211, - topintegral = 2212, - botintegral = 2213, - vertconnector = 2214, - topleftsqbracket = 2215, - botleftsqbracket = 2216, - toprightsqbracket = 2217, - botrightsqbracket = 2218, - topleftparens = 2219, - botleftparens = 2220, - toprightparens = 2221, - botrightparens = 2222, - leftmiddlecurlybrace = 2223, - rightmiddlecurlybrace = 2224, - topleftsummation = 2225, - botleftsummation = 2226, - topvertsummationconnector = 2227, - botvertsummationconnector = 2228, - toprightsummation = 2229, - botrightsummation = 2230, - rightmiddlesummation = 2231, - lessthanequal = 2236, - notequal = 2237, - greaterthanequal = 2238, - integral = 2239, - therefore = 2240, - variation = 2241, - infinity = 2242, - nabla = 2245, - approximate = 2248, - similarequal = 2249, - ifonlyif = 2253, - implies = 2254, - identical = 2255, - radical = 2262, - includedin = 2266, - includes = 2267, - intersection = 2268, - union = 2269, - logicaland = 2270, - logicalor = 2271, - partialderivative = 2287, - function = 2294, - leftarrow = 2299, - uparrow = 2300, - rightarrow = 2301, - downarrow = 2302, - blank = 2527, - soliddiamond = 2528, - checkerboard = 2529, - ht = 2530, - ff = 2531, - cr = 2532, - lf = 2533, - nl = 2536, - vt = 2537, - lowrightcorner = 2538, - uprightcorner = 2539, - upleftcorner = 2540, - lowleftcorner = 2541, - crossinglines = 2542, - horizlinescan1 = 2543, - horizlinescan3 = 2544, - horizlinescan5 = 2545, - horizlinescan7 = 2546, - horizlinescan9 = 2547, - leftt = 2548, - rightt = 2549, - bott = 2550, - topt = 2551, - vertbar = 2552, - emspace = 2721, - enspace = 2722, - em3space = 2723, - em4space = 2724, - digitspace = 2725, - punctspace = 2726, - thinspace = 2727, - hairspace = 2728, - emdash = 2729, - endash = 2730, - signifblank = 2732, - ellipsis = 2734, - doubbaselinedot = 2735, - onethird = 2736, - twothirds = 2737, - onefifth = 2738, - twofifths = 2739, - threefifths = 2740, - fourfifths = 2741, - onesixth = 2742, - fivesixths = 2743, - careof = 2744, - figdash = 2747, - leftanglebracket = 2748, - decimalpoint = 2749, - rightanglebracket = 2750, - marker = 2751, - oneeighth = 2755, - threeeighths = 2756, - fiveeighths = 2757, - seveneighths = 2758, - trademark = 2761, - signaturemark = 2762, - trademarkincircle = 2763, - leftopentriangle = 2764, - rightopentriangle = 2765, - emopencircle = 2766, - emopenrectangle = 2767, - leftsinglequotemark = 2768, - rightsinglequotemark = 2769, - leftdoublequotemark = 2770, - rightdoublequotemark = 2771, - prescription = 2772, - minutes = 2774, - seconds = 2775, - latincross = 2777, - hexagram = 2778, - filledrectbullet = 2779, - filledlefttribullet = 2780, - filledrighttribullet = 2781, - emfilledcircle = 2782, - emfilledrect = 2783, - enopencircbullet = 2784, - enopensquarebullet = 2785, - openrectbullet = 2786, - opentribulletup = 2787, - opentribulletdown = 2788, - openstar = 2789, - enfilledcircbullet = 2790, - enfilledsqbullet = 2791, - filledtribulletup = 2792, - filledtribulletdown = 2793, - leftpointer = 2794, - rightpointer = 2795, - club = 2796, - diamond = 2797, - heart = 2798, - maltesecross = 2800, - dagger = 2801, - doubledagger = 2802, - checkmark = 2803, - ballotcross = 2804, - musicalsharp = 2805, - musicalflat = 2806, - malesymbol = 2807, - femalesymbol = 2808, - telephone = 2809, - telephonerecorder = 2810, - phonographcopyright = 2811, - caret = 2812, - singlelowquotemark = 2813, - doublelowquotemark = 2814, - cursor = 2815, - leftcaret = 2979, - rightcaret = 2982, - downcaret = 2984, - upcaret = 2985, - overbar = 3008, - downtack = 3010, - upshoe = 3011, - downstile = 3012, - underbar = 3014, - jot = 3018, - quad = 3020, - uptack = 3022, - circle = 3023, - upstile = 3027, - downshoe = 3030, - rightshoe = 3032, - leftshoe = 3034, - lefttack = 3036, - righttack = 3068, - hebrew_doublelowline = 3295, - hebrew_aleph = 3296, - hebrew_bet = 3297, - hebrew_beth = 3297, - hebrew_gimel = 3298, - hebrew_gimmel = 3298, - hebrew_dalet = 3299, - hebrew_daleth = 3299, - hebrew_he = 3300, - hebrew_waw = 3301, - hebrew_zain = 3302, - hebrew_zayin = 3302, - hebrew_chet = 3303, - hebrew_het = 3303, - hebrew_tet = 3304, - hebrew_teth = 3304, - hebrew_yod = 3305, - hebrew_finalkaph = 3306, - hebrew_kaph = 3307, - hebrew_lamed = 3308, - hebrew_finalmem = 3309, - hebrew_mem = 3310, - hebrew_finalnun = 3311, - hebrew_nun = 3312, - hebrew_samech = 3313, - hebrew_samekh = 3313, - hebrew_ayin = 3314, - hebrew_finalpe = 3315, - hebrew_pe = 3316, - hebrew_finalzade = 3317, - hebrew_finalzadi = 3317, - hebrew_zade = 3318, - hebrew_zadi = 3318, - hebrew_kuf = 3319, - hebrew_qoph = 3319, - hebrew_resh = 3320, - hebrew_shin = 3321, - hebrew_taf = 3322, - hebrew_taw = 3322, - Thai_kokai = 3489, - Thai_khokhai = 3490, - Thai_khokhuat = 3491, - Thai_khokhwai = 3492, - Thai_khokhon = 3493, - Thai_khorakhang = 3494, - Thai_ngongu = 3495, - Thai_chochan = 3496, - Thai_choching = 3497, - Thai_chochang = 3498, - Thai_soso = 3499, - Thai_chochoe = 3500, - Thai_yoying = 3501, - Thai_dochada = 3502, - Thai_topatak = 3503, - Thai_thothan = 3504, - Thai_thonangmontho = 3505, - Thai_thophuthao = 3506, - Thai_nonen = 3507, - Thai_dodek = 3508, - Thai_totao = 3509, - Thai_thothung = 3510, - Thai_thothahan = 3511, - Thai_thothong = 3512, - Thai_nonu = 3513, - Thai_bobaimai = 3514, - Thai_popla = 3515, - Thai_phophung = 3516, - Thai_fofa = 3517, - Thai_phophan = 3518, - Thai_fofan = 3519, - Thai_phosamphao = 3520, - Thai_moma = 3521, - Thai_yoyak = 3522, - Thai_rorua = 3523, - Thai_ru = 3524, - Thai_loling = 3525, - Thai_lu = 3526, - Thai_wowaen = 3527, - Thai_sosala = 3528, - Thai_sorusi = 3529, - Thai_sosua = 3530, - Thai_hohip = 3531, - Thai_lochula = 3532, - Thai_oang = 3533, - Thai_honokhuk = 3534, - Thai_paiyannoi = 3535, - Thai_saraa = 3536, - Thai_maihanakat = 3537, - Thai_saraaa = 3538, - Thai_saraam = 3539, - Thai_sarai = 3540, - Thai_saraii = 3541, - Thai_saraue = 3542, - Thai_sarauee = 3543, - Thai_sarau = 3544, - Thai_sarauu = 3545, - Thai_phinthu = 3546, - Thai_maihanakat_maitho = 3550, - Thai_baht = 3551, - Thai_sarae = 3552, - Thai_saraae = 3553, - Thai_sarao = 3554, - Thai_saraaimaimuan = 3555, - Thai_saraaimaimalai = 3556, - Thai_lakkhangyao = 3557, - Thai_maiyamok = 3558, - Thai_maitaikhu = 3559, - Thai_maiek = 3560, - Thai_maitho = 3561, - Thai_maitri = 3562, - Thai_maichattawa = 3563, - Thai_thanthakhat = 3564, - Thai_nikhahit = 3565, - Thai_leksun = 3568, - Thai_leknung = 3569, - Thai_leksong = 3570, - Thai_leksam = 3571, - Thai_leksi = 3572, - Thai_lekha = 3573, - Thai_lekhok = 3574, - Thai_lekchet = 3575, - Thai_lekpaet = 3576, - Thai_lekkao = 3577, - Hangul_Kiyeog = 3745, - Hangul_SsangKiyeog = 3746, - Hangul_KiyeogSios = 3747, - Hangul_Nieun = 3748, - Hangul_NieunJieuj = 3749, - Hangul_NieunHieuh = 3750, - Hangul_Dikeud = 3751, - Hangul_SsangDikeud = 3752, - Hangul_Rieul = 3753, - Hangul_RieulKiyeog = 3754, - Hangul_RieulMieum = 3755, - Hangul_RieulPieub = 3756, - Hangul_RieulSios = 3757, - Hangul_RieulTieut = 3758, - Hangul_RieulPhieuf = 3759, - Hangul_RieulHieuh = 3760, - Hangul_Mieum = 3761, - Hangul_Pieub = 3762, - Hangul_SsangPieub = 3763, - Hangul_PieubSios = 3764, - Hangul_Sios = 3765, - Hangul_SsangSios = 3766, - Hangul_Ieung = 3767, - Hangul_Jieuj = 3768, - Hangul_SsangJieuj = 3769, - Hangul_Cieuc = 3770, - Hangul_Khieuq = 3771, - Hangul_Tieut = 3772, - Hangul_Phieuf = 3773, - Hangul_Hieuh = 3774, - Hangul_A = 3775, - Hangul_AE = 3776, - Hangul_YA = 3777, - Hangul_YAE = 3778, - Hangul_EO = 3779, - Hangul_E = 3780, - Hangul_YEO = 3781, - Hangul_YE = 3782, - Hangul_O = 3783, - Hangul_WA = 3784, - Hangul_WAE = 3785, - Hangul_OE = 3786, - Hangul_YO = 3787, - Hangul_U = 3788, - Hangul_WEO = 3789, - Hangul_WE = 3790, - Hangul_WI = 3791, - Hangul_YU = 3792, - Hangul_EU = 3793, - Hangul_YI = 3794, - Hangul_I = 3795, - Hangul_J_Kiyeog = 3796, - Hangul_J_SsangKiyeog = 3797, - Hangul_J_KiyeogSios = 3798, - Hangul_J_Nieun = 3799, - Hangul_J_NieunJieuj = 3800, - Hangul_J_NieunHieuh = 3801, - Hangul_J_Dikeud = 3802, - Hangul_J_Rieul = 3803, - Hangul_J_RieulKiyeog = 3804, - Hangul_J_RieulMieum = 3805, - Hangul_J_RieulPieub = 3806, - Hangul_J_RieulSios = 3807, - Hangul_J_RieulTieut = 3808, - Hangul_J_RieulPhieuf = 3809, - Hangul_J_RieulHieuh = 3810, - Hangul_J_Mieum = 3811, - Hangul_J_Pieub = 3812, - Hangul_J_PieubSios = 3813, - Hangul_J_Sios = 3814, - Hangul_J_SsangSios = 3815, - Hangul_J_Ieung = 3816, - Hangul_J_Jieuj = 3817, - Hangul_J_Cieuc = 3818, - Hangul_J_Khieuq = 3819, - Hangul_J_Tieut = 3820, - Hangul_J_Phieuf = 3821, - Hangul_J_Hieuh = 3822, - Hangul_RieulYeorinHieuh = 3823, - Hangul_SunkyeongeumMieum = 3824, - Hangul_SunkyeongeumPieub = 3825, - Hangul_PanSios = 3826, - Hangul_KkogjiDalrinIeung = 3827, - Hangul_SunkyeongeumPhieuf = 3828, - Hangul_YeorinHieuh = 3829, - Hangul_AraeA = 3830, - Hangul_AraeAE = 3831, - Hangul_J_PanSios = 3832, - Hangul_J_KkogjiDalrinIeung = 3833, - Hangul_J_YeorinHieuh = 3834, - Korean_Won = 3839, - OE = 5052, - oe = 5053, - Ydiaeresis = 5054, - EcuSign = 8352, - ColonSign = 8353, - CruzeiroSign = 8354, - FFrancSign = 8355, - LiraSign = 8356, - MillSign = 8357, - NairaSign = 8358, - PesetaSign = 8359, - RupeeSign = 8360, - WonSign = 8361, - NewSheqelSign = 8362, - DongSign = 8363, - EuroSign = 8364, - Key_3270_Duplicate = 64769, - Key_3270_FieldMark = 64770, - Key_3270_Right2 = 64771, - Key_3270_Left2 = 64772, - Key_3270_BackTab = 64773, - Key_3270_EraseEOF = 64774, - Key_3270_EraseInput = 64775, - Key_3270_Reset = 64776, - Key_3270_Quit = 64777, - Key_3270_PA1 = 64778, - Key_3270_PA2 = 64779, - Key_3270_PA3 = 64780, - Key_3270_Test = 64781, - Key_3270_Attn = 64782, - Key_3270_CursorBlink = 64783, - Key_3270_AltCursor = 64784, - Key_3270_KeyClick = 64785, - Key_3270_Jump = 64786, - Key_3270_Ident = 64787, - Key_3270_Rule = 64788, - Key_3270_Copy = 64789, - Key_3270_Play = 64790, - Key_3270_Setup = 64791, - Key_3270_Record = 64792, - Key_3270_ChangeScreen = 64793, - Key_3270_DeleteWord = 64794, - Key_3270_ExSelect = 64795, - Key_3270_CursorSelect = 64796, - Key_3270_PrintScreen = 64797, - Key_3270_Enter = 64798, - ISO_Lock = 65025, - ISO_Level2_Latch = 65026, - ISO_Level3_Shift = 65027, - ISO_Level3_Latch = 65028, - ISO_Level3_Lock = 65029, - ISO_Group_Latch = 65030, - ISO_Group_Lock = 65031, - ISO_Next_Group = 65032, - ISO_Next_Group_Lock = 65033, - ISO_Prev_Group = 65034, - ISO_Prev_Group_Lock = 65035, - ISO_First_Group = 65036, - ISO_First_Group_Lock = 65037, - ISO_Last_Group = 65038, - ISO_Last_Group_Lock = 65039, - ISO_Left_Tab = 65056, - ISO_Move_Line_Up = 65057, - ISO_Move_Line_Down = 65058, - ISO_Partial_Line_Up = 65059, - ISO_Partial_Line_Down = 65060, - ISO_Partial_Space_Left = 65061, - ISO_Partial_Space_Right = 65062, - ISO_Set_Margin_Left = 65063, - ISO_Set_Margin_Right = 65064, - ISO_Release_Margin_Left = 65065, - ISO_Release_Margin_Right = 65066, - ISO_Release_Both_Margins = 65067, - ISO_Fast_Cursor_Left = 65068, - ISO_Fast_Cursor_Right = 65069, - ISO_Fast_Cursor_Up = 65070, - ISO_Fast_Cursor_Down = 65071, - ISO_Continuous_Underline = 65072, - ISO_Discontinuous_Underline = 65073, - ISO_Emphasize = 65074, - ISO_Center_Object = 65075, - ISO_Enter = 65076, - dead_grave = 65104, - dead_acute = 65105, - dead_circumflex = 65106, - dead_tilde = 65107, - dead_macron = 65108, - dead_breve = 65109, - dead_abovedot = 65110, - dead_diaeresis = 65111, - dead_abovering = 65112, - dead_doubleacute = 65113, - dead_caron = 65114, - dead_cedilla = 65115, - dead_ogonek = 65116, - dead_iota = 65117, - dead_voiced_sound = 65118, - dead_semivoiced_sound = 65119, - dead_belowdot = 65120, - AccessX_Enable = 65136, - AccessX_Feedback_Enable = 65137, - RepeatKeys_Enable = 65138, - SlowKeys_Enable = 65139, - BounceKeys_Enable = 65140, - StickyKeys_Enable = 65141, - MouseKeys_Enable = 65142, - MouseKeys_Accel_Enable = 65143, - Overlay1_Enable = 65144, - Overlay2_Enable = 65145, - AudibleBell_Enable = 65146, - First_Virtual_Screen = 65232, - Prev_Virtual_Screen = 65233, - Next_Virtual_Screen = 65234, - Last_Virtual_Screen = 65236, - Terminate_Server = 65237, - Pointer_Left = 65248, - Pointer_Right = 65249, - Pointer_Up = 65250, - Pointer_Down = 65251, - Pointer_UpLeft = 65252, - Pointer_UpRight = 65253, - Pointer_DownLeft = 65254, - Pointer_DownRight = 65255, - Pointer_Button_Dflt = 65256, - Pointer_Button1 = 65257, - Pointer_Button2 = 65258, - Pointer_Button3 = 65259, - Pointer_Button4 = 65260, - Pointer_Button5 = 65261, - Pointer_DblClick_Dflt = 65262, - Pointer_DblClick1 = 65263, - Pointer_DblClick2 = 65264, - Pointer_DblClick3 = 65265, - Pointer_DblClick4 = 65266, - Pointer_DblClick5 = 65267, - Pointer_Drag_Dflt = 65268, - Pointer_Drag1 = 65269, - Pointer_Drag2 = 65270, - Pointer_Drag3 = 65271, - Pointer_Drag4 = 65272, - Pointer_EnableKeys = 65273, - Pointer_Accelerate = 65274, - Pointer_DfltBtnNext = 65275, - Pointer_DfltBtnPrev = 65276, - Pointer_Drag5 = 65277, - BackSpace = 65288, - Tab = 65289, - Linefeed = 65290, - Clear = 65291, - Return = 65293, - Pause = 65299, - Scroll_Lock = 65300, - Sys_Req = 65301, - Escape = 65307, - Multi_key = 65312, - Kanji = 65313, - Muhenkan = 65314, - Henkan = 65315, - Henkan_Mode = 65315, - Romaji = 65316, - Hiragana = 65317, - Katakana = 65318, - Hiragana_Katakana = 65319, - Zenkaku = 65320, - Hankaku = 65321, - Zenkaku_Hankaku = 65322, - Touroku = 65323, - Massyo = 65324, - Kana_Lock = 65325, - Kana_Shift = 65326, - Eisu_Shift = 65327, - Eisu_toggle = 65328, - Hangul = 65329, - Hangul_Start = 65330, - Hangul_End = 65331, - Hangul_Hanja = 65332, - Hangul_Jamo = 65333, - Hangul_Romaja = 65334, - Codeinput = 65335, - Hangul_Codeinput = 65335, - Kanji_Bangou = 65335, - Hangul_Jeonja = 65336, - Hangul_Banja = 65337, - Hangul_PreHanja = 65338, - Hangul_PostHanja = 65339, - Hangul_SingleCandidate = 65340, - SingleCandidate = 65340, - Hangul_MultipleCandidate = 65341, - MultipleCandidate = 65341, - Zen_Koho = 65341, - Hangul_PreviousCandidate = 65342, - Mae_Koho = 65342, - PreviousCandidate = 65342, - Hangul_Special = 65343, - Home = 65360, - Left = 65361, - Up = 65362, - Right = 65363, - Down = 65364, - Page_Up = 65365, - Prior = 65365, - Next = 65366, - Page_Down = 65366, - End = 65367, - Begin = 65368, - Select = 65376, - Print = 65377, - Execute = 65378, - Insert = 65379, - Undo = 65381, - Redo = 65382, - Menu = 65383, - Find = 65384, - Cancel = 65385, - Help = 65386, - Break = 65387, - Arabic_switch = 65406, - Greek_switch = 65406, - Hangul_switch = 65406, - Hebrew_switch = 65406, - ISO_Group_Shift = 65406, - Mode_switch = 65406, - kana_switch = 65406, - script_switch = 65406, - Num_Lock = 65407, - KP_Space = 65408, - KP_Tab = 65417, - KP_Enter = 65421, - KP_F1 = 65425, - KP_F2 = 65426, - KP_F3 = 65427, - KP_F4 = 65428, - KP_Home = 65429, - KP_Left = 65430, - KP_Up = 65431, - KP_Right = 65432, - KP_Down = 65433, - KP_Page_Up = 65434, - KP_Prior = 65434, - KP_Next = 65435, - KP_Page_Down = 65435, - KP_End = 65436, - KP_Begin = 65437, - KP_Insert = 65438, - KP_Delete = 65439, - KP_Multiply = 65450, - KP_Add = 65451, - KP_Separator = 65452, - KP_Subtract = 65453, - KP_Decimal = 65454, - KP_Divide = 65455, - KP_0 = 65456, - KP_1 = 65457, - KP_2 = 65458, - KP_3 = 65459, - KP_4 = 65460, - KP_5 = 65461, - KP_6 = 65462, - KP_7 = 65463, - KP_8 = 65464, - KP_9 = 65465, - KP_Equal = 65469, - F1 = 65470, - F2 = 65471, - F3 = 65472, - F4 = 65473, - F5 = 65474, - F6 = 65475, - F7 = 65476, - F8 = 65477, - F9 = 65478, - F10 = 65479, - F11 = 65480, - L1 = 65480, - F12 = 65481, - L2 = 65481, - F13 = 65482, - L3 = 65482, - F14 = 65483, - L4 = 65483, - F15 = 65484, - L5 = 65484, - F16 = 65485, - L6 = 65485, - F17 = 65486, - L7 = 65486, - F18 = 65487, - L8 = 65487, - F19 = 65488, - L9 = 65488, - F20 = 65489, - L10 = 65489, - F21 = 65490, - R1 = 65490, - F22 = 65491, - R2 = 65491, - F23 = 65492, - R3 = 65492, - F24 = 65493, - R4 = 65493, - F25 = 65494, - R5 = 65494, - F26 = 65495, - R6 = 65495, - F27 = 65496, - R7 = 65496, - F28 = 65497, - R8 = 65497, - F29 = 65498, - R9 = 65498, - F30 = 65499, - R10 = 65499, - F31 = 65500, - R11 = 65500, - F32 = 65501, - R12 = 65501, - F33 = 65502, - R13 = 65502, - F34 = 65503, - R14 = 65503, - F35 = 65504, - R15 = 65504, - Shift_L = 65505, - Shift_R = 65506, - Control_L = 65507, - Control_R = 65508, - Caps_Lock = 65509, - Shift_Lock = 65510, - Meta_L = 65511, - Meta_R = 65512, - Alt_L = 65513, - Alt_R = 65514, - Super_L = 65515, - Super_R = 65516, - Hyper_L = 65517, - Hyper_R = 65518, - Delete = 65535, - VoidSymbol = 16777215, - } -} diff --git a/src/Gtk/Avalonia.Gtk3/Gtk3ForeignX11SystemDialog.cs b/src/Gtk/Avalonia.Gtk3/Gtk3ForeignX11SystemDialog.cs deleted file mode 100644 index b80914572b..0000000000 --- a/src/Gtk/Avalonia.Gtk3/Gtk3ForeignX11SystemDialog.cs +++ /dev/null @@ -1,115 +0,0 @@ -using System; -using System.Runtime.InteropServices; -using System.Threading; -using System.Threading.Tasks; -using Avalonia.Controls; -using Avalonia.Controls.Platform; -using Avalonia.Gtk3.Interop; -using Avalonia.Platform; -using Avalonia.Platform.Interop; - -namespace Avalonia.Gtk3 -{ - public class Gtk3ForeignX11SystemDialog : ISystemDialogImpl - { - private Task _initialized; - private SystemDialogBase _inner = new SystemDialogBase(); - - - public async Task ShowFileDialogAsync(FileDialog dialog, IWindowImpl parent) - { - await EnsureInitialized(); - var xid = parent.Handle.Handle; - return await await RunOnGtkThread( - () => _inner.ShowFileDialogAsync(dialog, GtkWindow.Null, chooser => UpdateParent(chooser, xid))); - } - - public async Task ShowFolderDialogAsync(OpenFolderDialog dialog, IWindowImpl parent) - { - await EnsureInitialized(); - var xid = parent.Handle.Handle; - return await await RunOnGtkThread( - () => _inner.ShowFolderDialogAsync(dialog, GtkWindow.Null, chooser => UpdateParent(chooser, xid))); - } - - void UpdateParent(GtkFileChooser chooser, IntPtr xid) - { - Native.GtkWidgetRealize(chooser); - var window = Native.GtkWidgetGetWindow(chooser); - var parent = Native.GdkWindowForeignNewForDisplay(GdkDisplay, xid); - if (window != IntPtr.Zero && parent != IntPtr.Zero) - Native.GdkWindowSetTransientFor(window, parent); - } - - async Task EnsureInitialized() - { - if (_initialized == null) - { - var tcs = new TaskCompletionSource(); - _initialized = tcs.Task; - new Thread(() => GtkThread(tcs)) - { - IsBackground = true - }.Start(); - } - - if (!(await _initialized)) - throw new Exception("Unable to initialize GTK on separate thread"); - - } - - Task RunOnGtkThread(Func action) - { - var tcs = new TaskCompletionSource(); - GlibTimeout.Add(0, 0, () => - { - - try - { - tcs.SetResult(action()); - } - catch (Exception e) - { - tcs.TrySetException(e); - } - - return false; - }); - return tcs.Task; - } - - - void GtkThread(TaskCompletionSource tcs) - { - try - { - X11.XInitThreads(); - }catch{} - Resolver.Resolve(); - if (Native.GdkWindowForeignNewForDisplay == null) - throw new Exception("gdk_x11_window_foreign_new_for_display is not found in your libgdk-3.so"); - using (var backends = new Utf8Buffer("x11")) - Native.GdkSetAllowedBackends?.Invoke(backends); - if (!Native.GtkInitCheck(0, IntPtr.Zero)) - { - tcs.SetResult(false); - return; - } - - using (var utf = new Utf8Buffer($"avalonia.app.a{Guid.NewGuid().ToString("N")}")) - App = Native.GtkApplicationNew(utf, 0); - if (App == IntPtr.Zero) - { - tcs.SetResult(false); - return; - } - GdkDisplay = Native.GdkGetDefaultDisplay(); - tcs.SetResult(true); - while (true) - Native.GtkMainIteration(); - } - - private IntPtr GdkDisplay { get; set; } - private IntPtr App { get; set; } - } -} diff --git a/src/Gtk/Avalonia.Gtk3/Gtk3Platform.cs b/src/Gtk/Avalonia.Gtk3/Gtk3Platform.cs deleted file mode 100644 index 965973d3cb..0000000000 --- a/src/Gtk/Avalonia.Gtk3/Gtk3Platform.cs +++ /dev/null @@ -1,168 +0,0 @@ -using System; -using System.Runtime.InteropServices; -using System.Threading; -using Avalonia.Controls; -using Avalonia.Controls.Platform; -using Avalonia.Gtk3; -using Avalonia.Gtk3.Interop; -using Avalonia.Input; -using Avalonia.Input.Platform; -using Avalonia.OpenGL; -using Avalonia.Platform; -using Avalonia.Platform.Interop; -using Avalonia.Rendering; -using Avalonia.Threading; - -namespace Avalonia.Gtk3 -{ - public class Gtk3Platform : IWindowingPlatform, IPlatformSettings, IPlatformThreadingInterface - { - internal static readonly Gtk3Platform Instance = new Gtk3Platform(); - internal static readonly MouseDevice Mouse = new MouseDevice(); - internal static readonly KeyboardDevice Keyboard = new KeyboardDevice(); - internal static IntPtr App { get; set; } - internal static string DisplayClassName; - public static bool UseDeferredRendering = true; - private static bool s_gtkInitialized; - - static bool EnvOption(string option, bool def, bool? specified) - { - bool? Parse(string env) - { - var v = Environment.GetEnvironmentVariable("AVALONIA_GTK3_" + env); - if (v == null) - return null; - if (v.ToLowerInvariant() == "false" || v == "0") - return false; - return true; - } - - var overridden = Parse(option + "_OVERRIDE"); - if (overridden.HasValue) - return overridden.Value; - if (specified.HasValue) - return specified.Value; - var envValue = Parse(option); - return envValue ?? def; - } - - public static void Initialize(Gtk3PlatformOptions options) - { - Resolver.Custom = options.CustomResolver; - UseDeferredRendering = EnvOption("USE_DEFERRED_RENDERING", true, options.UseDeferredRendering); - var useGpu = EnvOption("USE_GPU", true, options.UseGpuAcceleration); - if (!s_gtkInitialized) - { - try - { - X11.XInitThreads(); - }catch{} - Resolver.Resolve(); - if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) - using (var backends = new Utf8Buffer("x11")) - Native.GdkSetAllowedBackends?.Invoke(backends); - Native.GtkInit(0, IntPtr.Zero); - var disp = Native.GdkGetDefaultDisplay(); - DisplayClassName = - Utf8Buffer.StringFromPtr(Native.GTypeName(Marshal.ReadIntPtr(Marshal.ReadIntPtr(disp)))); - - using (var utf = new Utf8Buffer($"avalonia.app.a{Guid.NewGuid().ToString("N")}")) - App = Native.GtkApplicationNew(utf, 0); - //Mark current thread as UI thread - s_tlsMarker = true; - s_gtkInitialized = true; - } - AvaloniaLocator.CurrentMutable.Bind().ToConstant(Instance) - .Bind().ToSingleton() - .Bind().ToConstant(new CursorFactory()) - .Bind().ToConstant(Keyboard) - .Bind().ToConstant(Instance) - .Bind().ToConstant(Instance) - .Bind().ToSingleton() - .Bind().ToConstant(new RenderLoop()) - .Bind().ToConstant(new DefaultRenderTimer(60)) - .Bind().ToSingleton() - .Bind().ToConstant(new PlatformIconLoader()); - if (useGpu) - EglGlPlatformFeature.TryInitialize(); - } - - public IWindowImpl CreateWindow() => new WindowImpl(); - - public IEmbeddableWindowImpl CreateEmbeddableWindow() - { - throw new NotImplementedException(); - } - - public IPopupImpl CreatePopup() => new PopupImpl(); - - public Size DoubleClickSize => new Size(4, 4); - - public TimeSpan DoubleClickTime => TimeSpan.FromMilliseconds(100); //STUB - public double RenderScalingFactor { get; } = 1; - public double LayoutScalingFactor { get; } = 1; - - public void RunLoop(CancellationToken cancellationToken) - { - while (!cancellationToken.IsCancellationRequested) - Native.GtkMainIteration(); - } - - public IDisposable StartTimer(DispatcherPriority priority, TimeSpan interval, Action tick) - { - var msec = interval.TotalMilliseconds; - var imsec = (uint) msec; - if (imsec == 0) - imsec = 1; - return GlibTimeout.StartTimer(GlibPriority.FromDispatcherPriority(priority), imsec, tick); - } - - private bool[] _signaled = new bool[(int) DispatcherPriority.MaxValue + 1]; - object _lock = new object(); - public void Signal(DispatcherPriority prio) - { - var idx = (int) prio; - lock(_lock) - if (!_signaled[idx]) - { - _signaled[idx] = true; - GlibTimeout.Add(GlibPriority.FromDispatcherPriority(prio), 0, () => - { - lock (_lock) - { - _signaled[idx] = false; - } - Signaled?.Invoke(prio); - return false; - }); - } - } - public event Action Signaled; - - - [ThreadStatic] - private static bool s_tlsMarker; - - public bool CurrentThreadIsLoopThread => s_tlsMarker; - } - - public class Gtk3PlatformOptions - { - public bool? UseDeferredRendering { get; set; } - public bool? UseGpuAcceleration { get; set; } - public ICustomGtk3NativeLibraryResolver CustomResolver { get; set; } - } -} - -namespace Avalonia -{ - public static class Gtk3AppBuilderExtensions - { - public static T UseGtk3(this AppBuilderBase builder, Gtk3PlatformOptions options = null) - where T : AppBuilderBase, new() - { - return builder.UseWindowingSubsystem(() => Gtk3Platform.Initialize(options ?? new Gtk3PlatformOptions()), - "GTK3"); - } - } -} diff --git a/src/Gtk/Avalonia.Gtk3/GtkScreen.cs b/src/Gtk/Avalonia.Gtk3/GtkScreen.cs deleted file mode 100644 index a2b4604130..0000000000 --- a/src/Gtk/Avalonia.Gtk3/GtkScreen.cs +++ /dev/null @@ -1,24 +0,0 @@ -using Avalonia.Platform; - -namespace Avalonia.Gtk3 -{ - public class GtkScreen : Screen - { - private readonly int _screenId; - - public GtkScreen(PixelRect bounds, PixelRect workingArea, bool primary, int screenId) : base(bounds, workingArea, primary) - { - this._screenId = screenId; - } - - public override int GetHashCode() - { - return _screenId; - } - - public override bool Equals(object obj) - { - return (obj is GtkScreen screen) ? this._screenId == screen._screenId : base.Equals(obj); - } - } -} diff --git a/src/Gtk/Avalonia.Gtk3/IDeferredRenderOperation.cs b/src/Gtk/Avalonia.Gtk3/IDeferredRenderOperation.cs deleted file mode 100644 index e16463a2ef..0000000000 --- a/src/Gtk/Avalonia.Gtk3/IDeferredRenderOperation.cs +++ /dev/null @@ -1,9 +0,0 @@ -using System; - -namespace Avalonia.Gtk3 -{ - public interface IDeferredRenderOperation : IDisposable - { - void RenderNow(IntPtr? ctx); - } -} \ No newline at end of file diff --git a/src/Gtk/Avalonia.Gtk3/ImageSurfaceFramebuffer.cs b/src/Gtk/Avalonia.Gtk3/ImageSurfaceFramebuffer.cs deleted file mode 100644 index 878689442d..0000000000 --- a/src/Gtk/Avalonia.Gtk3/ImageSurfaceFramebuffer.cs +++ /dev/null @@ -1,144 +0,0 @@ -using System; -using Avalonia.Gtk3.Interop; -using Avalonia.Platform; -using Avalonia.Threading; - - -namespace Avalonia.Gtk3 -{ - class ImageSurfaceFramebuffer : ILockedFramebuffer - { - private readonly WindowBaseImpl _impl; - private readonly GtkWidget _widget; - private ManagedCairoSurface _surface; - private int _factor; - private object _lock = new object(); - public ImageSurfaceFramebuffer(WindowBaseImpl impl, int width, int height, int factor) - { - _impl = impl; - _widget = impl.GtkWidget; - _factor = factor; - width *= _factor; - height *= _factor; - _surface = new ManagedCairoSurface(width, height); - - Size = new PixelSize(width, height); - Address = _surface.Buffer; - RowBytes = _surface.Stride; - Native.CairoSurfaceFlush(_surface.Surface); - } - - static void Draw(IntPtr context, CairoSurface surface, double factor) - { - - Native.CairoSurfaceMarkDirty(surface); - Native.CairoScale(context, 1d / factor, 1d / factor); - Native.CairoSetSourceSurface(context, surface, 0, 0); - Native.CairoPaint(context); - - } - /* - static Stopwatch St =Stopwatch.StartNew(); - private static int _frames; - private static int _fps;*/ - static void DrawToWidget(GtkWidget widget, CairoSurface surface, int width, int height, double factor) - { - if(surface == null || widget.IsClosed) - return; - var window = Native.GtkWidgetGetWindow(widget); - if(window == IntPtr.Zero) - return; - var rc = new GdkRectangle {Width = width, Height = height}; - Native.GdkWindowBeginPaintRect(window, ref rc); - var context = Native.GdkCairoCreate(window); - Draw(context, surface, factor); - /* - _frames++; - var el = St.Elapsed; - if (el.TotalSeconds > 1) - { - _fps = (int) (_frames / el.TotalSeconds); - _frames = 0; - St = Stopwatch.StartNew(); - } - - Native.CairoSetSourceRgba(context, 1, 0, 0, 1); - Native.CairoMoveTo(context, 20, 20); - Native.CairoSetFontSize(context, 30); - using (var txt = new Utf8Buffer("FPS: " + _fps)) - Native.CairoShowText(context, txt); - */ - - Native.CairoDestroy(context); - Native.GdkWindowEndPaint(window); - } - - class RenderOp : IDeferredRenderOperation - { - private readonly GtkWidget _widget; - private ManagedCairoSurface _surface; - private readonly double _factor; - private readonly int _width; - private readonly int _height; - - public RenderOp(GtkWidget widget, ManagedCairoSurface surface, double factor, int width, int height) - { - _widget = widget; - _surface = surface ?? throw new ArgumentNullException(nameof(surface)); - _factor = factor; - _width = width; - _height = height; - } - - public void Dispose() - { - _surface?.Dispose(); - _surface = null; - } - - public void RenderNow(IntPtr? ctx) - { - if(ctx.HasValue) - Draw(ctx.Value, _surface.Surface, _factor); - else - DrawToWidget(_widget, _surface.Surface, _width, _height, _factor); - } - } - - public void Dispose() - { - lock (_lock) - { - if (Dispatcher.UIThread.CheckAccess()) - { - if (_impl.CurrentCairoContext != IntPtr.Zero) - Draw(_impl.CurrentCairoContext, _surface.Surface, _factor); - else - DrawToWidget(_widget, _surface.Surface, Size.Width, Size.Height, _factor); - _surface.Dispose(); - } - else - _impl.SetNextRenderOperation(new RenderOp(_widget, _surface, _factor, Size.Width, Size.Height)); - _surface = null; - } - } - - public IntPtr Address { get; } - public PixelSize Size { get; } - public int RowBytes { get; } - - - public Vector Dpi - { - get - { - return new Vector(96, 96) * _factor; - } - } - - public PixelFormat Format => PixelFormat.Bgra8888; - } -} - - - diff --git a/src/Gtk/Avalonia.Gtk3/Interop/CairoSurface.cs b/src/Gtk/Avalonia.Gtk3/Interop/CairoSurface.cs deleted file mode 100644 index 7838be9305..0000000000 --- a/src/Gtk/Avalonia.Gtk3/Interop/CairoSurface.cs +++ /dev/null @@ -1,20 +0,0 @@ -using System; -using System.Runtime.InteropServices; - -namespace Avalonia.Gtk3.Interop -{ - class CairoSurface : SafeHandle - { - public CairoSurface() : base(IntPtr.Zero, true) - { - } - - protected override bool ReleaseHandle() - { - Native.CairoSurfaceDestroy(handle); - return true; - } - - public override bool IsInvalid => handle == IntPtr.Zero; - } -} diff --git a/src/Gtk/Avalonia.Gtk3/Interop/GException.cs b/src/Gtk/Avalonia.Gtk3/Interop/GException.cs deleted file mode 100644 index 5ff6cbe8ed..0000000000 --- a/src/Gtk/Avalonia.Gtk3/Interop/GException.cs +++ /dev/null @@ -1,30 +0,0 @@ -using System; -using System.Runtime.InteropServices; -using Avalonia.Platform.Interop; - -namespace Avalonia.Gtk3.Interop -{ - public class GException : Exception - { - [StructLayout(LayoutKind.Sequential)] - struct GError - { - UInt32 domain; - int code; - public IntPtr message; - }; - - static unsafe string GetError(IntPtr error) - { - if (error == IntPtr.Zero) - return "Unknown error"; - return Utf8Buffer.StringFromPtr(((GError*) error)->message); - } - - public GException(IntPtr error) : base(GetError(error)) - { - - } - - } -} diff --git a/src/Gtk/Avalonia.Gtk3/Interop/GObject.cs b/src/Gtk/Avalonia.Gtk3/Interop/GObject.cs deleted file mode 100644 index bb272b06d5..0000000000 --- a/src/Gtk/Avalonia.Gtk3/Interop/GObject.cs +++ /dev/null @@ -1,87 +0,0 @@ -using System; -using System.Diagnostics; -using System.Runtime.InteropServices; - -namespace Avalonia.Gtk3.Interop -{ - class GObject : SafeHandle - { - public GObject() : base(IntPtr.Zero, true) - { - } - - public GObject(IntPtr handle, bool owned = true) : base(IntPtr.Zero, owned) - { - this.handle = handle; - } - - protected override bool ReleaseHandle() - { - if (handle != IntPtr.Zero) - { - Debug.Assert(Native.GTypeCheckInstanceIsFundamentallyA(handle, new IntPtr(Native.G_TYPE_OBJECT)), - "Handle is not a GObject"); - Native.GObjectUnref(handle); - } - - handle = IntPtr.Zero; - return true; - } - - public override bool IsInvalid => handle == IntPtr.Zero; - } - - class GInputStream : GObject - { - - } - - class GtkWidget : GObject - { - - } - - class GtkWindow : GtkWidget - { - public static GtkWindow Null { get; } = new GtkWindow(); - } - - class GtkImContext : GObject - { - } - - class GdkScreen : GObject - { - public GdkScreen() : base(IntPtr.Zero, false) - { - } - - public GdkScreen(IntPtr handle, bool owned = true) : base(handle, owned) - { - this.handle = handle; - } - } - - class UnownedGdkScreen : GdkScreen - { - public UnownedGdkScreen() : base(IntPtr.Zero, false) - { - } - - public UnownedGdkScreen(IntPtr handle, bool owned = true) : base(IntPtr.Zero, false) - { - this.handle = handle; - } - } - - class GtkDialog : GtkWindow - { - - } - - class GtkFileChooser : GtkDialog - { - - } -} - diff --git a/src/Gtk/Avalonia.Gtk3/Interop/GlibPriority.cs b/src/Gtk/Avalonia.Gtk3/Interop/GlibPriority.cs deleted file mode 100644 index 08448e30d5..0000000000 --- a/src/Gtk/Avalonia.Gtk3/Interop/GlibPriority.cs +++ /dev/null @@ -1,46 +0,0 @@ -using System; -using Avalonia.Threading; - -namespace Avalonia.Gtk3.Interop -{ - static class GlibPriority - { - public static int High = -100; - public static int Default = 0; - public static int HighIdle = 100; - public static int GtkResize = HighIdle + 10; - public static int GtkPaint = HighIdle + 20; - public static int DefaultIdle = 200; - public static int Low = 300; - public static int GdkEvents = Default; - public static int GdkRedraw = HighIdle + 20; - - public static int FromDispatcherPriority(DispatcherPriority prio) - { - if (prio == DispatcherPriority.Send) - return High; - if (prio == DispatcherPriority.Normal) - return Default; - if (prio == DispatcherPriority.DataBind) - return Default + 1; - if (prio == DispatcherPriority.Layout) - return Default + 2; - if (prio == DispatcherPriority.Render) - return Default + 3; - if (prio == DispatcherPriority.Loaded) - return GtkPaint + 20; - if (prio == DispatcherPriority.Input) - return GtkPaint + 21; - if (prio == DispatcherPriority.Background) - return DefaultIdle + 1; - if (prio == DispatcherPriority.ContextIdle) - return DefaultIdle + 2; - if (prio == DispatcherPriority.ApplicationIdle) - return DefaultIdle + 3; - if (prio == DispatcherPriority.SystemIdle) - return DefaultIdle + 4; - throw new ArgumentException("Unknown priority"); - - } - } -} diff --git a/src/Gtk/Avalonia.Gtk3/Interop/GlibTimeout.cs b/src/Gtk/Avalonia.Gtk3/Interop/GlibTimeout.cs deleted file mode 100644 index 6e3840914c..0000000000 --- a/src/Gtk/Avalonia.Gtk3/Interop/GlibTimeout.cs +++ /dev/null @@ -1,58 +0,0 @@ -using System; -using System.Runtime.InteropServices; - -namespace Avalonia.Gtk3.Interop -{ - static class GlibTimeout - { - static bool Handler(IntPtr data) - { - var handle = GCHandle.FromIntPtr(data); - var cb = (Func) handle.Target; - if (!cb()) - { - handle.Free(); - return false; - } - return true; - } - - private static readonly Native.D.timeout_callback PinnedHandler; - static GlibTimeout() - { - PinnedHandler = Handler; - } - - - public static void Add(int priority, uint interval, Func callback) - { - var handle = GCHandle.Alloc(callback); - Native.GTimeoutAddFull(priority, interval, PinnedHandler, GCHandle.ToIntPtr(handle), IntPtr.Zero); - } - - class Timer : IDisposable - { - public bool Stopped; - public void Dispose() - { - - Stopped = true; - } - } - - public static IDisposable StartTimer(int priority, uint interval, Action tick) - { - var timer = new Timer (); - GlibTimeout.Add(priority, interval, - () => - { - if (timer.Stopped) - return false; - tick(); - return !timer.Stopped; - }); - - return timer; - } - } -} diff --git a/src/Gtk/Avalonia.Gtk3/Interop/ICustomGtk3NativeLibraryResolver.cs b/src/Gtk/Avalonia.Gtk3/Interop/ICustomGtk3NativeLibraryResolver.cs deleted file mode 100644 index 3b78953d1b..0000000000 --- a/src/Gtk/Avalonia.Gtk3/Interop/ICustomGtk3NativeLibraryResolver.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Avalonia.Gtk3.Interop; - -namespace Avalonia.Gtk3 -{ - public interface ICustomGtk3NativeLibraryResolver - { - string GetName(GtkDll dll); - string BasePath { get; } - bool TrySystemFirst { get; } - string Lookup(GtkDll dll); - } -} diff --git a/src/Gtk/Avalonia.Gtk3/Interop/ManagedCairoSurface.cs b/src/Gtk/Avalonia.Gtk3/Interop/ManagedCairoSurface.cs deleted file mode 100644 index 2b0a7eae12..0000000000 --- a/src/Gtk/Avalonia.Gtk3/Interop/ManagedCairoSurface.cs +++ /dev/null @@ -1,37 +0,0 @@ -using System; -using Avalonia.Platform; - -namespace Avalonia.Gtk3.Interop -{ - class ManagedCairoSurface : IDisposable - { - public IntPtr Buffer { get; private set; } - public CairoSurface Surface { get; private set; } - public int Stride { get; private set; } - private int _size; - private IRuntimePlatform _plat; - private IUnmanagedBlob _blob; - - public ManagedCairoSurface(int width, int height) - { - _plat = AvaloniaLocator.Current.GetService(); - Stride = width * 4; - _size = height * Stride; - _blob = _plat.AllocBlob(_size * 2); - Buffer = _blob.Address; - Surface = Native.CairoImageSurfaceCreateForData(Buffer, 1, width, height, Stride); - } - - public void Dispose() - { - - if (Buffer != IntPtr.Zero) - { - Surface.Dispose(); - _blob.Dispose(); - Buffer = IntPtr.Zero; - } - } - - } -} diff --git a/src/Gtk/Avalonia.Gtk3/Interop/Native.cs b/src/Gtk/Avalonia.Gtk3/Interop/Native.cs deleted file mode 100644 index 765c19a796..0000000000 --- a/src/Gtk/Avalonia.Gtk3/Interop/Native.cs +++ /dev/null @@ -1,790 +0,0 @@ -#pragma warning disable 649 -using System; -using System.Runtime.InteropServices; -using Avalonia.Controls; -using Avalonia.Platform.Interop; -using gdouble = System.Double; -using gint = System.Int32; -using gint16 = System.Int16; -using gint8 = System.Byte; -using guint = System.UInt32; -using guint16 = System.UInt16; -using guint32 = System.UInt32; - -namespace Avalonia.Gtk3.Interop -{ - static class Native - { - public static class D - { - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gdk)] - public delegate gint16 gdk_display_get_n_screens(IntPtr display); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gdk)] - public delegate UnownedGdkScreen gdk_display_get_screen(IntPtr display, gint16 num); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gdk)] - public delegate UnownedGdkScreen gdk_display_get_default_screen (IntPtr display); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gdk)] - public delegate gint16 gdk_screen_get_n_monitors(GdkScreen screen); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gdk)] - public delegate gint16 gdk_screen_get_primary_monitor(GdkScreen screen); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gdk)] - public delegate void gdk_screen_get_monitor_geometry(GdkScreen screen, gint16 num, ref GdkRectangle rect); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gdk)] - public delegate void gdk_screen_get_monitor_workarea(GdkScreen screen, gint16 num, ref GdkRectangle rect); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gtk)] - public delegate IntPtr gtk_application_new(Utf8Buffer appId, int flags); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gtk)] - public delegate void gtk_main_iteration(); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gtk)] - public delegate GtkWindow gtk_window_new(GtkWindowType windowType); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gtk)] - public delegate IntPtr gtk_init(int argc, IntPtr argv); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gtk)] - public delegate bool gtk_init_check(int argc, IntPtr argv); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gdk, optional: true)] - public delegate IntPtr gdk_set_allowed_backends (Utf8Buffer backends); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gtk)] - public delegate void gtk_window_present(GtkWindow gtkWindow); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gtk)] - public delegate void gtk_widget_hide(GtkWidget gtkWidget); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gtk)] - public delegate void gtk_widget_show(GtkWidget gtkWidget); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gtk)] - public delegate void gtk_window_set_icon(GtkWindow window, Pixbuf pixbuf); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gtk)] - public delegate void gtk_window_set_modal(GtkWindow window, bool modal); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gtk)] - public delegate void gtk_window_set_transient_for(GtkWindow window, IntPtr parent); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] //No manual import - public delegate IntPtr gdk_get_native_handle(IntPtr gdkWindow); - - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gtk)] - public delegate IntPtr gtk_widget_get_window(GtkWidget gtkWidget); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gtk, optional: true)] - public delegate uint gtk_widget_get_scale_factor(GtkWidget gtkWidget); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gtk)] - public delegate IntPtr gtk_widget_get_screen(GtkWidget gtkWidget); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gtk)] - public delegate IntPtr gtk_widget_set_double_buffered(GtkWidget gtkWidget, bool value); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gtk)] - public delegate IntPtr gtk_widget_set_events(GtkWidget gtkWidget, uint flags); - - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gdk)] - public delegate int gdk_screen_get_height(IntPtr screen); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gdk)] - public delegate int gdk_screen_get_width(IntPtr screen); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gdk)] - public delegate IntPtr gdk_display_get_default(); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gdk)] - public delegate int gdk_window_get_origin(IntPtr gdkWindow, out int x, out int y); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gdk)] - public delegate void gdk_window_resize(IntPtr gtkWindow, int width, int height); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gdk)] - public delegate void gdk_window_set_override_redirect(IntPtr gdkWindow, bool value); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gtk)] - public delegate void gtk_widget_realize(GtkWidget gtkWidget); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gtk)] - public delegate void gtk_window_set_title(GtkWindow gtkWindow, Utf8Buffer title); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gtk)] - public delegate void gtk_window_set_resizable(GtkWindow gtkWindow, bool resizable); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gtk)] - public delegate void gtk_window_set_decorated(GtkWindow gtkWindow, bool decorated); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gtk)] - public delegate void gtk_window_set_skip_taskbar_hint(GtkWindow gtkWindow, bool setting); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gtk)] - public delegate bool gtk_window_get_skip_taskbar_hint(GtkWindow gtkWindow); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gtk)] - public delegate void gtk_window_set_skip_pager_hint(GtkWindow gtkWindow, bool setting); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gtk)] - public delegate bool gtk_window_get_skip_pager_hint(GtkWindow gtkWindow); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gtk)] - public delegate void gtk_window_get_size(GtkWindow gtkWindow, out int width, out int height); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gtk)] - public delegate void gtk_window_resize(GtkWindow gtkWindow, int width, int height); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gtk)] - public delegate void gtk_widget_set_size_request(GtkWidget widget, int width, int height); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gtk)] - public delegate void gtk_window_set_default_size(GtkWindow gtkWindow, int width, int height); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gtk)] - public delegate void gtk_window_get_position(GtkWindow gtkWindow, out int x, out int y); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gtk)] - public delegate void gtk_window_move(GtkWindow gtkWindow, int x, int y); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gtk)] - public delegate GtkFileChooser gtk_file_chooser_dialog_new(Utf8Buffer title, GtkWindow parent, GtkFileChooserAction action, IntPtr ignore); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gtk)] - public unsafe delegate GSList* gtk_file_chooser_get_filenames(GtkFileChooser chooser); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gtk)] - public delegate void gtk_file_chooser_set_select_multiple(GtkFileChooser chooser, bool allow); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gtk)] - public delegate void gtk_file_chooser_set_filename(GtkFileChooser chooser, Utf8Buffer file); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gtk)] - public delegate void gtk_dialog_add_button(GtkDialog raw, Utf8Buffer button_text, GtkResponseType response_id); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Cairo)] - public delegate CairoSurface cairo_image_surface_create(int format, int width, int height); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Cairo)] - public delegate CairoSurface cairo_image_surface_create_for_data(IntPtr data, int format, int width, int height, int stride); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Cairo)] - public delegate IntPtr cairo_image_surface_get_data(CairoSurface surface); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Cairo)] - public delegate int cairo_image_surface_get_stride(CairoSurface surface); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Cairo)] - public delegate void cairo_surface_mark_dirty(CairoSurface surface); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Cairo)] - public delegate void cairo_surface_write_to_png(CairoSurface surface, Utf8Buffer path); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Cairo)] - public delegate void cairo_surface_flush(CairoSurface surface); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Cairo)] - public delegate void cairo_surface_destroy(IntPtr surface); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Cairo)] - public delegate void cairo_set_source_surface(IntPtr cr, CairoSurface surface, double x, double y); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Cairo)] - public delegate void cairo_set_source_rgba(IntPtr cr, double r, double g, double b, double a); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Cairo)] - public delegate void cairo_scale(IntPtr context, double sx, double sy); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Cairo)] - public delegate void cairo_paint(IntPtr context); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Cairo)] - public delegate void cairo_show_text(IntPtr context, Utf8Buffer text); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Cairo)] - public delegate void cairo_set_font_size(IntPtr context, double size); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Cairo)] - public delegate void cairo_select_font_face(IntPtr context, Utf8Buffer face, int slant, int weight); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Cairo)] - public delegate void cairo_move_to(IntPtr context, double x, double y); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Cairo)] - public delegate void cairo_destroy(IntPtr context); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gtk)] - public delegate void gtk_widget_queue_draw_area(GtkWidget widget, int x, int y, int width, int height); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gtk)] - public delegate uint gtk_widget_add_tick_callback(GtkWidget widget, TickCallback callback, IntPtr userData, IntPtr destroy); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gtk)] - public delegate uint gtk_widget_remove_tick_callback(GtkWidget widget, uint id); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gtk)] - public delegate GtkImContext gtk_im_multicontext_new(); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gtk)] - public delegate IntPtr gtk_im_context_set_client_window(GtkImContext context, IntPtr window); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gtk)] - public delegate bool gtk_im_context_filter_keypress(GtkImContext context, IntPtr ev); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gtk)] - public delegate void gtk_widget_activate(GtkWidget widget); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gdk)] - public delegate IntPtr gdk_screen_get_root_window(IntPtr screen); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gdk)] - public delegate IntPtr gdk_cursor_new(GdkCursorType type); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gdk)] - public delegate IntPtr gdk_window_get_pointer(IntPtr raw, out int x, out int y, out int mask); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gdk)] - public delegate GdkWindowState gdk_window_get_state(IntPtr window); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gtk)] - public delegate void gtk_window_iconify(GtkWindow window); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gtk)] - public delegate void gtk_window_deiconify(GtkWindow window); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gtk)] - public delegate void gtk_window_maximize(GtkWindow window); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gtk)] - public delegate void gtk_window_unmaximize(GtkWindow window); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gtk)] - public delegate void gtk_window_close(GtkWindow window); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gtk)] - public delegate void gtk_window_set_keep_above(GtkWindow gtkWindow, bool setting); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gtk)] - public delegate void gtk_window_set_geometry_hints(GtkWindow window, IntPtr geometry_widget, ref GdkGeometry geometry, GdkWindowHints geom_mask); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gdk)] - public delegate void gdk_window_invalidate_rect(IntPtr window, ref GdkRectangle rect, bool invalidate_children); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gdk)] - public delegate void gdk_window_begin_move_drag(IntPtr window, gint button, gint root_x, gint root_y, guint32 timestamp); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gdk)] - public delegate void gdk_window_begin_resize_drag(IntPtr window, WindowEdge edge, gint button, gint root_x, gint root_y, guint32 timestamp); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gdk)] - public delegate void gdk_window_process_updates(IntPtr window, bool updateChildren); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gdk)] - public delegate void gdk_window_begin_paint_rect(IntPtr window, ref GdkRectangle rect); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gdk)] - public delegate void gdk_window_end_paint(IntPtr window); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gdk, optional: true)] - public delegate IntPtr gdk_x11_window_foreign_new_for_display(IntPtr display, IntPtr xid); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gdk)] - public delegate void gdk_window_set_transient_for(IntPtr window, IntPtr parent); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gdk)] - public delegate void gdk_event_request_motions(IntPtr ev); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gtk)] - public delegate IntPtr gtk_clipboard_get_for_display(IntPtr display, IntPtr atom); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gtk)] - public delegate void gtk_clipboard_request_text(IntPtr clipboard, GtkClipboardTextReceivedFunc callback, IntPtr user_data); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gtk)] - public delegate void gtk_clipboard_set_text(IntPtr clipboard, Utf8Buffer text, int len); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gtk)] - public delegate void gtk_clipboard_clear(IntPtr clipboard); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.GdkPixBuf)] - public delegate IntPtr gdk_pixbuf_new_from_file(Utf8Buffer filename, out IntPtr error); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gtk)] - public delegate IntPtr gtk_icon_theme_get_default(); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gtk)] - public delegate IntPtr gtk_icon_theme_load_icon(IntPtr icon_theme, Utf8Buffer icon_name, gint size, int flags,out IntPtr error); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gdk)] - public delegate IntPtr gdk_cursor_new_from_pixbuf(IntPtr disp, IntPtr pixbuf, int x, int y); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gdk)] - public delegate IntPtr gdk_window_set_cursor(IntPtr window, IntPtr cursor); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.GdkPixBuf)] - public delegate IntPtr gdk_pixbuf_new_from_stream(GInputStream stream, IntPtr cancel, out IntPtr error); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.GdkPixBuf)] - public delegate bool gdk_pixbuf_save_to_bufferv(Pixbuf pixbuf, out IntPtr buffer, out IntPtr buffer_size, - Utf8Buffer type, IntPtr option_keys, IntPtr option_values, out IntPtr error); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gdk)] - public delegate IntPtr gdk_cairo_create(IntPtr window); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gobject)] - public delegate void g_object_unref(IntPtr instance); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gobject)] - public delegate void g_object_ref(GObject instance); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gobject)] - public delegate IntPtr g_type_name(IntPtr instance); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gobject)] - public delegate ulong g_signal_connect_object(GObject instance, Utf8Buffer signal, IntPtr handler, IntPtr userData, int flags); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gobject)] - public delegate ulong g_signal_handler_disconnect(GObject instance, ulong connectionId); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Glib)] - public delegate ulong g_timeout_add(uint interval, timeout_callback callback, IntPtr data); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Glib)] - public delegate ulong g_timeout_add_full(int prio, uint interval, timeout_callback callback, IntPtr data, IntPtr destroy); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Glib)] - public delegate ulong g_free(IntPtr data); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gobject)] - public delegate bool g_type_check_instance_is_fundamentally_a(IntPtr instance, IntPtr type); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Glib)] - public unsafe delegate void g_slist_free(GSList* data); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gio)] - public delegate GInputStream g_memory_input_stream_new_from_data(IntPtr ptr, IntPtr len, IntPtr destroyCallback); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate bool signal_widget_draw(IntPtr gtkWidget, IntPtr cairoContext, IntPtr userData); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate bool signal_generic(IntPtr gtkWidget, IntPtr userData); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate bool signal_dialog_response(IntPtr gtkWidget, GtkResponseType response, IntPtr userData); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate bool signal_onevent(IntPtr gtkWidget, IntPtr ev, IntPtr userData); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate void monitors_changed(IntPtr screen, IntPtr userData); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate bool signal_commit(IntPtr gtkWidget, IntPtr utf8string, IntPtr userData); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate bool timeout_callback(IntPtr data); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate void GtkClipboardTextReceivedFunc(IntPtr clipboard, IntPtr utf8string, IntPtr userdata); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate bool TickCallback(IntPtr widget, IntPtr clock, IntPtr userdata); - - - } - - public static D.gdk_display_get_n_screens GdkDisplayGetNScreens; - public static D.gdk_display_get_screen GdkDisplayGetScreen; - public static D.gdk_display_get_default_screen GdkDisplayGetDefaultScreen; - public static D.gdk_screen_get_n_monitors GdkScreenGetNMonitors; - public static D.gdk_screen_get_primary_monitor GdkScreenGetPrimaryMonitor; - public static D.gdk_screen_get_monitor_geometry GdkScreenGetMonitorGeometry; - public static D.gdk_screen_get_monitor_workarea GdkScreenGetMonitorWorkarea; - public static D.gtk_window_set_decorated GtkWindowSetDecorated; - public static D.gtk_window_set_resizable GtkWindowSetResizable; - public static D.gtk_window_set_skip_taskbar_hint GtkWindowSetSkipTaskbarHint; - public static D.gtk_window_get_skip_taskbar_hint GtkWindowGetSkipTaskbarHint; - public static D.gtk_window_set_skip_pager_hint GtkWindowSetSkipPagerHint; - public static D.gtk_window_get_skip_pager_hint GtkWindowGetSkipPagerHint; - public static D.gtk_window_set_title GtkWindowSetTitle; - public static D.gtk_application_new GtkApplicationNew; - public static D.gtk_main_iteration GtkMainIteration; - public static D.gtk_window_new GtkWindowNew; - public static D.gtk_window_set_icon GtkWindowSetIcon; - public static D.gtk_window_set_modal GtkWindowSetModal; - public static D.gtk_window_set_transient_for GtkWindowSetTransientFor; - public static D.gdk_set_allowed_backends GdkSetAllowedBackends; - public static D.gtk_init GtkInit; - public static D.gtk_init_check GtkInitCheck; - public static D.gtk_window_present GtkWindowPresent; - public static D.gtk_widget_hide GtkWidgetHide; - public static D.gtk_widget_show GtkWidgetShow; - public static D.gdk_get_native_handle GetNativeGdkWindowHandle; - public static D.gtk_widget_get_window GtkWidgetGetWindow; - public static D.gtk_widget_get_scale_factor GtkWidgetGetScaleFactor; - public static D.gtk_widget_get_screen GtkWidgetGetScreen; - public static D.gtk_widget_realize GtkWidgetRealize; - public static D.gtk_window_get_size GtkWindowGetSize; - public static D.gtk_window_resize GtkWindowResize; - public static D.gdk_window_resize GdkWindowResize; - public static D.gdk_window_set_override_redirect GdkWindowSetOverrideRedirect; - public static D.gtk_widget_set_size_request GtkWindowSetSizeRequest; - public static D.gtk_window_set_default_size GtkWindowSetDefaultSize; - public static D.gtk_window_set_geometry_hints GtkWindowSetGeometryHints; - public static D.gtk_window_get_position GtkWindowGetPosition; - public static D.gtk_window_move GtkWindowMove; - public static D.gtk_file_chooser_dialog_new GtkFileChooserDialogNew; - public static D.gtk_file_chooser_set_select_multiple GtkFileChooserSetSelectMultiple; - public static D.gtk_file_chooser_set_filename GtkFileChooserSetFilename; - public static D.gtk_file_chooser_get_filenames GtkFileChooserGetFilenames; - public static D.gtk_dialog_add_button GtkDialogAddButton; - public static D.g_object_unref GObjectUnref; - public static D.g_object_ref GObjectRef; - public static D.g_type_name GTypeName; - public static D.g_signal_connect_object GSignalConnectObject; - public static D.g_signal_handler_disconnect GSignalHandlerDisconnect; - public static D.g_timeout_add GTimeoutAdd; - public static D.g_timeout_add_full GTimeoutAddFull; - public static D.g_free GFree; - public static D.g_type_check_instance_is_fundamentally_a GTypeCheckInstanceIsFundamentallyA; - public static D.g_slist_free GSlistFree; - public static D.g_memory_input_stream_new_from_data GMemoryInputStreamNewFromData; - public static D.gtk_widget_set_double_buffered GtkWidgetSetDoubleBuffered; - public static D.gtk_widget_set_events GtkWidgetSetEvents; - public static D.gdk_window_invalidate_rect GdkWindowInvalidateRect; - public static D.gtk_widget_queue_draw_area GtkWidgetQueueDrawArea; - public static D.gtk_widget_add_tick_callback GtkWidgetAddTickCallback; - public static D.gtk_widget_remove_tick_callback GtkWidgetRemoveTickCallback; - public static D.gtk_widget_activate GtkWidgetActivate; - public static D.gtk_clipboard_get_for_display GtkClipboardGetForDisplay; - public static D.gtk_clipboard_request_text GtkClipboardRequestText; - public static D.gtk_clipboard_set_text GtkClipboardSetText; - public static D.gtk_clipboard_clear GtkClipboardRequestClear; - - public static D.gtk_im_multicontext_new GtkImMulticontextNew; - public static D.gtk_im_context_filter_keypress GtkImContextFilterKeypress; - public static D.gtk_im_context_set_client_window GtkImContextSetClientWindow; - - public static D.gdk_screen_get_height GdkScreenGetHeight; - public static D.gdk_display_get_default GdkGetDefaultDisplay; - public static D.gdk_screen_get_width GdkScreenGetWidth; - public static D.gdk_screen_get_root_window GdkScreenGetRootWindow; - public static D.gdk_cursor_new GdkCursorNew; - public static D.gdk_window_get_origin GdkWindowGetOrigin; - public static D.gdk_window_get_pointer GdkWindowGetPointer; - public static D.gdk_window_get_state GdkWindowGetState; - public static D.gtk_window_iconify GtkWindowIconify; - public static D.gtk_window_deiconify GtkWindowDeiconify; - public static D.gtk_window_maximize GtkWindowMaximize; - public static D.gtk_window_unmaximize GtkWindowUnmaximize; - public static D.gtk_window_close GtkWindowClose; - public static D.gtk_window_set_keep_above GtkWindowSetKeepAbove; - public static D.gdk_window_begin_move_drag GdkWindowBeginMoveDrag; - public static D.gdk_window_begin_resize_drag GdkWindowBeginResizeDrag; - public static D.gdk_event_request_motions GdkEventRequestMotions; - public static D.gdk_window_process_updates GdkWindowProcessUpdates; - public static D.gdk_window_begin_paint_rect GdkWindowBeginPaintRect; - public static D.gdk_window_end_paint GdkWindowEndPaint; - public static D.gdk_x11_window_foreign_new_for_display GdkWindowForeignNewForDisplay; - public static D.gdk_window_set_transient_for GdkWindowSetTransientFor; - - public static D.gdk_pixbuf_new_from_file GdkPixbufNewFromFile; - public static D.gtk_icon_theme_get_default GtkIconThemeGetDefault; - public static D.gtk_icon_theme_load_icon GtkIconThemeLoadIcon; - public static D.gdk_cursor_new_from_pixbuf GdkCursorNewFromPixbuf; - public static D.gdk_window_set_cursor GdkWindowSetCursor; - public static D.gdk_pixbuf_new_from_stream GdkPixbufNewFromStream; - public static D.gdk_pixbuf_save_to_bufferv GdkPixbufSaveToBufferv; - public static D.gdk_cairo_create GdkCairoCreate; - - public static D.cairo_image_surface_create CairoImageSurfaceCreate; - public static D.cairo_image_surface_create_for_data CairoImageSurfaceCreateForData; - public static D.cairo_image_surface_get_data CairoImageSurfaceGetData; - public static D.cairo_image_surface_get_stride CairoImageSurfaceGetStride; - public static D.cairo_surface_mark_dirty CairoSurfaceMarkDirty; - public static D.cairo_surface_write_to_png CairoSurfaceWriteToPng; - public static D.cairo_surface_flush CairoSurfaceFlush; - public static D.cairo_surface_destroy CairoSurfaceDestroy; - public static D.cairo_set_source_surface CairoSetSourceSurface; - public static D.cairo_set_source_rgba CairoSetSourceRgba; - public static D.cairo_scale CairoScale; - public static D.cairo_paint CairoPaint; - public static D.cairo_show_text CairoShowText; - public static D.cairo_select_font_face CairoSelectFontFace; - public static D.cairo_set_font_size CairoSetFontSize; - public static D.cairo_move_to CairoMoveTo; - public static D.cairo_destroy CairoDestroy; - - public const int G_TYPE_OBJECT = 80; - } - - public enum GtkWindowType - { - TopLevel, - Popup - } - - [StructLayout(LayoutKind.Sequential)] - public struct GdkRectangle - { - public int X, Y, Width, Height; - - public static GdkRectangle FromRect(Rect rect) - { - return new GdkRectangle - { - X = (int) rect.X, - Y = (int) rect.Y, - Width = (int) rect.Width, - Height = (int) rect.Height - }; - } - } - - enum GdkEventType - { - Nothing = -1, - Delete = 0, - Destroy = 1, - Expose = 2, - MotionNotify = 3, - ButtonPress = 4, - TwoButtonPress = 5, - ThreeButtonPress = 6, - ButtonRelease = 7, - KeyPress = 8, - KeyRelease = 9, - EnterNotify = 10, - LeaveNotify = 11, - FocusChange = 12, - Configure = 13, - Map = 14, - Unmap = 15, - PropertyNotify = 16, - SelectionClear = 17, - SelectionRequest = 18, - SelectionNotify = 19, - ProximityIn = 20, - ProximityOut = 21, - DragEnter = 22, - DragLeave = 23, - DragMotion = 24, - DragStatus = 25, - DropStart = 26, - DropFinished = 27, - ClientEvent = 28, - VisibilityNotify = 29, - NoExpose = 30, - Scroll = 31, - WindowState = 32, - Setting = 33, - OwnerChange = 34, - GrabBroken = 35, - } - - enum GdkModifierType - { - ShiftMask = 1, - LockMask = 2, - ControlMask = 4, - Mod1Mask = 8, - Mod2Mask = 16, - Mod3Mask = 32, - Mod4Mask = 64, - Mod5Mask = 128, - Button1Mask = 256, - Button2Mask = 512, - Button3Mask = 1024, - Button4Mask = 2048, - Button5Mask = 4096, - SuperMask = 67108864, - HyperMask = 134217728, - MetaMask = 268435456, - ReleaseMask = 1073741824, - ModifierMask = ReleaseMask | Button5Mask | Button4Mask | Button3Mask | Button2Mask | Button1Mask | Mod5Mask | Mod4Mask | Mod3Mask | Mod2Mask | Mod1Mask | ControlMask | LockMask | ShiftMask, - None = 0, - } - - enum GdkScrollDirection - { - Up, - Down, - Left, - Right, - Smooth - } - - [StructLayout(LayoutKind.Sequential)] - unsafe struct GdkEventButton - { - public GdkEventType type; - public IntPtr window; - public gint8 send_event; - public guint32 time; - public gdouble x; - public gdouble y; - public gdouble* axes; - public GdkModifierType state; - public guint button; - public IntPtr device; - public gdouble x_root, y_root; - } - - [StructLayout(LayoutKind.Sequential)] - unsafe struct GdkEventMotion - { - public GdkEventType type; - public IntPtr window; - public gint8 send_event; - public guint32 time; - public gdouble x; - public gdouble y; - public gdouble* axes; - public GdkModifierType state; - public gint16 is_hint; - public IntPtr device; - public gdouble x_root, y_root; - } - - [StructLayout(LayoutKind.Sequential)] - unsafe struct GdkEventScroll - { - public GdkEventType type; - public IntPtr window; - public gint8 send_event; - public guint32 time; - public gdouble x; - public gdouble y; - public GdkModifierType state; - public GdkScrollDirection direction; - public IntPtr device; - public gdouble x_root, y_root; - public gdouble delta_x; - public gdouble delta_y; - } - - [StructLayout(LayoutKind.Sequential)] - unsafe struct GdkEventCrossing - { - public GdkEventType type; - public IntPtr window; - public gint8 send_event; - public IntPtr subwindow; - public guint32 time; - public gdouble x; - public gdouble y; - public gdouble x_root; - public gdouble y_root; - public int mode; - public int detail; - public bool focus; - public GdkModifierType state; - }; - - [StructLayout(LayoutKind.Sequential)] - unsafe struct GdkEventWindowState - { - public GdkEventType type; - public IntPtr window; - gint8 send_event; - public GdkWindowState changed_mask; - public GdkWindowState new_window_state; - } - - [StructLayout(LayoutKind.Sequential)] - unsafe struct GdkEventKey - { - public GdkEventType type; - public IntPtr window; - public gint8 send_event; - public guint32 time; - public guint state; - public guint keyval; - public gint length; - public IntPtr pstring; - public guint16 hardware_keycode; - public byte group; - public guint is_modifier; - } - - [StructLayout(LayoutKind.Sequential)] - unsafe struct GSList - { - public IntPtr Data; - public GSList* Next; - } - - [Flags] - public enum GdkWindowState - { - Withdrawn = 1, - Iconified = 2, - Maximized = 4, - Sticky = 8, - Fullscreen = 16, - Above = 32, - Below = 64, - Focused = 128, - Ttiled = 256 - } - - public enum GtkResponseType - { - Help = -11, - Apply = -10, - No = -9, - Yes = -8, - Close = -7, - Cancel = -6, - Ok = -5, - DeleteEvent = -4, - Accept = -3, - Reject = -2, - None = -1, - } - - public enum GtkFileChooserAction - { - Open, - Save, - SelectFolder, - CreateFolder, - } - - [StructLayout(LayoutKind.Sequential)] - public struct GdkGeometry - { - public gint min_width; - public gint min_height; - public gint max_width; - public gint max_height; - public gint base_width; - public gint base_height; - public gint width_inc; - public gint height_inc; - public gdouble min_aspect; - public gdouble max_aspect; - public gint win_gravity; - } - - enum GdkWindowHints - { - GDK_HINT_POS = 1 << 0, - GDK_HINT_MIN_SIZE = 1 << 1, - GDK_HINT_MAX_SIZE = 1 << 2, - GDK_HINT_BASE_SIZE = 1 << 3, - GDK_HINT_ASPECT = 1 << 4, - GDK_HINT_RESIZE_INC = 1 << 5, - GDK_HINT_WIN_GRAVITY = 1 << 6, - GDK_HINT_USER_POS = 1 << 7, - GDK_HINT_USER_SIZE = 1 << 8 - } -} diff --git a/src/Gtk/Avalonia.Gtk3/Interop/NativeException.cs b/src/Gtk/Avalonia.Gtk3/Interop/NativeException.cs deleted file mode 100644 index 64cbccbd26..0000000000 --- a/src/Gtk/Avalonia.Gtk3/Interop/NativeException.cs +++ /dev/null @@ -1,20 +0,0 @@ -using System; - -namespace Avalonia.Gtk3.Interop -{ - public class NativeException : Exception - { - public NativeException() - { - } - - public NativeException(string message) : base(message) - { - } - - public NativeException(string message, Exception inner) : base(message, inner) - { - } - - } -} diff --git a/src/Gtk/Avalonia.Gtk3/Interop/Pixbuf.cs b/src/Gtk/Avalonia.Gtk3/Interop/Pixbuf.cs deleted file mode 100644 index 322b9bdfae..0000000000 --- a/src/Gtk/Avalonia.Gtk3/Interop/Pixbuf.cs +++ /dev/null @@ -1,65 +0,0 @@ -using System; -using System.IO; -using System.Runtime.InteropServices; -using Avalonia.Platform; -using Avalonia.Platform.Interop; - -namespace Avalonia.Gtk3.Interop -{ - internal class Pixbuf : GObject, IWindowIconImpl - { - Pixbuf(IntPtr handle) : base(handle) - { - - } - - public static Pixbuf NewFromFile(string filename) - { - using (var ub = new Utf8Buffer(filename)) - { - IntPtr err; - var rv = Native.GdkPixbufNewFromFile(ub, out err); - if(rv != IntPtr.Zero) - return new Pixbuf(rv); - throw new GException(err); - } - } - - public static unsafe Pixbuf NewFromBytes(byte[] data) - { - fixed (void* bytes = data) - { - using (var stream = Native.GMemoryInputStreamNewFromData(new IntPtr(bytes), new IntPtr(data.Length), IntPtr.Zero)) - { - IntPtr err; - var rv = Native.GdkPixbufNewFromStream(stream, IntPtr.Zero, out err); - if (rv != IntPtr.Zero) - return new Pixbuf(rv); - throw new GException(err); - } - } - } - - public static Pixbuf NewFromStream(Stream s) - { - if (s is MemoryStream) - return NewFromBytes(((MemoryStream) s).ToArray()); - var ms = new MemoryStream(); - s.CopyTo(ms); - return NewFromBytes(ms.ToArray()); - } - - public void Save(Stream outputStream) - { - IntPtr buffer, bufferLen, error; - using (var png = new Utf8Buffer("png")) - if (!Native.GdkPixbufSaveToBufferv(this, out buffer, out bufferLen, png, - IntPtr.Zero, IntPtr.Zero, out error)) - throw new GException(error); - var data = new byte[bufferLen.ToInt32()]; - Marshal.Copy(buffer, data, 0, bufferLen.ToInt32()); - Native.GFree(buffer); - outputStream.Write(data, 0, data.Length); - } - } -} diff --git a/src/Gtk/Avalonia.Gtk3/Interop/Resolver.cs b/src/Gtk/Avalonia.Gtk3/Interop/Resolver.cs deleted file mode 100644 index c39cb9e394..0000000000 --- a/src/Gtk/Avalonia.Gtk3/Interop/Resolver.cs +++ /dev/null @@ -1,156 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Reflection; -using System.Runtime.InteropServices; -using Avalonia.Platform; -using Avalonia.Platform.Interop; - -namespace Avalonia.Gtk3.Interop -{ - internal class GtkImportAttribute : Attribute - { - public GtkDll Dll { get; set; } - public string Name { get; set; } - public bool Optional { get; set; } - - public GtkImportAttribute(GtkDll dll, string name = null, bool optional = false) - { - Dll = dll; - Name = name; - Optional = optional; - } - } - - public enum GtkDll - { - Gdk, - Gtk, - Glib, - Gio, - Gobject, - Cairo, - GdkPixBuf - } - - static class Resolver - { - private static Lazy Platform = - new Lazy( - () => AvaloniaLocator.Current.GetService().GetRuntimeInfo().OperatingSystem); - - public static ICustomGtk3NativeLibraryResolver Custom { get; set; } - - - static string FormatName(string name, int version = 0) - { - if (Platform.Value == OperatingSystemType.WinNT) - return "lib" + name + "-" + version + ".dll"; - if (Platform.Value == OperatingSystemType.Linux) - return "lib" + name + ".so" + "." + version; - if (Platform.Value == OperatingSystemType.OSX) - return "lib" + name + "." + version + ".dylib"; - throw new Exception("Unknown platform, use custom name resolver"); - } - - - - static string GetDllName(GtkDll dll) - { - var name = Custom?.GetName(dll); - if (name != null) - return name; - - switch (dll) - { - case GtkDll.Cairo: - return FormatName("cairo", 2); - case GtkDll.Gdk: - return FormatName("gdk-3"); - case GtkDll.Glib: - return FormatName("glib-2.0"); - case GtkDll.Gio: - return FormatName("gio-2.0"); - case GtkDll.Gtk: - return FormatName("gtk-3"); - case GtkDll.Gobject: - return FormatName("gobject-2.0"); - case GtkDll.GdkPixBuf: - return FormatName("gdk_pixbuf-2.0"); - default: - throw new ArgumentException("Unknown lib: " + dll); - } - } - - static IntPtr LoadDll(IDynamicLibraryLoader loader, GtkDll dll) - { - - var exceptions = new List(); - - var name = GetDllName(dll); - if (Custom?.TrySystemFirst != false) - { - try - { - return loader.LoadLibrary(name); - } - catch (Exception e) - { - exceptions.Add(e); - } - } - var path = Custom?.Lookup(dll); - if (path == null && Custom?.BasePath != null) - path = Path.Combine(Custom.BasePath, name); - if (path != null) - { - try - { - return loader.LoadLibrary(path); - } - catch (Exception e) - { - exceptions.Add(e); - } - } - throw new AggregateException("Unable to load " + dll, exceptions); - } - - public static void Resolve(string basePath = null) - { - var loader = AvaloniaLocator.Current.GetService(); - - var dlls = Enum.GetValues(typeof(GtkDll)).Cast().ToDictionary(x => x, x => LoadDll(loader, x)); - - foreach (var fieldInfo in typeof(Native).GetTypeInfo().DeclaredFields) - { - var import = fieldInfo.FieldType.GetTypeInfo().GetCustomAttributes(typeof(GtkImportAttribute), true).Cast().FirstOrDefault(); - if(import == null) - continue; - IntPtr lib = dlls[import.Dll]; - - var funcPtr = loader.GetProcAddress(lib, import.Name ?? fieldInfo.FieldType.Name, import.Optional); - - if (funcPtr != IntPtr.Zero) - fieldInfo.SetValue(null, Marshal.GetDelegateForFunctionPointer(funcPtr, fieldInfo.FieldType)); - } - - var nativeHandleNames = new[] { "gdk_win32_window_get_handle", "gdk_x11_window_get_xid", "gdk_quartz_window_get_nswindow" }; - foreach (var name in nativeHandleNames) - { - var ptr = loader.GetProcAddress(dlls[GtkDll.Gdk], name, true); - if (ptr == IntPtr.Zero) - continue; - Native.GetNativeGdkWindowHandle = (Native.D.gdk_get_native_handle) Marshal - .GetDelegateForFunctionPointer(ptr, typeof(Native.D.gdk_get_native_handle)); - } - if (Native.GetNativeGdkWindowHandle == null) - throw new Exception($"Unable to locate any of [{string.Join(", ", nativeHandleNames)}] in libgdk"); - - } - - - } -} - diff --git a/src/Gtk/Avalonia.Gtk3/Interop/Signal.cs b/src/Gtk/Avalonia.Gtk3/Interop/Signal.cs deleted file mode 100644 index 8eaca93152..0000000000 --- a/src/Gtk/Avalonia.Gtk3/Interop/Signal.cs +++ /dev/null @@ -1,47 +0,0 @@ -using System; -using System.Runtime.InteropServices; -using Avalonia.Platform.Interop; - -namespace Avalonia.Gtk3.Interop -{ - class Signal - { - class ConnectedSignal : IDisposable - { - private readonly GObject _instance; - private GCHandle _handle; - private readonly ulong _id; - - public ConnectedSignal(GObject instance, GCHandle handle, ulong id) - { - _instance = instance; - Native.GObjectRef(instance); - _handle = handle; - _id = id; - } - - public void Dispose() - { - if (_handle.IsAllocated) - { - Native.GObjectUnref(_instance.DangerousGetHandle()); - Native.GSignalHandlerDisconnect(_instance, _id); - _handle.Free(); - } - } - } - - public static IDisposable Connect(GObject obj, string name, T handler) - { - var handle = GCHandle.Alloc(handler); - var ptr = Marshal.GetFunctionPointerForDelegate((Delegate)(object)handler); - using (var utf = new Utf8Buffer(name)) - { - var id = Native.GSignalConnectObject(obj, utf, ptr, IntPtr.Zero, 0); - if (id == 0) - throw new ArgumentException("Unable to connect to signal " + name); - return new ConnectedSignal(obj, handle, id); - } - } - } -} diff --git a/src/Gtk/Avalonia.Gtk3/KeyTransform.cs b/src/Gtk/Avalonia.Gtk3/KeyTransform.cs deleted file mode 100644 index 4299e07094..0000000000 --- a/src/Gtk/Avalonia.Gtk3/KeyTransform.cs +++ /dev/null @@ -1,230 +0,0 @@ -using System.Collections.Generic; -using Avalonia.Gtk3; -using Avalonia.Input; - -namespace Avalonia.Gtk.Common -{ - static class KeyTransform - { - private static readonly Dictionary KeyDic = new Dictionary - { - { GdkKey.Cancel, Key.Cancel }, - { GdkKey.BackSpace, Key.Back }, - { GdkKey.Tab, Key.Tab }, - { GdkKey.Linefeed, Key.LineFeed }, - { GdkKey.Clear, Key.Clear }, - { GdkKey.Return, Key.Return }, - { GdkKey.KP_Enter, Key.Return }, - { GdkKey.Pause, Key.Pause }, - { GdkKey.Caps_Lock, Key.CapsLock }, - //{ GdkKey.?, Key.HangulMode } - //{ GdkKey.?, Key.JunjaMode } - //{ GdkKey.?, Key.FinalMode } - //{ GdkKey.?, Key.KanjiMode } - { GdkKey.Escape, Key.Escape }, - //{ GdkKey.?, Key.ImeConvert } - //{ GdkKey.?, Key.ImeNonConvert } - //{ GdkKey.?, Key.ImeAccept } - //{ GdkKey.?, Key.ImeModeChange } - { GdkKey.space, Key.Space }, - { GdkKey.Prior, Key.Prior }, - { GdkKey.KP_Prior, Key.Prior }, - { GdkKey.Page_Down, Key.PageDown }, - { GdkKey.KP_Page_Down, Key.PageDown }, - { GdkKey.End, Key.End }, - { GdkKey.KP_End, Key.End }, - { GdkKey.Home, Key.Home }, - { GdkKey.KP_Home, Key.Home }, - { GdkKey.Left, Key.Left }, - { GdkKey.KP_Left, Key.Left }, - { GdkKey.Up, Key.Up }, - { GdkKey.KP_Up, Key.Up }, - { GdkKey.Right, Key.Right }, - { GdkKey.KP_Right, Key.Right }, - { GdkKey.Down, Key.Down }, - { GdkKey.KP_Down, Key.Down }, - { GdkKey.Select, Key.Select }, - { GdkKey.Print, Key.Print }, - { GdkKey.Execute, Key.Execute }, - //{ GdkKey.?, Key.Snapshot } - { GdkKey.Insert, Key.Insert }, - { GdkKey.KP_Insert, Key.Insert }, - { GdkKey.Delete, Key.Delete }, - { GdkKey.KP_Delete, Key.Delete }, - { GdkKey.Help, Key.Help }, - { GdkKey.Key_0, Key.D0 }, - { GdkKey.Key_1, Key.D1 }, - { GdkKey.Key_2, Key.D2 }, - { GdkKey.Key_3, Key.D3 }, - { GdkKey.Key_4, Key.D4 }, - { GdkKey.Key_5, Key.D5 }, - { GdkKey.Key_6, Key.D6 }, - { GdkKey.Key_7, Key.D7 }, - { GdkKey.Key_8, Key.D8 }, - { GdkKey.Key_9, Key.D9 }, - { GdkKey.A, Key.A }, - { GdkKey.B, Key.B }, - { GdkKey.C, Key.C }, - { GdkKey.D, Key.D }, - { GdkKey.E, Key.E }, - { GdkKey.F, Key.F }, - { GdkKey.G, Key.G }, - { GdkKey.H, Key.H }, - { GdkKey.I, Key.I }, - { GdkKey.J, Key.J }, - { GdkKey.K, Key.K }, - { GdkKey.L, Key.L }, - { GdkKey.M, Key.M }, - { GdkKey.N, Key.N }, - { GdkKey.O, Key.O }, - { GdkKey.P, Key.P }, - { GdkKey.Q, Key.Q }, - { GdkKey.R, Key.R }, - { GdkKey.S, Key.S }, - { GdkKey.T, Key.T }, - { GdkKey.U, Key.U }, - { GdkKey.V, Key.V }, - { GdkKey.W, Key.W }, - { GdkKey.X, Key.X }, - { GdkKey.Y, Key.Y }, - { GdkKey.Z, Key.Z }, - { GdkKey.a, Key.A }, - { GdkKey.b, Key.B }, - { GdkKey.c, Key.C }, - { GdkKey.d, Key.D }, - { GdkKey.e, Key.E }, - { GdkKey.f, Key.F }, - { GdkKey.g, Key.G }, - { GdkKey.h, Key.H }, - { GdkKey.i, Key.I }, - { GdkKey.j, Key.J }, - { GdkKey.k, Key.K }, - { GdkKey.l, Key.L }, - { GdkKey.m, Key.M }, - { GdkKey.n, Key.N }, - { GdkKey.o, Key.O }, - { GdkKey.p, Key.P }, - { GdkKey.q, Key.Q }, - { GdkKey.r, Key.R }, - { GdkKey.s, Key.S }, - { GdkKey.t, Key.T }, - { GdkKey.u, Key.U }, - { GdkKey.v, Key.V }, - { GdkKey.w, Key.W }, - { GdkKey.x, Key.X }, - { GdkKey.y, Key.Y }, - { GdkKey.z, Key.Z }, - //{ GdkKey.?, Key.LWin } - //{ GdkKey.?, Key.RWin } - { GdkKey.Menu, Key.Apps }, - //{ GdkKey.?, Key.Sleep } - { GdkKey.KP_0, Key.NumPad0 }, - { GdkKey.KP_1, Key.NumPad1 }, - { GdkKey.KP_2, Key.NumPad2 }, - { GdkKey.KP_3, Key.NumPad3 }, - { GdkKey.KP_4, Key.NumPad4 }, - { GdkKey.KP_5, Key.NumPad5 }, - { GdkKey.KP_6, Key.NumPad6 }, - { GdkKey.KP_7, Key.NumPad7 }, - { GdkKey.KP_8, Key.NumPad8 }, - { GdkKey.KP_9, Key.NumPad9 }, - { GdkKey.multiply, Key.Multiply }, - { GdkKey.KP_Multiply, Key.Multiply }, - { GdkKey.KP_Add, Key.Add }, - //{ GdkKey.?, Key.Separator } - { GdkKey.KP_Subtract, Key.Subtract }, - { GdkKey.KP_Decimal, Key.Decimal }, - { GdkKey.KP_Divide, Key.Divide }, - { GdkKey.F1, Key.F1 }, - { GdkKey.F2, Key.F2 }, - { GdkKey.F3, Key.F3 }, - { GdkKey.F4, Key.F4 }, - { GdkKey.F5, Key.F5 }, - { GdkKey.F6, Key.F6 }, - { GdkKey.F7, Key.F7 }, - { GdkKey.F8, Key.F8 }, - { GdkKey.F9, Key.F9 }, - { GdkKey.F10, Key.F10 }, - { GdkKey.F11, Key.F11 }, - { GdkKey.F12, Key.F12 }, - { GdkKey.L3, Key.F13 }, - { GdkKey.F14, Key.F14 }, - { GdkKey.L5, Key.F15 }, - { GdkKey.F16, Key.F16 }, - { GdkKey.F17, Key.F17 }, - { GdkKey.L8, Key.F18 }, - { GdkKey.L9, Key.F19 }, - { GdkKey.L10, Key.F20 }, - { GdkKey.R1, Key.F21 }, - { GdkKey.R2, Key.F22 }, - { GdkKey.F23, Key.F23 }, - { GdkKey.R4, Key.F24 }, - { GdkKey.Num_Lock, Key.NumLock }, - { GdkKey.Scroll_Lock, Key.Scroll }, - { GdkKey.Shift_L, Key.LeftShift }, - { GdkKey.Shift_R, Key.RightShift }, - { GdkKey.Control_L, Key.LeftCtrl }, - { GdkKey.Control_R, Key.RightCtrl }, - { GdkKey.Alt_L, Key.LeftAlt }, - { GdkKey.Alt_R, Key.RightAlt }, - //{ GdkKey.?, Key.BrowserBack } - //{ GdkKey.?, Key.BrowserForward } - //{ GdkKey.?, Key.BrowserRefresh } - //{ GdkKey.?, Key.BrowserStop } - //{ GdkKey.?, Key.BrowserSearch } - //{ GdkKey.?, Key.BrowserFavorites } - //{ GdkKey.?, Key.BrowserHome } - //{ GdkKey.?, Key.VolumeMute } - //{ GdkKey.?, Key.VolumeDown } - //{ GdkKey.?, Key.VolumeUp } - //{ GdkKey.?, Key.MediaNextTrack } - //{ GdkKey.?, Key.MediaPreviousTrack } - //{ GdkKey.?, Key.MediaStop } - //{ GdkKey.?, Key.MediaPlayPause } - //{ GdkKey.?, Key.LaunchMail } - //{ GdkKey.?, Key.SelectMedia } - //{ GdkKey.?, Key.LaunchApplication1 } - //{ GdkKey.?, Key.LaunchApplication2 } - { GdkKey.semicolon, Key.OemSemicolon }, - { GdkKey.plus, Key.OemPlus }, - { GdkKey.equal, Key.OemPlus }, - { GdkKey.comma, Key.OemComma }, - { GdkKey.minus, Key.OemMinus }, - { GdkKey.period, Key.OemPeriod }, - { GdkKey.slash, Key.Oem2 }, - { GdkKey.grave, Key.OemTilde }, - //{ GdkKey.?, Key.AbntC1 } - //{ GdkKey.?, Key.AbntC2 } - { GdkKey.bracketleft, Key.OemOpenBrackets }, - { GdkKey.backslash, Key.OemPipe }, - { GdkKey.bracketright, Key.OemCloseBrackets }, - { GdkKey.apostrophe, Key.OemQuotes }, - //{ GdkKey.?, Key.Oem8 } - //{ GdkKey.?, Key.Oem102 } - //{ GdkKey.?, Key.ImeProcessed } - //{ GdkKey.?, Key.System } - //{ GdkKey.?, Key.OemAttn } - //{ GdkKey.?, Key.OemFinish } - //{ GdkKey.?, Key.DbeHiragana } - //{ GdkKey.?, Key.OemAuto } - //{ GdkKey.?, Key.DbeDbcsChar } - //{ GdkKey.?, Key.OemBackTab } - //{ GdkKey.?, Key.Attn } - //{ GdkKey.?, Key.DbeEnterWordRegisterMode } - //{ GdkKey.?, Key.DbeEnterImeConfigureMode } - //{ GdkKey.?, Key.EraseEof } - //{ GdkKey.?, Key.Play } - //{ GdkKey.?, Key.Zoom } - //{ GdkKey.?, Key.NoName } - //{ GdkKey.?, Key.DbeEnterDialogConversionMode } - //{ GdkKey.?, Key.OemClear } - //{ GdkKey.?, Key.DeadCharProcessed } - }; - - public static Key ConvertKey(GdkKey key) - { - Key result; - return KeyDic.TryGetValue(key, out result) ? result : Key.None; - } - } -} diff --git a/src/Gtk/Avalonia.Gtk3/PlatformIconLoader.cs b/src/Gtk/Avalonia.Gtk3/PlatformIconLoader.cs deleted file mode 100644 index 6965e7c812..0000000000 --- a/src/Gtk/Avalonia.Gtk3/PlatformIconLoader.cs +++ /dev/null @@ -1,20 +0,0 @@ -using System.IO; -using Avalonia.Gtk3.Interop; -using Avalonia.Platform; - -namespace Avalonia.Gtk3 -{ - class PlatformIconLoader : IPlatformIconLoader - { - public IWindowIconImpl LoadIcon(string fileName) => Pixbuf.NewFromFile(fileName); - - public IWindowIconImpl LoadIcon(Stream stream) => Pixbuf.NewFromStream(stream); - - public IWindowIconImpl LoadIcon(IBitmapImpl bitmap) - { - var ms = new MemoryStream(); - bitmap.Save(ms); - return Pixbuf.NewFromBytes(ms.ToArray()); - } - } -} diff --git a/src/Gtk/Avalonia.Gtk3/PopupImpl.cs b/src/Gtk/Avalonia.Gtk3/PopupImpl.cs deleted file mode 100644 index ef17407dd6..0000000000 --- a/src/Gtk/Avalonia.Gtk3/PopupImpl.cs +++ /dev/null @@ -1,19 +0,0 @@ -using Avalonia.Gtk3.Interop; -using Avalonia.Platform; - -namespace Avalonia.Gtk3 -{ - class PopupImpl : WindowBaseImpl, IPopupImpl - { - static GtkWindow CreateWindow() - { - var window = Native.GtkWindowNew(GtkWindowType.Popup); - return window; - } - - public PopupImpl() : base(CreateWindow()) - { - OverrideRedirect = true; - } - } -} diff --git a/src/Gtk/Avalonia.Gtk3/Properties/AssemblyInfo.cs b/src/Gtk/Avalonia.Gtk3/Properties/AssemblyInfo.cs deleted file mode 100644 index a27d631ee0..0000000000 --- a/src/Gtk/Avalonia.Gtk3/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,10 +0,0 @@ -using System.Reflection; -using Avalonia.Gtk3; -using Avalonia.Platform; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: ExportWindowingSubsystem(OperatingSystemType.WinNT, 2, "GTK3", typeof(Gtk3Platform), nameof(Gtk3Platform.Initialize))] -[assembly: ExportWindowingSubsystem(OperatingSystemType.Linux, 1, "GTK3", typeof(Gtk3Platform), nameof(Gtk3Platform.Initialize))] -[assembly: ExportWindowingSubsystem(OperatingSystemType.OSX, 2, "GTK3", typeof(Gtk3Platform), nameof(Gtk3Platform.Initialize))] \ No newline at end of file diff --git a/src/Gtk/Avalonia.Gtk3/README.md b/src/Gtk/Avalonia.Gtk3/README.md deleted file mode 100644 index ea853bde75..0000000000 --- a/src/Gtk/Avalonia.Gtk3/README.md +++ /dev/null @@ -1,8 +0,0 @@ -P/Invoke based GTK3 backend -=========================== - -Code is EXPERIMENTAL at this point. It also needs Direct2D/Skia for rendering. - -Windows GTK3 binaries aren't included in the repo, you need to download them from https://sourceforge.net/projects/gtk3win/ - -On Linux it should work out of the box with system-provided GTK3. On OSX you should be able to wire GTK3 using DYLD_LIBRARY_PATH environment variable. \ No newline at end of file diff --git a/src/Gtk/Avalonia.Gtk3/ScreenImpl.cs b/src/Gtk/Avalonia.Gtk3/ScreenImpl.cs deleted file mode 100644 index 2cb8a6b127..0000000000 --- a/src/Gtk/Avalonia.Gtk3/ScreenImpl.cs +++ /dev/null @@ -1,56 +0,0 @@ -using System; -using System.Collections.Generic; -using Avalonia.Gtk3.Interop; -using Avalonia.Platform; - -namespace Avalonia.Gtk3 -{ - internal class ScreenImpl : IScreenImpl - { - public int ScreenCount - { - get => _allScreens.Length; - } - - private Screen[] _allScreens; - public IReadOnlyList AllScreens - { - get - { - if (_allScreens == null) - { - IntPtr display = Native.GdkGetDefaultDisplay(); - GdkScreen screen = Native.GdkDisplayGetDefaultScreen(display); - short primary = Native.GdkScreenGetPrimaryMonitor(screen); - Screen[] screens = new Screen[Native.GdkScreenGetNMonitors(screen)]; - for (short i = 0; i < screens.Length; i++) - { - GdkRectangle workArea = new GdkRectangle(), geometry = new GdkRectangle(); - Native.GdkScreenGetMonitorGeometry(screen, i, ref geometry); - Native.GdkScreenGetMonitorWorkarea(screen, i, ref workArea); - PixelRect workAreaRect = new PixelRect(workArea.X, workArea.Y, workArea.Width, workArea.Height); - PixelRect geometryRect = new PixelRect(geometry.X, geometry.Y, geometry.Width, geometry.Height); - GtkScreen s = new GtkScreen(geometryRect, workAreaRect, i == primary, i); - screens[i] = s; - } - - _allScreens = screens; - } - - return _allScreens; - } - } - - public ScreenImpl() - { - IntPtr display = Native.GdkGetDefaultDisplay(); - GdkScreen screen = Native.GdkDisplayGetDefaultScreen(display); - Signal.Connect(screen, "monitors-changed", MonitorsChanged); - } - - private unsafe void MonitorsChanged(IntPtr screen, IntPtr userData) - { - _allScreens = null; - } - } -} diff --git a/src/Gtk/Avalonia.Gtk3/SystemDialogs.cs b/src/Gtk/Avalonia.Gtk3/SystemDialogs.cs deleted file mode 100644 index 1e85eaa156..0000000000 --- a/src/Gtk/Avalonia.Gtk3/SystemDialogs.cs +++ /dev/null @@ -1,110 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Threading.Tasks; -using Avalonia.Controls; -using Avalonia.Controls.Platform; -using Avalonia.Gtk3.Interop; -using Avalonia.Platform; -using Avalonia.Platform.Interop; - -namespace Avalonia.Gtk3 -{ - class SystemDialogBase - { - - public unsafe static Task ShowDialog(string title, GtkWindow parent, GtkFileChooserAction action, - bool multiselect, string initialFileName, Action modify) - { - GtkFileChooser dlg; - parent = parent ?? GtkWindow.Null; - using (var name = new Utf8Buffer(title)) - dlg = Native.GtkFileChooserDialogNew(name, parent, action, IntPtr.Zero); - modify?.Invoke(dlg); - if (multiselect) - Native.GtkFileChooserSetSelectMultiple(dlg, true); - - Native.GtkWindowSetModal(dlg, true); - var tcs = new TaskCompletionSource(); - List disposables = null; - Action dispose = () => - { - // ReSharper disable once PossibleNullReferenceException - foreach (var d in disposables) - d.Dispose(); - disposables.Clear(); - }; - disposables = new List - { - Signal.Connect(dlg, "close", delegate - { - tcs.TrySetResult(null); - dispose(); - return false; - }), - Signal.Connect(dlg, "response", (_, resp, __) => - { - string[] result = null; - if (resp == GtkResponseType.Accept) - { - var rlst = new List(); - var gs = Native.GtkFileChooserGetFilenames(dlg); - var cgs = gs; - while (cgs != null) - { - if (cgs->Data != IntPtr.Zero) - rlst.Add(Utf8Buffer.StringFromPtr(cgs->Data)); - cgs = cgs->Next; - } - - Native.GSlistFree(gs); - result = rlst.ToArray(); - } - - Native.GtkWidgetHide(dlg); - dispose(); - tcs.TrySetResult(result); - return false; - }), - dlg - }; - using (var open = new Utf8Buffer("Open")) - Native.GtkDialogAddButton(dlg, open, GtkResponseType.Accept); - using (var open = new Utf8Buffer("Cancel")) - Native.GtkDialogAddButton(dlg, open, GtkResponseType.Cancel); - if (initialFileName != null) - using (var fn = new Utf8Buffer(initialFileName)) - Native.GtkFileChooserSetFilename(dlg, fn); - Native.GtkWindowPresent(dlg); - return tcs.Task; - } - - public Task ShowFileDialogAsync(FileDialog dialog, GtkWindow parent, - Action modify = null) - { - return ShowDialog(dialog.Title, parent, - dialog is OpenFileDialog ? GtkFileChooserAction.Open : GtkFileChooserAction.Save, - (dialog as OpenFileDialog)?.AllowMultiple ?? false, - Path.Combine(string.IsNullOrEmpty(dialog.InitialDirectory) ? "" : dialog.InitialDirectory, - string.IsNullOrEmpty(dialog.InitialFileName) ? "" : dialog.InitialFileName), modify); - } - - public async Task ShowFolderDialogAsync(OpenFolderDialog dialog, GtkWindow parent, - Action modify = null) - { - var res = await ShowDialog(dialog.Title, parent, - GtkFileChooserAction.SelectFolder, false, dialog.InitialDirectory, modify); - return res?.FirstOrDefault(); - } - } - - class SystemDialog : SystemDialogBase, ISystemDialogImpl - { - public Task ShowFolderDialogAsync(OpenFolderDialog dialog, IWindowImpl parent) - => ShowFolderDialogAsync(dialog, ((WindowBaseImpl)parent)?.GtkWidget); - - public Task ShowFileDialogAsync(FileDialog dialog, IWindowImpl parent) - => ShowFileDialogAsync(dialog, ((WindowBaseImpl)parent)?.GtkWidget); - } -} diff --git a/src/Gtk/Avalonia.Gtk3/WindowBaseImpl.cs b/src/Gtk/Avalonia.Gtk3/WindowBaseImpl.cs deleted file mode 100644 index bff50a979d..0000000000 --- a/src/Gtk/Avalonia.Gtk3/WindowBaseImpl.cs +++ /dev/null @@ -1,527 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Runtime.InteropServices; -using System.Threading; -using Avalonia.Controls; -using Avalonia.Gtk3.Interop; -using Avalonia.Input; -using Avalonia.Input.Raw; -using Avalonia.OpenGL; -using Avalonia.Platform; -using Avalonia.Platform.Interop; -using Avalonia.Rendering; -using Avalonia.Threading; - -namespace Avalonia.Gtk3 -{ - abstract class WindowBaseImpl : IWindowBaseImpl, IPlatformHandle, EglGlPlatformSurface.IEglWindowGlPlatformSurfaceInfo - { - public readonly GtkWindow GtkWidget; - private IInputRoot _inputRoot; - private readonly GtkImContext _imContext; - private readonly FramebufferManager _framebuffer; - private readonly EglGlPlatformSurface _egl; - protected readonly List Disposables = new List(); - private Size _lastSize; - private PixelPoint _lastPosition; - private double _lastScaling; - private uint _lastKbdEvent; - private uint _lastSmoothScrollEvent; - private GCHandle _gcHandle; - private object _lock = new object(); - private IDeferredRenderOperation _nextRenderOperation; - private readonly AutoResetEvent _canSetNextOperation = new AutoResetEvent(true); - internal IntPtr? GdkWindowHandle; - private bool _overrideRedirect; - private uint? _tickCallback; - public WindowBaseImpl(GtkWindow gtkWidget) - { - - GtkWidget = gtkWidget; - - var glf = AvaloniaLocator.Current.GetService() as EglGlPlatformFeature; - if (glf != null) - _egl = new EglGlPlatformSurface((EglDisplay)glf.Display, glf.DeferredContext, this); - else - _framebuffer = new FramebufferManager(this); - - _imContext = Native.GtkImMulticontextNew(); - Disposables.Add(_imContext); - Native.GtkWidgetSetEvents(gtkWidget, 0xFFFFFE); - Disposables.Add(Signal.Connect(_imContext, "commit", OnCommit)); - Connect("draw", OnDraw); - Connect("realize", OnRealized); - ConnectEvent("configure-event", OnConfigured); - ConnectEvent("button-press-event", OnButton); - ConnectEvent("button-release-event", OnButton); - ConnectEvent("motion-notify-event", OnMotion); - ConnectEvent("scroll-event", OnScroll); - ConnectEvent("window-state-event", OnStateChanged); - ConnectEvent("key-press-event", OnKeyEvent); - ConnectEvent("key-release-event", OnKeyEvent); - ConnectEvent("leave-notify-event", OnLeaveNotifyEvent); - ConnectEvent("delete-event", OnClosingEvent); - Connect("destroy", OnDestroy); - Native.GtkWidgetRealize(gtkWidget); - GdkWindowHandle = this.Handle.Handle; - _lastSize = ClientSize; - - if (_egl != null) - Native.GtkWidgetSetDoubleBuffered(gtkWidget, false); - else if (Gtk3Platform.UseDeferredRendering) - { - Native.GtkWidgetSetDoubleBuffered(gtkWidget, false); - _gcHandle = GCHandle.Alloc(this); - _tickCallback = Native.GtkWidgetAddTickCallback(GtkWidget, PinnedStaticCallback, - GCHandle.ToIntPtr(_gcHandle), IntPtr.Zero); - } - } - - private bool OnConfigured(IntPtr gtkwidget, IntPtr ev, IntPtr userdata) - { - int w, h; - if (!OverrideRedirect) - { - Native.GtkWindowGetSize(GtkWidget, out w, out h); - var size = ClientSize = new Size(w, h); - if (_lastSize != size) - { - Resized?.Invoke(size); - _lastSize = size; - } - } - var pos = Position; - if (_lastPosition != pos) - { - PositionChanged?.Invoke(pos); - _lastPosition = pos; - } - var scaling = Scaling; - if (_lastScaling != scaling) - { - ScalingChanged?.Invoke(scaling); - _lastScaling = scaling; - } - return false; - } - - private bool OnRealized(IntPtr gtkwidget, IntPtr userdata) - { - Native.GtkImContextSetClientWindow(_imContext, Native.GtkWidgetGetWindow(GtkWidget)); - return false; - } - - private bool OnDestroy(IntPtr gtkwidget, IntPtr userdata) - { - DoDispose(true); - return false; - } - - private static InputModifiers GetModifierKeys(GdkModifierType state) - { - var rv = InputModifiers.None; - if (state.HasFlag(GdkModifierType.ControlMask)) - rv |= InputModifiers.Control; - if (state.HasFlag(GdkModifierType.ShiftMask)) - rv |= InputModifiers.Shift; - if (state.HasFlag(GdkModifierType.Mod1Mask)) - rv |= InputModifiers.Alt; - if (state.HasFlag(GdkModifierType.Button1Mask)) - rv |= InputModifiers.LeftMouseButton; - if (state.HasFlag(GdkModifierType.Button2Mask)) - rv |= InputModifiers.RightMouseButton; - if (state.HasFlag(GdkModifierType.Button3Mask)) - rv |= InputModifiers.MiddleMouseButton; - return rv; - } - - private unsafe bool OnClosingEvent(IntPtr w, IntPtr ev, IntPtr userdata) - { - bool? preventClosing = Closing?.Invoke(); - return preventClosing ?? false; - } - - private unsafe bool OnButton(IntPtr w, IntPtr ev, IntPtr userdata) - { - var evnt = (GdkEventButton*)ev; - var e = new RawPointerEventArgs( - Gtk3Platform.Mouse, - evnt->time, - _inputRoot, - evnt->type == GdkEventType.ButtonRelease - ? evnt->button == 1 - ? RawPointerEventType.LeftButtonUp - : evnt->button == 3 ? RawPointerEventType.RightButtonUp : RawPointerEventType.MiddleButtonUp - : evnt->button == 1 - ? RawPointerEventType.LeftButtonDown - : evnt->button == 3 ? RawPointerEventType.RightButtonDown : RawPointerEventType.MiddleButtonDown, - new Point(evnt->x, evnt->y), GetModifierKeys(evnt->state)); - OnInput(e); - return true; - } - - protected virtual unsafe bool OnStateChanged(IntPtr w, IntPtr pev, IntPtr userData) - { - var ev = (GdkEventWindowState*) pev; - if (ev->changed_mask.HasFlag(GdkWindowState.Focused)) - { - if(ev->new_window_state.HasFlag(GdkWindowState.Focused)) - Activated?.Invoke(); - else - Deactivated?.Invoke(); - } - return true; - } - - private unsafe bool OnMotion(IntPtr w, IntPtr ev, IntPtr userdata) - { - var evnt = (GdkEventMotion*)ev; - var position = new Point(evnt->x, evnt->y); - Native.GdkEventRequestMotions(ev); - var e = new RawPointerEventArgs( - Gtk3Platform.Mouse, - evnt->time, - _inputRoot, - RawPointerEventType.Move, - position, GetModifierKeys(evnt->state)); - OnInput(e); - - return true; - } - private unsafe bool OnScroll(IntPtr w, IntPtr ev, IntPtr userdata) - { - var evnt = (GdkEventScroll*)ev; - - //Ignore duplicates - if (evnt->time - _lastSmoothScrollEvent < 10 && evnt->direction != GdkScrollDirection.Smooth) - return true; - - var delta = new Vector(); - const double step = (double) 1; - if (evnt->direction == GdkScrollDirection.Down) - delta = new Vector(0, -step); - else if (evnt->direction == GdkScrollDirection.Up) - delta = new Vector(0, step); - else if (evnt->direction == GdkScrollDirection.Right) - delta = new Vector(-step, 0); - else if (evnt->direction == GdkScrollDirection.Left) - delta = new Vector(step, 0); - else if (evnt->direction == GdkScrollDirection.Smooth) - { - delta = new Vector(-evnt->delta_x, -evnt->delta_y); - _lastSmoothScrollEvent = evnt->time; - } - var e = new RawMouseWheelEventArgs(Gtk3Platform.Mouse, evnt->time, _inputRoot, - new Point(evnt->x, evnt->y), delta, GetModifierKeys(evnt->state)); - OnInput(e); - return true; - } - - private unsafe bool OnKeyEvent(IntPtr w, IntPtr pev, IntPtr userData) - { - var evnt = (GdkEventKey*) pev; - _lastKbdEvent = evnt->time; - var e = new RawKeyEventArgs( - Gtk3Platform.Keyboard, - evnt->time, - evnt->type == GdkEventType.KeyPress ? RawKeyEventType.KeyDown : RawKeyEventType.KeyUp, - Avalonia.Gtk.Common.KeyTransform.ConvertKey((GdkKey)evnt->keyval), GetModifierKeys((GdkModifierType)evnt->state)); - OnInput(e); - if (Native.GtkImContextFilterKeypress(_imContext, pev)) - return true; - return true; - } - - private unsafe bool OnLeaveNotifyEvent(IntPtr w, IntPtr pev, IntPtr userData) - { - var evnt = (GdkEventCrossing*) pev; - var position = new Point(evnt->x, evnt->y); - OnInput(new RawPointerEventArgs(Gtk3Platform.Mouse, - evnt->time, - _inputRoot, - RawPointerEventType.Move, - position, GetModifierKeys(evnt->state))); - return true; - } - - private unsafe bool OnCommit(IntPtr gtkwidget, IntPtr utf8string, IntPtr userdata) - { - OnInput(new RawTextInputEventArgs(Gtk3Platform.Keyboard, _lastKbdEvent, Utf8Buffer.StringFromPtr(utf8string))); - return true; - } - - protected void ConnectEvent(string name, Native.D.signal_onevent handler) - => Disposables.Add(Signal.Connect(GtkWidget, name, handler)); - void Connect(string name, T handler) => Disposables.Add(Signal.Connect(GtkWidget, name, handler)); - - internal IntPtr CurrentCairoContext { get; private set; } - - private bool OnDraw(IntPtr gtkwidget, IntPtr cairocontext, IntPtr userdata) - { - if (!Gtk3Platform.UseDeferredRendering) - { - CurrentCairoContext = cairocontext; - Paint?.Invoke(new Rect(ClientSize)); - CurrentCairoContext = IntPtr.Zero; - } - else - Paint?.Invoke(new Rect(ClientSize)); - return true; - } - - private static Native.D.TickCallback PinnedStaticCallback = StaticTickCallback; - - static bool StaticTickCallback(IntPtr widget, IntPtr clock, IntPtr userData) - { - var impl = (WindowBaseImpl) GCHandle.FromIntPtr(userData).Target; - impl.OnRenderTick(); - return true; - } - - public void SetNextRenderOperation(IDeferredRenderOperation op) - { - while (true) - { - lock (_lock) - { - if (_nextRenderOperation == null) - { - _nextRenderOperation = op; - return; - } - } - _canSetNextOperation.WaitOne(); - } - - } - - private void OnRenderTick() - { - IDeferredRenderOperation op = null; - lock (_lock) - { - if (_nextRenderOperation != null) - { - op = _nextRenderOperation; - _nextRenderOperation = null; - } - _canSetNextOperation.Set(); - } - if (op != null) - { - op?.RenderNow(null); - op?.Dispose(); - } - } - - - public void Dispose() => DoDispose(false); - - void DoDispose(bool fromDestroy) - { - if (_tickCallback.HasValue) - { - if (!GtkWidget.IsClosed) - Native.GtkWidgetRemoveTickCallback(GtkWidget, _tickCallback.Value); - _tickCallback = null; - } - - //We are calling it here, since signal handler will be detached - if (!GtkWidget.IsClosed) - Closed?.Invoke(); - foreach(var d in Disposables.AsEnumerable().Reverse()) - d.Dispose(); - Disposables.Clear(); - - if (!fromDestroy && !GtkWidget.IsClosed) - Native.GtkWindowClose(GtkWidget); - GtkWidget.Dispose(); - - if (_gcHandle.IsAllocated) - { - _gcHandle.Free(); - } - } - - public Size MaxClientSize - { - get - { - var s = Native.GtkWidgetGetScreen(GtkWidget); - return new Size(Native.GdkScreenGetWidth(s), Native.GdkScreenGetHeight(s)); - } - } - - public void SetMinMaxSize(Size minSize, Size maxSize) - { - if (GtkWidget.IsClosed) - return; - - GdkGeometry geometry = new GdkGeometry(); - geometry.min_width = minSize.Width > 0 ? (int)minSize.Width : -1; - geometry.min_height = minSize.Height > 0 ? (int)minSize.Height : -1; - geometry.max_width = !Double.IsInfinity(maxSize.Width) && maxSize.Width > 0 ? (int)maxSize.Width : 999999; - geometry.max_height = !Double.IsInfinity(maxSize.Height) && maxSize.Height > 0 ? (int)maxSize.Height : 999999; - - Native.GtkWindowSetGeometryHints(GtkWidget, IntPtr.Zero, ref geometry, GdkWindowHints.GDK_HINT_MIN_SIZE | GdkWindowHints.GDK_HINT_MAX_SIZE); - } - - public IMouseDevice MouseDevice => Gtk3Platform.Mouse; - - public double Scaling => LastKnownScaleFactor = (int) (Native.GtkWidgetGetScaleFactor?.Invoke(GtkWidget) ?? 1); - - public IPlatformHandle Handle => this; - - string IPlatformHandle.HandleDescriptor => "HWND"; - - public Action Activated { get; set; } - public Func Closing { get; set; } - public Action Closed { get; set; } - public Action Deactivated { get; set; } - public Action Input { get; set; } - public Action Paint { get; set; } - public Action Resized { get; set; } - public Action ScalingChanged { get; set; } //TODO - public Action PositionChanged { get; set; } - - public void Activate() => Native.GtkWidgetActivate(GtkWidget); - - public void Invalidate(Rect rect) - { - if(GtkWidget.IsClosed) - return; - var s = ClientSize; - Native.GtkWidgetQueueDrawArea(GtkWidget, 0, 0, (int) s.Width, (int) s.Height); - } - - public void SetInputRoot(IInputRoot inputRoot) => _inputRoot = inputRoot; - - void OnInput(RawInputEventArgs args) - { - Dispatcher.UIThread.Post(() => Input?.Invoke(args), DispatcherPriority.Input); - } - - public Point PointToClient(PixelPoint point) - { - int x, y; - Native.GdkWindowGetOrigin(Native.GtkWidgetGetWindow(GtkWidget), out x, out y); - - return new Point(point.X - x, point.Y - y); - } - - public PixelPoint PointToScreen(Point point) - { - int x, y; - Native.GdkWindowGetOrigin(Native.GtkWidgetGetWindow(GtkWidget), out x, out y); - return new PixelPoint((int)(point.X + x), (int)(point.Y + y)); - } - - public void SetCursor(IPlatformHandle cursor) - { - if (GtkWidget.IsClosed) - return; - Native.GdkWindowSetCursor(Native.GtkWidgetGetWindow(GtkWidget), cursor?.Handle ?? IntPtr.Zero); - } - - public virtual void Show() => Native.GtkWindowPresent(GtkWidget); - - public void Hide() => Native.GtkWidgetHide(GtkWidget); - - public void SetTopmost(bool value) => Native.GtkWindowSetKeepAbove(GtkWidget, value); - - void GetGlobalPointer(out int x, out int y) - { - int mask; - Native.GdkWindowGetPointer(Native.GdkScreenGetRootWindow(Native.GtkWidgetGetScreen(GtkWidget)), - out x, out y, out mask); - } - - public void BeginMoveDrag() - { - int x, y; - GetGlobalPointer(out x, out y); - Native.GdkWindowBeginMoveDrag(Native.GtkWidgetGetWindow(GtkWidget), 1, x, y, 0); - } - - public void BeginResizeDrag(WindowEdge edge) - { - int x, y; - GetGlobalPointer(out x, out y); - Native.GdkWindowBeginResizeDrag(Native.GtkWidgetGetWindow(GtkWidget), edge, 1, x, y, 0); - } - - - public Size ClientSize { get; private set; } - public int LastKnownScaleFactor { get; private set; } - - public void Resize(Size value) - { - if (GtkWidget.IsClosed) - return; - - Native.GtkWindowResize(GtkWidget, (int)value.Width, (int)value.Height); - if (OverrideRedirect) - { - var size = ClientSize = value; - if (_lastSize != size) - { - Resized?.Invoke(size); - _lastSize = size; - } - } - } - - public bool OverrideRedirect - { - get => _overrideRedirect; - set - { - if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) - { - Native.GdkWindowSetOverrideRedirect(Native.GtkWidgetGetWindow(GtkWidget), value); - _overrideRedirect = value; - } - } - } - - public IScreenImpl Screen - { - get; - } = new ScreenImpl(); - - public PixelPoint Position - { - get - { - int x, y; - Native.GtkWindowGetPosition(GtkWidget, out x, out y); - return new PixelPoint(x, y); - } - set { Native.GtkWindowMove(GtkWidget, (int)value.X, (int)value.Y); } - } - - IntPtr IPlatformHandle.Handle => Native.GetNativeGdkWindowHandle(Native.GtkWidgetGetWindow(GtkWidget)); - public IEnumerable Surfaces => new object[] {Handle, _egl, _framebuffer}; - - public IRenderer CreateRenderer(IRenderRoot root) - { - var loop = AvaloniaLocator.Current.GetService(); - return Gtk3Platform.UseDeferredRendering - ? (IRenderer) new DeferredRenderer(root, loop) - : new ImmediateRenderer(root); - } - - PixelSize EglGlPlatformSurface.IEglWindowGlPlatformSurfaceInfo.Size - { - get - { - var cs = ClientSize; - return new PixelSize((int)Math.Max(1, LastKnownScaleFactor * cs.Width), - (int)Math.Max(1, LastKnownScaleFactor * ClientSize.Height)); - } - } - double EglGlPlatformSurface.IEglWindowGlPlatformSurfaceInfo.Scaling => LastKnownScaleFactor; - IntPtr EglGlPlatformSurface.IEglWindowGlPlatformSurfaceInfo.Handle => Handle.Handle; - } -} diff --git a/src/Gtk/Avalonia.Gtk3/WindowImpl.cs b/src/Gtk/Avalonia.Gtk3/WindowImpl.cs deleted file mode 100644 index 1c8d800f2f..0000000000 --- a/src/Gtk/Avalonia.Gtk3/WindowImpl.cs +++ /dev/null @@ -1,102 +0,0 @@ -using System; -using Avalonia.Controls; -using Avalonia.Gtk3.Interop; -using Avalonia.Platform; -using Avalonia.Platform.Interop; - -namespace Avalonia.Gtk3 -{ - class WindowImpl : WindowBaseImpl, IWindowImpl - { - private WindowState _lastWindowState; - - public WindowImpl() : base(Native.GtkWindowNew(GtkWindowType.TopLevel)) - { - } - - protected unsafe override bool OnStateChanged(IntPtr w, IntPtr pev, IntPtr userData) - { - var windowStateEvent = (GdkEventWindowState*)pev; - var newWindowState = windowStateEvent->new_window_state; - var windowState = newWindowState.HasFlag(GdkWindowState.Iconified) ? WindowState.Minimized - : (newWindowState.HasFlag(GdkWindowState.Maximized) ? WindowState.Maximized : WindowState.Normal); - - if (windowState != _lastWindowState) - { - _lastWindowState = windowState; - WindowStateChanged?.Invoke(windowState); - } - - return base.OnStateChanged(w, pev, userData); - } - - public void SetTitle(string title) - { - using (var t = new Utf8Buffer(title)) - Native.GtkWindowSetTitle(GtkWidget, t); - } - - public WindowState WindowState - { - get - { - var state = Native.GdkWindowGetState(Native.GtkWidgetGetWindow(GtkWidget)); - if (state.HasFlag(GdkWindowState.Iconified)) - return WindowState.Minimized; - if (state.HasFlag(GdkWindowState.Maximized)) - return WindowState.Maximized; - return WindowState.Normal; - } - set - { - if (value == WindowState.Minimized) - Native.GtkWindowIconify(GtkWidget); - else if (value == WindowState.Maximized) - Native.GtkWindowMaximize(GtkWidget); - else - { - Native.GtkWindowUnmaximize(GtkWidget); - Native.GtkWindowDeiconify(GtkWidget); - } - } - } - - public Action WindowStateChanged { get; set; } - - public void ShowDialog(IWindowImpl parent) - { - Native.GtkWindowSetModal(GtkWidget, true); - Native.GtkWindowSetTransientFor(GtkWidget, ((WindowImpl)parent).GtkWidget.DangerousGetHandle()); - Native.GtkWindowPresent(GtkWidget); - } - - public override void Show() - { - Native.GtkWindowSetModal(GtkWidget, false); - Native.GtkWindowSetTransientFor(GtkWidget, IntPtr.Zero); - Native.GtkWindowPresent(GtkWidget); - } - - public void SetSystemDecorations(bool enabled) => Native.GtkWindowSetDecorated(GtkWidget, enabled); - - public void SetIcon(IWindowIconImpl icon) => Native.GtkWindowSetIcon(GtkWidget, (Pixbuf) icon); - - public void SetCoverTaskbarWhenMaximized(bool enable) - { - //Why do we even have that? - } - - public void ShowTaskbarIcon(bool value) => Native.GtkWindowSetSkipTaskbarHint(GtkWidget, !value); - - public void CanResize(bool value) => Native.GtkWindowSetResizable(GtkWidget, value); - - - class EmptyDisposable : IDisposable - { - public void Dispose() - { - - } - } - } -} diff --git a/src/Gtk/Avalonia.Gtk3/X11.cs b/src/Gtk/Avalonia.Gtk3/X11.cs deleted file mode 100644 index 4677114bdb..0000000000 --- a/src/Gtk/Avalonia.Gtk3/X11.cs +++ /dev/null @@ -1,78 +0,0 @@ -using System; -using System.Runtime.InteropServices; - -namespace Avalonia.Gtk3 -{ - class X11 - { - [DllImport("libX11.so.6")] - public static extern IntPtr XInitThreads(); - - [DllImport("libX11.so.6")] - public static extern IntPtr XOpenDisplay(IntPtr name); - - [DllImport("libX11.so.6")] - public static extern IntPtr XLockDisplay(IntPtr display); - - [DllImport("libX11.so.6")] - public static extern IntPtr XUnlockDisplay(IntPtr display); - - [DllImport("libX11.so.6")] - public static extern IntPtr XFreeGC(IntPtr display, IntPtr gc); - - [DllImport("libX11.so.6")] - public static extern IntPtr XCreateGC(IntPtr display, IntPtr drawable, ulong valuemask, IntPtr values); - - [DllImport("libX11.so.6")] - public static extern int XInitImage(ref XImage image); - - [DllImport("libX11.so.6")] - public static extern int XDestroyImage(ref XImage image); - - [DllImport("libX11.so.6")] - public static extern IntPtr XSetErrorHandler(XErrorHandler handler); - - [DllImport("libX11.so.6")] - public static extern int XSync(IntPtr display, bool discard); - - public delegate int XErrorHandler(IntPtr display, ref XErrorEvent error); - - [DllImport("libX11.so.6")] - public static extern int XPutImage(IntPtr display, IntPtr drawable, IntPtr gc, ref XImage image, - int srcx, int srcy, int destx, int desty, uint width, uint height); - - [StructLayout(LayoutKind.Sequential)] - public unsafe struct XErrorEvent - { - public int type; - public IntPtr* display; /* Display the event was read from */ - public ulong serial; /* serial number of failed request */ - public byte error_code; /* error code of failed request */ - public byte request_code; /* Major op-code of failed request */ - public byte minor_code; /* Minor op-code of failed request */ - public IntPtr resourceid; /* resource id */ - } - - [StructLayout(LayoutKind.Sequential)] - public unsafe struct XImage - { - public int width, height; /* size of image */ - public int xoffset; /* number of pixels offset in X direction */ - public int format; /* XYBitmap, XYPixmap, ZPixmap */ - public IntPtr data; /* pointer to image data */ - public int byte_order; /* data byte order, LSBFirst, MSBFirst */ - public int bitmap_unit; /* quant. of scanline 8, 16, 32 */ - public int bitmap_bit_order; /* LSBFirst, MSBFirst */ - public int bitmap_pad; /* 8, 16, 32 either XY or ZPixmap */ - public int depth; /* depth of image */ - public int bytes_per_line; /* accelerator to next scanline */ - public int bits_per_pixel; /* bits per pixel (ZPixmap) */ - public ulong red_mask; /* bits in z arrangement */ - public ulong green_mask; - public ulong blue_mask; - private fixed byte funcs[128]; - } - - - } -} \ No newline at end of file diff --git a/src/Gtk/Avalonia.Gtk3/X11Framebuffer.cs b/src/Gtk/Avalonia.Gtk3/X11Framebuffer.cs deleted file mode 100644 index c84d7c7541..0000000000 --- a/src/Gtk/Avalonia.Gtk3/X11Framebuffer.cs +++ /dev/null @@ -1,55 +0,0 @@ -using System; -using Avalonia.Platform; - -namespace Avalonia.Gtk3 -{ - class X11Framebuffer : ILockedFramebuffer - { - private readonly IntPtr _display; - private readonly IntPtr _xid; - private IUnmanagedBlob _blob; - - public X11Framebuffer(IntPtr display, IntPtr xid, int width, int height, int factor) - { - _display = display; - _xid = xid; - Size = new PixelSize(width * factor, height * factor); - RowBytes = Size.Width * 4; - Dpi = new Vector(96, 96) * factor; - Format = PixelFormat.Bgra8888; - _blob = AvaloniaLocator.Current.GetService().AllocBlob(RowBytes * Size.Height); - Address = _blob.Address; - } - - public void Dispose() - { - var image = new X11.XImage(); - int bitsPerPixel = 32; - image.width = Size.Width; - image.height = Size.Height; - image.format = 2; //ZPixmap; - image.data = Address; - image.byte_order = 0;// LSBFirst; - image.bitmap_unit = bitsPerPixel; - image.bitmap_bit_order = 0;// LSBFirst; - image.bitmap_pad = bitsPerPixel; - image.depth = 24; - image.bytes_per_line = RowBytes - Size.Width * 4; - image.bits_per_pixel = bitsPerPixel; - X11.XLockDisplay(_display); - X11.XInitImage(ref image); - var gc = X11.XCreateGC(_display, _xid, 0, IntPtr.Zero); - X11.XPutImage(_display, _xid, gc, ref image, 0, 0, 0, 0, (uint)Size.Width, (uint)Size.Height); - X11.XFreeGC(_display, gc); - X11.XSync(_display, true); - X11.XUnlockDisplay(_display); - _blob.Dispose(); - } - - public IntPtr Address { get; } - public PixelSize Size { get; } - public int RowBytes { get; } - public Vector Dpi { get; } - public PixelFormat Format { get; } - } -}