a575963da9
Former-commit-id: da6be194a6b1221998fc28233f2503bd61dd9d14
1221 lines
35 KiB
C#
1221 lines
35 KiB
C#
// 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 pbartok@novell.com
|
|
|
|
// 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 System.Windows.Forms {
|
|
internal class XplatUI {
|
|
#region Local Variables
|
|
static XplatUIDriver driver;
|
|
// static String default_class_name;
|
|
internal static ArrayList key_filters = new ArrayList ();
|
|
#endregion // Local Variables
|
|
|
|
#region Private Methods
|
|
internal static string Window (IntPtr handle)
|
|
{
|
|
return String.Format ("'{0}' ({1:X})", Control.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 ();
|
|
|
|
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 ();
|
|
}
|
|
#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 ();
|
|
}
|
|
|
|
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);
|
|
}
|
|
}
|