diff options
| author | MichaelTheShifter <[email protected]> | 2016-07-20 09:40:36 -0400 |
|---|---|---|
| committer | MichaelTheShifter <[email protected]> | 2016-07-20 09:40:36 -0400 |
| commit | d40fed5ce2bc806a91245adb18039634eac13ed0 (patch) | |
| tree | f1d7168aee6db109ac2c738ad18c9db667a6ba69 /source/ShiftUI/Internal/XplatUI.cs | |
| parent | f1856e8ed30ed882229fd3fa2a4038122a5fb441 (diff) | |
| download | shiftos-c--d40fed5ce2bc806a91245adb18039634eac13ed0.tar.gz shiftos-c--d40fed5ce2bc806a91245adb18039634eac13ed0.tar.bz2 shiftos-c--d40fed5ce2bc806a91245adb18039634eac13ed0.zip | |
Move ShiftUI source code to ShiftOS
This'll be a lot easier to work on.
Diffstat (limited to 'source/ShiftUI/Internal/XplatUI.cs')
| -rw-r--r-- | source/ShiftUI/Internal/XplatUI.cs | 1235 |
1 files changed, 1235 insertions, 0 deletions
diff --git a/source/ShiftUI/Internal/XplatUI.cs b/source/ShiftUI/Internal/XplatUI.cs new file mode 100644 index 0000000..afa3ddb --- /dev/null +++ b/source/ShiftUI/Internal/XplatUI.cs @@ -0,0 +1,1235 @@ +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +// Copyright (c) 2004-2006 Novell, Inc. +// +// Authors: +// Peter Bartok [email protected] + +// NOT COMPLETE + +// define to log API calls to stdout +#undef DriverDebug +#undef DriverDebugPaint +#undef DriverDebugCreate +#undef DriverDebugDestroy +#undef DriverDebugState + +using System; +using System.Drawing; +using System.ComponentModel; +using System.Collections; +using System.Diagnostics; +using System.Runtime.InteropServices; +using System.Threading; + +namespace ShiftUI { + internal class XplatUI { + #region Local Variables + static XplatUIDriver driver; + //static String default_class_name; + internal static ArrayList key_filters = new ArrayList (); + #endregion // Local Variables + + public static string DefaultClassName { + get { return GetDefaultClassName(); } + } + + #region Private Methods + internal static string Window (IntPtr handle) + { + return String.Format ("'{0}' ({1:X})", Widget.FromHandle (handle), handle.ToInt32 ()); + } + + [Conditional ("DriverDebug")] + static void DriverDebug (string format, params object [] args) + { + Console.WriteLine (String.Format (format, args)); + } + + #endregion // Private Methods + + #region Subclasses + public class State { + static public Keys ModifierKeys { + get { + return driver.ModifierKeys; + } + } + + static public MouseButtons MouseButtons { + get { + return driver.MouseButtons; + } + } + + static public Point MousePosition { + get { + return driver.MousePosition; + } + } + + } + #endregion // Subclasses + + #region Constructor & Destructor + static XplatUI () + { + // Compose name with current domain id because on Win32 we register class name + // and name must be unique to process. If we load MWF into multiple appdomains + // and try to register same class name we fail. + //default_class_name = "SWFClass" + System.Threading.Thread.GetDomainID ().ToString (); + try { + if (RunningOnUnix) { + //if (Environment.GetEnvironmentVariable ("not_supported_MONO_MWF_USE_NEW_X11_BACKEND") != null) { + // driver=XplatUIX11_new.GetInstance (); + //} else + if (Environment.GetEnvironmentVariable ("MONO_MWF_MAC_FORCE_X11") != null) { + driver = XplatUIX11.GetInstance (); + } else { + IntPtr buf = Marshal.AllocHGlobal (8192); + // This is a hacktastic way of getting sysname from uname () + if (uname (buf) != 0) { + // WTF: We cannot run uname + driver=XplatUIX11.GetInstance (); + } else { + string os = Marshal.PtrToStringAnsi (buf); + if (os == "Darwin") + driver=XplatUICarbon.GetInstance (); + else + driver=XplatUIX11.GetInstance (); + } + Marshal.FreeHGlobal (buf); + } + } else { + driver=XplatUIWin32.GetInstance (); + } + + driver.InitializeDriver (); + + // Initialize things that need to be done after the driver is ready + DataFormats.GetFormat (0); + + // Signal that the Application loop can be run. + // This allows UIA to initialize a11y support for MWF + // before the main loop begins. + Application.FirePreRun (); + } + catch (Exception ex) { + Console.WriteLine ("[ShiftUI/XplatUI] Driver init error: {0}", ex.Message); + } + } + #endregion // Constructor & Destructor + + #region Public Static Properties + + public static bool RunningOnUnix { + get { + int p = (int) Environment.OSVersion.Platform; + + return (p == 4 || p == 6 || p == 128); + } + } + + public static int ActiveWindowTrackingDelay { + get { return driver.ActiveWindowTrackingDelay; } + } + + // Compose name with current domain id because on Win32 we register class name + // and name must be unique to process. If we load MWF into multiple appdomains + // and try to register same class name we fail. + internal static string GetDefaultClassName (Type type) + { + return "SWFClass" + Thread.GetDomainID ().ToString () + "." + type.ToString (); + } + + // Generate a class name using current domain and a random number. + internal static string GetDefaultClassName () + { + return "SWFClass" + Thread.GetDomainID ().ToString () + "." + new Random().Next(0, 9999999).ToString(); + } + + + static public Size Border3DSize { + get { + return driver.Border3DSize; + } + } + + static public Size BorderSize { + get { + return driver.BorderSize; + } + } + + static public Size CaptionButtonSize { + get { + return driver.CaptionButtonSize; + } + } + + static public int CaptionHeight { + get { + return driver.CaptionHeight; + } + } + + public static int CaretBlinkTime { get { return driver.CaretBlinkTime; } } + public static int CaretWidth { get { return driver.CaretWidth; } } + + static public Size CursorSize { + get { + return driver.CursorSize; + } + } + + static public Size DoubleClickSize { + get { + return driver.DoubleClickSize; + } + } + + static public int DoubleClickTime { + get { + return driver.DoubleClickTime; + } + } + + static public bool DragFullWindows { + get { + return driver.DragFullWindows; + } + } + + static public Size DragSize { + get { + return driver.DragSize; + } + } + + static public Size FixedFrameBorderSize { + get { + return driver.FixedFrameBorderSize; + } + } + + public static int FontSmoothingContrast { get { return driver.FontSmoothingContrast; } } + public static int FontSmoothingType { get { return driver.FontSmoothingType; } } + + public static Size FrameBorderSize { + get { + return driver.FrameBorderSize; + } + } + + public static int HorizontalResizeBorderThickness { get { return driver.HorizontalResizeBorderThickness; } } + + static public int HorizontalScrollBarHeight { + get { + return driver.HorizontalScrollBarHeight; + } + } + + static public Size IconSize { + get { + return driver.IconSize; + } + } + + public static bool IsActiveWindowTrackingEnabled { get { return driver.IsActiveWindowTrackingEnabled; } } + public static bool IsComboBoxAnimationEnabled { get { return driver.IsComboBoxAnimationEnabled; } } + public static bool IsDropShadowEnabled { get { return driver.IsDropShadowEnabled; } } + public static bool IsFontSmoothingEnabled { get { return driver.IsFontSmoothingEnabled; } } + public static bool IsHotTrackingEnabled { get { return driver.IsHotTrackingEnabled; } } + public static bool IsIconTitleWrappingEnabled { get { return driver.IsIconTitleWrappingEnabled; } } + public static bool IsKeyboardPreferred { get { return driver.IsKeyboardPreferred; } } + public static bool IsListBoxSmoothScrollingEnabled { get { return driver.IsListBoxSmoothScrollingEnabled; } } + public static bool IsMenuAnimationEnabled { get { return driver.IsMenuAnimationEnabled; } } + public static bool IsMenuFadeEnabled { get { return driver.IsMenuFadeEnabled; } } + public static bool IsMinimizeRestoreAnimationEnabled { get { return driver.IsMinimizeRestoreAnimationEnabled; } } + public static bool IsSelectionFadeEnabled { get { return driver.IsSelectionFadeEnabled; } } + public static bool IsSnapToDefaultEnabled { get { return driver.IsSnapToDefaultEnabled; } } + public static bool IsTitleBarGradientEnabled { get { return driver.IsTitleBarGradientEnabled; } } + public static bool IsToolTipAnimationEnabled { get { return driver.IsToolTipAnimationEnabled; } } + + static public int KeyboardSpeed { + get { + return driver.KeyboardSpeed; + } + } + + static public int KeyboardDelay { + get { + return driver.KeyboardDelay; + } + } + + static public Size MaxWindowTrackSize { + get { + return driver.MaxWindowTrackSize; + } + } + + static public bool MenuAccessKeysUnderlined { + get { + return driver.MenuAccessKeysUnderlined; + } + } + + static public Size MenuBarButtonSize { get { return driver.MenuBarButtonSize; } } + + public static Size MenuButtonSize { + get { + return driver.MenuButtonSize; + } + } + + static public int MenuShowDelay { get { return driver.MenuShowDelay; } } + + static public Size MinimizedWindowSize { + get { + return driver.MinimizedWindowSize; + } + } + + static public Size MinimizedWindowSpacingSize { + get { + return driver.MinimizedWindowSpacingSize; + } + } + + static public Size MinimumWindowSize { + get { + return driver.MinimumWindowSize; + } + } + + static public Size MinimumFixedToolWindowSize { + get { return driver.MinimumFixedToolWindowSize; } + } + + static public Size MinimumSizeableToolWindowSize { + get { return driver.MinimumSizeableToolWindowSize; } + } + + static public Size MinimumNoBorderWindowSize { + get { return driver.MinimumNoBorderWindowSize; } + } + + static public Size MinWindowTrackSize { + get { + return driver.MinWindowTrackSize; + } + } + + public static int MouseSpeed { + get { return driver.MouseSpeed; } + } + + static public Size SmallIconSize { + get { + return driver.SmallIconSize; + } + } + + static public int MenuHeight { + get { + return driver.MenuHeight; + } + } + + static public int MouseButtonCount { + get { + return driver.MouseButtonCount; + } + } + + static public bool MouseButtonsSwapped { + get { + return driver.MouseButtonsSwapped; + } + } + + static public Size MouseHoverSize { + get { + return driver.MouseHoverSize; + } + } + + static public int MouseHoverTime { + get { + return driver.MouseHoverTime; + } + } + + static public int MouseWheelScrollDelta { + get { + return driver.MouseWheelScrollDelta; + } + } + + static public bool MouseWheelPresent { + get { + return driver.MouseWheelPresent; + } + } + + public static LeftRightAlignment PopupMenuAlignment { + get { return driver.PopupMenuAlignment; } + } + + public static PowerStatus PowerStatus { + get { return driver.PowerStatus; } + } + + public static bool RequiresPositiveClientAreaSize { + get { + return driver.RequiresPositiveClientAreaSize; + } + } + + public static int SizingBorderWidth { + get { return driver.SizingBorderWidth; } + } + + public static Size SmallCaptionButtonSize { + get { return driver.SmallCaptionButtonSize; } + } + + public static bool UIEffectsEnabled { + get { return driver.UIEffectsEnabled; } + } + + static public bool UserClipWontExposeParent { + get { + return driver.UserClipWontExposeParent; + } + } + + public static int VerticalResizeBorderThickness { get { return driver.VerticalResizeBorderThickness; } } + + static public int VerticalScrollBarWidth { + get { + return driver.VerticalScrollBarWidth; + } + } + + static public Rectangle VirtualScreen { + get { + return driver.VirtualScreen; + } + } + + static public Rectangle WorkingArea { + get { + return driver.WorkingArea; + } + } + + public static Screen[] AllScreens { + get { + return driver.AllScreens; + } + } + + public static bool ThemesEnabled { + get { + return XplatUI.driver.ThemesEnabled; + } + } + + public static int ToolWindowCaptionHeight { + get { + return driver.ToolWindowCaptionHeight; + } + } + + public static Size ToolWindowCaptionButtonSize { + get { + return driver.ToolWindowCaptionButtonSize; + } + } + #endregion // Public Static Properties + + #region Events + + internal static event EventHandler Idle { + add { + driver.Idle += value; + } + remove { + driver.Idle -= value; + } + } + + #endregion // Events + + #region Public Static Methods + internal static void Activate (IntPtr handle) + { + DriverDebug ("Activate ({0}): Called", Window (handle)); + driver.Activate (handle); + } + + internal static void AudibleAlert (AlertType alert) + { + DriverDebug ("AudibleAlert (): Called"); + driver.AudibleAlert (alert); + } + + internal static void BeginMoveResize (IntPtr handle) + { + driver.BeginMoveResize (handle); + } + + internal static bool CalculateWindowRect (ref Rectangle ClientRect, CreateParams cp, Menu menu, out Rectangle WindowRect) + { + DriverDebug ("CalculateWindowRect ({0}, {1}, {2}): Called", ClientRect, cp, menu); + return driver.CalculateWindowRect (ref ClientRect, cp, menu, out WindowRect); + } + + internal static void CaretVisible (IntPtr handle, bool visible) + { + DriverDebug ("CaretVisible ({0:X}, {1}): Called", handle.ToInt32 (), visible); + driver.CaretVisible (handle, visible); + } + + internal static void CreateCaret (IntPtr handle, int width, int height) + { + DriverDebug ("CreateCaret ({0:X}), {1}, {2}: Called", handle.ToInt32 (), width, height); + driver.CreateCaret (handle, width, height); + } + + internal static IntPtr CreateWindow (CreateParams cp) + { + #if DriverDebug || DriverDebugCreate + IntPtr handle; + + handle = driver.CreateWindow (cp); + + Console.WriteLine ("CreateWindow (): Called, returning {0:X}", handle.ToInt32 ()); + return handle; + #else + return driver.CreateWindow (cp); + #endif + } + + internal static IntPtr CreateWindow (IntPtr Parent, int X, int Y, int Width, int Height) + { + #if DriverDebug || DriverDebugCreate + Console.WriteLine ("CreateWindow (): Called"); + #endif + return driver.CreateWindow (Parent, X, Y, Width, Height); + } + + internal static void ClientToScreen (IntPtr handle, ref int x, ref int y) + { + #if DriverDebug + Console.WriteLine ("ClientToScreen ({0}, {1}, {2}): Called", Window (handle), x, y); + #endif + driver.ClientToScreen (handle, ref x, ref y); + } + + internal static int[] ClipboardAvailableFormats (IntPtr handle) + { + DriverDebug ("ClipboardAvailableTypes ({0:X}): Called", handle.ToInt32 ()); + return driver.ClipboardAvailableFormats (handle); + } + + internal static void ClipboardClose (IntPtr handle) + { + DriverDebug ("ClipboardClose ({0:X}): Called", handle.ToInt32 ()); + driver.ClipboardClose (handle); + } + + internal static int ClipboardGetID (IntPtr handle, string format) + { + DriverDebug ("ClipboardGetID ({0:X}, {1}): Called", handle.ToInt32 (), format); + return driver.ClipboardGetID (handle, format); + } + + internal static IntPtr ClipboardOpen (bool primary_selection) + { + DriverDebug ("ClipboardOpen (): Called"); + return driver.ClipboardOpen (primary_selection); + } + + internal static void ClipboardStore (IntPtr handle, object obj, int type, XplatUI.ObjectToClipboard converter, bool copy) + { + DriverDebug ("ClipboardStore ({0:X}, {1}, {2}, {3}, {4}): Called", handle.ToInt32 (), obj, type, converter, copy); + driver.ClipboardStore (handle, obj, type, converter, copy); + } + + internal static object ClipboardRetrieve (IntPtr handle, int type, XplatUI.ClipboardToObject converter) + { + DriverDebug ("ClipboardRetrieve ({0:X}, type, {1}): Called", handle.ToInt32 (), converter); + return driver.ClipboardRetrieve (handle, type, converter); + } + + internal static IntPtr DefineCursor (Bitmap bitmap, Bitmap mask, Color cursor_pixel, Color mask_pixel, int xHotSpot, int yHotSpot) + { + DriverDebug ("DefineCursor (...): Called"); + return driver.DefineCursor (bitmap, mask, cursor_pixel, mask_pixel, xHotSpot, yHotSpot); + } + + internal static IntPtr DefineStdCursor (StdCursor id) + { + return driver.DefineStdCursor (id); + } + + internal static Bitmap DefineStdCursorBitmap (StdCursor id) + { + return driver.DefineStdCursorBitmap (id); + } + + internal static IntPtr DefWndProc (ref Message msg) + { + return driver.DefWndProc (ref msg); + } + + internal static void DestroyCaret (IntPtr handle) + { + DriverDebug ("DestroyCaret ({0:X}): Called", handle.ToInt32 ()); + driver.DestroyCaret (handle); + } + + internal static void DestroyCursor (IntPtr cursor) + { + DriverDebug ("DestroyCursor ({0:X}): Called", cursor.ToInt32 ()); + driver.DestroyCursor (cursor); + } + + internal static void DestroyWindow (IntPtr handle) + { + DriverDebug ("DestroyWindow ({0}): Called", Window (handle)); + driver.DestroyWindow (handle); + } + + internal static IntPtr DispatchMessage (ref MSG msg) + { + return driver.DispatchMessage (ref msg); + } + + internal static void DoEvents () + { + driver.DoEvents (); + } + + internal static void DrawReversibleRectangle (IntPtr handle, Rectangle rect, int line_width) + { + DriverDebug ("DrawReversibleRectangle ({0}, {1}, {2}): Called", Window (handle), rect, line_width); + driver.DrawReversibleRectangle (handle, rect, line_width); + } + + internal static void FillReversibleRectangle (Rectangle rectangle, Color backColor) + { + DriverDebug ("FillReversibleRectangle ({0}, {1}): Called", rectangle, backColor); + driver.FillReversibleRectangle (rectangle, backColor); + } + + internal static void DrawReversibleFrame (Rectangle rectangle, Color backColor, FrameStyle style) + { + DriverDebug ("DrawReversibleFrame ({0}, {1}, {2}): Called", rectangle, backColor, style); + driver.DrawReversibleFrame (rectangle, backColor, style); + } + + internal static void DrawReversibleLine (Point start, Point end, Color backColor) + { + DriverDebug ("DrawReversibleLine ({0}, {1}, {2}): Called", start, end, backColor); + driver.DrawReversibleLine (start, end, backColor); + } + + internal static void EnableThemes () + { + driver.EnableThemes (); + } + + internal static void EnableWindow (IntPtr handle, bool Enable) + { + DriverDebug ("EnableWindow ({0}, {1}): Called", Window (handle), Enable); + driver.EnableWindow (handle, Enable); + } + + internal static void EndLoop (Thread thread) + { + DriverDebug ("EndLoop ({0:X}): Called", thread.GetHashCode ()); + driver.EndLoop (thread); + } + + internal static IntPtr GetActive () + { + DriverDebug ("GetActive (): Called"); + return driver.GetActive (); + } + + internal static SizeF GetAutoScaleSize (Font font) + { + DriverDebug ("GetAutoScaleSize ({0}): Called", font); + return driver.GetAutoScaleSize (font); + } + + internal static Region GetClipRegion (IntPtr handle) + { + DriverDebug ("GetClipRegion ({0}): Called", Window (handle)); + return driver.GetClipRegion (handle); + } + + internal static void GetCursorInfo (IntPtr cursor, out int width, out int height, out int hotspot_x, out int hotspot_y) + { + DriverDebug ("GetCursorInfo ({0}): Called", cursor.ToInt32 ()); + driver.GetCursorInfo (cursor, out width, out height, out hotspot_x, out hotspot_y); + } + + internal static void GetCursorPos (IntPtr handle, out int x, out int y) + { + DriverDebug ("GetCursorPos ({0}): Called", Window (handle)); + driver.GetCursorPos (handle, out x, out y); + } + + internal static void GetDisplaySize (out Size size) + { + DriverDebug ("GetDisplaySize (): Called"); + driver.GetDisplaySize (out size); + } + + internal static IntPtr GetFocus () + { + DriverDebug ("GetFocus (): Called, Result:{0}", Window (driver.GetFocus ())); + return driver.GetFocus (); + } + + internal static bool GetFontMetrics (Graphics g, Font font, out int ascent, out int descent) + { + DriverDebug ("GetFontMetrics (): Called"); + return driver.GetFontMetrics (g, font, out ascent, out descent); + } + + internal static Point GetMenuOrigin (IntPtr handle) + { + DriverDebug ("GetMenuOrigin ({0}): Called", Window (handle)); + return driver.GetMenuOrigin (handle); + } + + internal static bool GetMessage (object queue_id, ref MSG msg, IntPtr hWnd, int wFilterMin, int wFilterMax) + { + return driver.GetMessage (queue_id, ref msg, hWnd, wFilterMin, wFilterMax); + } + + internal static IntPtr GetParent (IntPtr handle) + { + DriverDebug ("GetParent ({0}): Called", Window (handle)); + return driver.GetParent (handle); + } + + internal static IntPtr GetPreviousWindow (IntPtr handle) + { + return driver.GetPreviousWindow (handle); + } + + internal static bool GetText (IntPtr handle, out string text) + { + DriverDebug ("GetText ({0}): Called", Window (handle)); + return driver.GetText (handle, out text); + } + + internal static void GetWindowPos (IntPtr handle, bool is_toplevel, out int x, out int y, out int width, out int height, out int client_width, out int client_height) + { + DriverDebug ("GetWindowPos ({0}): Called", Window (handle)); + driver.GetWindowPos (handle, is_toplevel, out x, out y, out width, out height, out client_width, out client_height); + } + + /* this method can (and does, on X11) return + * (FormWindowState) (-1), when the state of the window + * cannot be determined (in the X11 case, when the + * window isn't mapped.) Checking for the additional + * return value is less expensive than + * throwing/catching an exception. */ + internal static FormWindowState GetWindowState (IntPtr handle) + { + DriverDebug ("GetWindowState ({0}): Called", Window (handle)); + return driver.GetWindowState (handle); + } + + internal static void GrabInfo (out IntPtr handle, out bool GrabConfined, out Rectangle GrabArea) + { + DriverDebug ("GrabInfo (): Called"); + driver.GrabInfo (out handle, out GrabConfined, out GrabArea); + } + + internal static void GrabWindow (IntPtr handle, IntPtr ConfineToHwnd) + { + DriverDebug ("GrabWindow ({0}, {1}): Called", Window (handle), Window (ConfineToHwnd)); + driver.GrabWindow (handle, ConfineToHwnd); + } + + internal static void HandleException (Exception e) + { + driver.HandleException (e); + } + + internal static void Invalidate (IntPtr handle, Rectangle rc, bool clear) + { + DriverDebug ("Invalidate ({0}, {1}, {2}): Called", Window (handle), rc, clear); + driver.Invalidate (handle, rc, clear); + } + + internal static void InvalidateNC (IntPtr handle) + { + DriverDebug ("InvalidateNC ({0}): Called", Window (handle)); + driver.InvalidateNC (handle); + } + + + internal static bool IsEnabled (IntPtr handle) + { + #if DriverDebug || DriverDebugState + Console.WriteLine ("IsEnabled ({0}): Called, Result={1}", Window (handle), driver.IsEnabled (handle)); + #endif + return driver.IsEnabled (handle); + } + + internal static bool IsKeyLocked (VirtualKeys key) + { + #if DriverDebug || DriverDebugState + Console.WriteLine ("IsKeyLocked ({0}): Called, Result={1}", key, driver.IsKeyLocked (key)); + #endif + return driver.IsKeyLocked (key); + } + + internal static bool IsVisible (IntPtr handle) + { + #if DriverDebug || DriverDebugState + Console.WriteLine ("IsVisible ({0}): Called, Result={1}", Window (handle), driver.IsVisible (handle)); + #endif + return driver.IsVisible (handle); + } + + internal static void KillTimer (Timer timer) + { + DriverDebug ("KillTimer ({0}): Called", timer); + driver.KillTimer (timer); + } + + internal static void MenuToScreen (IntPtr handle, ref int x, ref int y) + { + DriverDebug ("MenuToScreen ({0}, {1}, {2}): Called", Window (handle), x, y); + driver.MenuToScreen (handle, ref x, ref y); + } + + internal static void OverrideCursor (IntPtr cursor) + { + DriverDebug ("OverrideCursor ({0:X}): Called", cursor.ToInt32 ()); + driver.OverrideCursor (cursor); + } + + internal static void PaintEventEnd (ref Message msg, IntPtr handle, bool client) + { + #if DriverDebug || DriverDebugPaint + Console.WriteLine ("PaintEventEnd ({0}, {1}, {2}): Called from thread {3}", msg, Window (handle), client, Thread.CurrentThread.GetHashCode ()); + #endif + driver.PaintEventEnd (ref msg, handle, client); + } + + internal static PaintEventArgs PaintEventStart (ref Message msg, IntPtr handle, bool client) + { + #if DriverDebug || DriverDebugPaint + Console.WriteLine ("PaintEventStart ({0}, {1}, {2}): Called from thread {3}", msg, Window (handle), client, Thread.CurrentThread.GetHashCode ()); + #endif + return driver.PaintEventStart (ref msg, handle, client); + } + + internal static bool PeekMessage (Object queue_id, ref MSG msg, IntPtr hWnd, int wFilterMin, int wFilterMax, uint flags) + { + return driver.PeekMessage (queue_id, ref msg, hWnd, wFilterMin, wFilterMax, flags); + } + + internal static bool PostMessage (IntPtr hwnd, Msg message, IntPtr wParam, IntPtr lParam) + { + DriverDebug ("PostMessage ({0}, {1}, {2:X}, {3:X}): Called", Window (hwnd), message, wParam.ToInt32 (), lParam.ToInt32 ()); + return driver.PostMessage (hwnd, message, wParam, lParam); + } + + internal static bool PostMessage (ref MSG msg) + { + DriverDebug ("PostMessage ({0}): Called", msg); + return driver.PostMessage (msg.hwnd, msg.message, msg.wParam, msg.lParam); + } + + internal static void PostQuitMessage (int exitCode) + { + DriverDebug ("PostQuitMessage ({0}): Called", exitCode); + driver.PostQuitMessage (exitCode); + } + + internal static void RaiseIdle (EventArgs e) + { + DriverDebug ("RaiseIdle ({0}): Called", e.ToString ()); + + driver.RaiseIdle (e); + } + + internal static void RequestAdditionalWM_NCMessages (IntPtr handle, bool hover, bool leave) + { + DriverDebug ("RequestAdditionalWM_NCMessages ({0}, {1}, {2}): Called", Window (handle), hover, leave); + driver.RequestAdditionalWM_NCMessages (handle, hover, leave); + } + + internal static void RequestNCRecalc (IntPtr handle) + { + DriverDebug ("RequestNCRecalc ({0}): Called", Window (handle)); + driver.RequestNCRecalc (handle); + } + + internal static void ResetMouseHover (IntPtr handle) + { + DriverDebug ("ResetMouseHover ({0}): Called", Window (handle)); + driver.ResetMouseHover (handle); + } + + internal static void ScreenToClient (IntPtr handle, ref int x, ref int y) + { + DriverDebug ("ScreenToClient ({0}, {1}, {2}): Called", Window (handle), x, y); + driver.ScreenToClient (handle, ref x, ref y); + } + + internal static void ScreenToMenu (IntPtr handle, ref int x, ref int y) + { + DriverDebug ("ScreenToMenu ({0}, {1}, {2}): Called", Window (handle), x, y); + driver.ScreenToMenu (handle, ref x, ref y); + } + + internal static void ScrollWindow (IntPtr handle, Rectangle rectangle, int XAmount, int YAmount, bool with_children) + { + DriverDebug ("ScrollWindow ({0}, {1}, {2}, {3}, {4}): Called", Window (handle), rectangle, XAmount, YAmount, with_children); + driver.ScrollWindow (handle, rectangle, XAmount, YAmount, with_children); + } + + internal static void ScrollWindow (IntPtr handle, int XAmount, int YAmount, bool with_children) + { + DriverDebug ("ScrollWindow ({0}, {1}, {2}, {3}): Called", Window (handle), XAmount, YAmount, with_children); + driver.ScrollWindow (handle, XAmount, YAmount, with_children); + } + + internal static void SendAsyncMethod (AsyncMethodData data) + { + DriverDebug ("SendAsyncMethod ({0}): Called", data); + driver.SendAsyncMethod (data); + } + + internal static int SendInput (IntPtr hwnd, Queue keys) + { + DriverDebug ("SendInput ({0}, {1}): Called", hwnd, keys); + return driver.SendInput (hwnd, keys); + } + + internal static IntPtr SendMessage (IntPtr handle, Msg message, IntPtr wParam, IntPtr lParam) + { + DriverDebug ("SendMessage ({0}, {1}, {2:X}, {3:X}): Called", Window (handle), message, wParam.ToInt32 (), lParam.ToInt32 ()); + return driver.SendMessage (handle, message, wParam, lParam); + } + + internal static void SendMessage (ref Message m) + { + DriverDebug ("SendMessage ({0}): Called", m); + m.Result = driver.SendMessage (m.HWnd, (Msg)m.Msg, m.WParam, m.LParam); + } + + internal static void SetAllowDrop (IntPtr handle, bool value) + { + DriverDebug ("SetAllowDrop ({0}, {1}): Called", handle, value); + driver.SetAllowDrop (handle, value); + } + + internal static void SetBorderStyle (IntPtr handle, FormBorderStyle border_style) + { + DriverDebug ("SetBorderStyle ({0}, {1}): Called", Window (handle), border_style); + driver.SetBorderStyle (handle, border_style); + } + + internal static void SetCaretPos (IntPtr handle, int x, int y) + { + DriverDebug ("SetCaretPos ({0}, {1}, {2}): Called", Window (handle), x, y); + driver.SetCaretPos (handle, x, y); + } + + internal static void SetClipRegion (IntPtr handle, Region region) + { + DriverDebug ("SetClipRegion ({0}, {1}): Called", Window (handle), region); + driver.SetClipRegion (handle, region); + } + + internal static void SetCursor (IntPtr handle, IntPtr cursor) + { + DriverDebug ("SetCursor ({0}, {1:X}): Called", Window (handle), cursor.ToInt32 ()); + driver.SetCursor (handle, cursor); + } + + internal static void SetCursorPos (IntPtr handle, int x, int y) + { + DriverDebug ("SetCursorPos ({0}, {1}, {2}): Called", Window (handle), x, y); + driver.SetCursorPos (handle, x, y); + } + + internal static void SetFocus (IntPtr handle) + { + DriverDebug ("SetFocus ({0}): Called", Window (handle)); + driver.SetFocus (handle); + } + + internal static void SetForegroundWindow (IntPtr handle) + { + DriverDebug ("SetForegroundWindow ({0}): Called", Window (handle)); + driver.SetForegroundWindow (handle); + } + + internal static void SetIcon (IntPtr handle, Icon icon) + { + DriverDebug ("SetIcon ({0}, {1}): Called", Window (handle), icon); + driver.SetIcon (handle, icon); + } + + internal static void SetMenu (IntPtr handle, Menu menu) + { + DriverDebug ("SetMenu ({0}, {1}): Called", Window (handle), menu); + driver.SetMenu (handle, menu); + } + + internal static void SetModal (IntPtr handle, bool Modal) + { + DriverDebug ("SetModal ({0}, {1}): Called", Window (handle), Modal); + driver.SetModal (handle, Modal); + } + + internal static IntPtr SetParent (IntPtr handle, IntPtr hParent) + { + DriverDebug ("SetParent ({0}, {1:X}): Called", Window (handle), Window (hParent)); + return driver.SetParent (handle, hParent); + } + + internal static void SetTimer (Timer timer) + { + DriverDebug ("SetTimer ({0}): Called", timer); + driver.SetTimer (timer); + } + + internal static bool SetTopmost (IntPtr handle, bool Enabled) + { + DriverDebug ("SetTopMost ({0}, {1}): Called", Window (handle), Enabled); + return driver.SetTopmost (handle, Enabled); + } + + internal static bool SetOwner (IntPtr handle, IntPtr hWndOwner) + { + DriverDebug ("SetOwner ({0}, {1}): Called", Window (handle), Window (hWndOwner)); + return driver.SetOwner (handle, hWndOwner); + } + + internal static bool SetVisible (IntPtr handle, bool visible, bool activate) + { + #if DriverDebug || DriverDebugState + Console.WriteLine ("SetVisible ({0}, {1}, {2}): Called", Window (handle), visible, activate); + #endif + return driver.SetVisible (handle, visible, activate); + } + + internal static void SetWindowMinMax (IntPtr handle, Rectangle maximized, Size min, Size max) + { + #if DriverDebug || DriverDebugState + Console.WriteLine ("SetWindowMinMax ({0}, {1}, {2}, {3}): Called", Window (handle), maximized, min, max); + #endif + driver.SetWindowMinMax (handle, maximized, min, max); + } + + internal static void SetWindowPos (IntPtr handle, int x, int y, int width, int height) + { + DriverDebug ("SetWindowPos ({0}, {1}, {2}, {3}, {4}): Called", Window (handle), x, y, width, height); + driver.SetWindowPos (handle, x, y, width, height); + } + + internal static void SetWindowState (IntPtr handle, FormWindowState state) + { + #if DriverDebug || DriverDebugState + Console.WriteLine ("SetWindowState ({0} {1}): Called", Window (handle), state); + #endif + driver.SetWindowState (handle, state); + } + + internal static void SetWindowStyle (IntPtr handle, CreateParams cp) + { + DriverDebug ("SetWindowStyle ({0}): Called", Window (handle)); + driver.SetWindowStyle (handle, cp); + } + + internal static double GetWindowTransparency (IntPtr handle) + { + DriverDebug ("SetWindowTransparency ({0}): Called", Window (handle)); + return driver.GetWindowTransparency (handle); + } + + internal static void SetWindowTransparency (IntPtr handle, double transparency, Color key) + { + DriverDebug ("SetWindowTransparency ({0}): Called", Window (handle)); + driver.SetWindowTransparency (handle, transparency, key); + } + + internal static bool SetZOrder (IntPtr handle, IntPtr AfterhWnd, bool Top, bool Bottom) + { + DriverDebug ("SetZOrder ({0}, {1:X}, {2}, {3}): Called", Window (handle), Window (AfterhWnd), Top, Bottom); + return driver.SetZOrder (handle, AfterhWnd, Top, Bottom); + } + + internal static void ShowCursor (bool show) + { + DriverDebug ("ShowCursor ({0}): Called", show); + driver.ShowCursor (show); + } + + internal static DragDropEffects StartDrag (IntPtr handle, object data, DragDropEffects allowedEffects) + { + DriverDebug ("StartDrag ({0}, {1}, {2}): Called", Window (handle), data, allowedEffects); + return driver.StartDrag (handle, data, allowedEffects); + } + + internal static object StartLoop (Thread thread) + { + DriverDebug ("StartLoop ({0:X}): Called", thread.GetHashCode ()); + return driver.StartLoop (thread); + } + + internal static TransparencySupport SupportsTransparency () + { + DriverDebug ("SupportsTransparency (): Called, result={0}", driver.SupportsTransparency ()); + return driver.SupportsTransparency (); + } + + internal static bool SystrayAdd (IntPtr handle, string tip, Icon icon, out ToolTip tt) + { + DriverDebug ("SystrayAdd ({0}, {1}): Called", Window (handle), tip); + return driver.SystrayAdd (handle, tip, icon, out tt); + } + + internal static void SystrayChange (IntPtr handle, string tip, Icon icon, ref ToolTip tt) + { + DriverDebug ("SystrayChange ({0}, {1}): Called", Window (handle), tip); + driver.SystrayChange (handle, tip, icon, ref tt); + } + + internal static void SystrayRemove (IntPtr handle, ref ToolTip tt) + { + DriverDebug ("SystrayRemove ({0}): Called", Window (handle)); + driver.SystrayRemove (handle, ref tt); + } + + internal static void SystrayBalloon (IntPtr handle, int timeout, string title, string text, ToolTipIcon icon) + { + DriverDebug ("SystrayBalloon ({0}, {1}, {2}, {3}, {4}): Called", Window (handle), timeout, title, text, icon); + driver.SystrayBalloon (handle, timeout, title, text, icon); + } + + internal static bool Text (IntPtr handle, string text) + { + DriverDebug ("Text ({0}, {1}): Called", Window (handle), text); + return driver.Text (handle, text); + } + + internal static bool TranslateMessage (ref MSG msg) + { + return driver.TranslateMessage (ref msg); + } + + internal static void UngrabWindow (IntPtr handle) + { + DriverDebug ("UngrabWindow ({0}): Called", Window (handle)); + driver.UngrabWindow (handle); + } + + internal static void UpdateWindow (IntPtr handle) + { + DriverDebug ("UpdateWindow ({0}): Called", Window (handle)); + driver.UpdateWindow (handle); + } + + // double buffering + internal static void CreateOffscreenDrawable (IntPtr handle, + int width, int height, + out object offscreen_drawable) + { + DriverDebug ("CreateOffscreenDrawable ({2}, {0},{1}): Called", width, height, Window (handle)); + driver.CreateOffscreenDrawable (handle, width, height, + out offscreen_drawable); + } + + internal static void DestroyOffscreenDrawable (object offscreen_drawable) + { + DriverDebug ("DestroyOffscreenDrawable (): Called"); + driver.DestroyOffscreenDrawable (offscreen_drawable); + } + + internal static Graphics GetOffscreenGraphics (object offscreen_drawable) + { + DriverDebug ("GetOffscreenGraphics (): Called"); + return driver.GetOffscreenGraphics (offscreen_drawable); + } + + internal static void BlitFromOffscreen (IntPtr dest_handle, + Graphics dest_dc, + object offscreen_drawable, + Graphics offscreen_dc, + Rectangle r) + { + DriverDebug ("BlitFromOffscreen ({0}): Called", Window (dest_handle)); + driver.BlitFromOffscreen (dest_handle, dest_dc, offscreen_drawable, offscreen_dc, r); + } + + + // Santa's little helper + internal static void Version () + { + Console.WriteLine ("Xplat version $Revision: $"); + } + + internal static void AddKeyFilter (IKeyFilter value) + { + lock (key_filters) { + key_filters.Add (value); + } + } + + internal static bool FilterKey (KeyFilterData key) + { + lock (key_filters) { + for (int i = 0; i < key_filters.Count; i++) { + IKeyFilter filter = (IKeyFilter) key_filters[i]; + if (filter.PreFilterKey (key)) + return true; + } + } + return false; + } + #endregion // Public Static Methods + + #region Delegates + public delegate bool ClipboardToObject (int type, IntPtr data, out object obj); + public delegate bool ObjectToClipboard (ref int type, object obj, out byte[] data); + #endregion // Delegates + + [DllImport ("libc")] + static extern int uname (IntPtr buf); + } +} |
