/Graphics/OpenTK/WindowInfoHelper.cs
C# | 246 lines | 124 code | 26 blank | 96 comment | 2 complexity | 735609d10cbfe2762f511e1bae191698 MD5 | raw file
Possible License(s): Apache-2.0
- using System;
- using System.Reflection;
- using System.Runtime.InteropServices;
- using OpenTK.Graphics;
- using OpenTK.Platform;
- using OpenTK.Platform.X11;
- using OpenTKUtilities = OpenTK.Platform.Utilities;
-
- namespace Delta.Graphics.OpenTK
- {
- /// <summary>
- /// Window info helper
- /// </summary>
- public class WindowInfoHelper
- {
- #region XVisualInfo Struct
- /// <summary>
- /// XVisual info
- /// </summary>
- [StructLayout(LayoutKind.Sequential)]
- internal struct XVisualInfo
- {
- #region Visual (Public)
- /// <summary>
- /// Visual
- /// </summary>
- public IntPtr Visual;
- #endregion
-
- #region VisualID (Public)
- /// <summary>
- /// Visual ID
- /// </summary>
- public IntPtr VisualID;
- #endregion
-
- #region Screen (Public)
- /// <summary>
- /// Screen
- /// </summary>
- public int Screen;
- #endregion
-
- #region Depth (Public)
- /// <summary>
- /// Depth
- /// </summary>
- public int Depth;
- #endregion
-
- #region Class (Public)
- /// <summary>
- /// Class
- /// </summary>
- public XVisualClass Class;
- #endregion
-
- #region RedMask (Public)
- /// <summary>
- /// Red mask
- /// </summary>
- public long RedMask;
- #endregion
-
- #region GreenMask (Public)
- /// <summary>
- /// Green mask
- /// </summary>
- public long GreenMask;
- #endregion
-
- #region blueMask (Public)
- /// <summary>
- /// Blue mask
- /// </summary>
- public long blueMask;
- #endregion
-
- #region ColormapSize (Public)
- /// <summary>
- /// Colormap size
- /// </summary>
- public int ColormapSize;
- #endregion
-
- #region BitsPerRgb (Public)
- /// <summary>
- /// Bits per RGB
- /// </summary>
- public int BitsPerRgb;
- #endregion
-
- #region ToString (Public)
- /// <summary>
- /// To string
- /// </summary>
- public override string ToString()
- {
- return "id (" + VisualID + "), " + "screen (" + Screen + "), " +
- "depth (" + Depth + "), " + "class (" + Class + ")";
- }
- #endregion
- }
- #endregion
-
- #region Create (Static)
- /// <summary>
- /// Create
- /// </summary>
- /// <param name="windowHandle">The window handle.</param>
- /// <returns></returns>
- public static IWindowInfo Create(IntPtr windowHandle)
- {
- return OpenTKUtilities.CreateWindowsWindowInfo(windowHandle);
- }
- #endregion
-
- #region CreateX11 (Static)
- /// <summary>
- /// Create X11
- /// </summary>
- /// <param name="mode">The mode.</param>
- /// <param name="windowHandle">The window handle.</param>
- /// <returns></returns>
- public static IWindowInfo CreateX11(GraphicsMode mode, IntPtr windowHandle)
- {
- Type type = Type.GetType("System.Windows.Forms.XplatUIX11, " +
- "System.Windows.Forms");
- if (type == null)
- {
- throw new PlatformNotSupportedException(
- "System.Windows.Forms.XplatUIX11 is missing. " +
- "Unsupported platform or Mono runtime version, aborting.");
- }
-
- return null;
- }
- #endregion
-
- #region Methods (Private)
-
- #region XOpenDisplay
- /// <summary>
- /// XOpenDisplay
- /// </summary>
- /// <param name="display"></param>
- /// <returns></returns>
- [DllImport("libX11", EntryPoint = "XOpenDisplay")]
- private static extern IntPtr XOpenDisplay(IntPtr display);
- #endregion
-
- #region XLockDisplay
- /// <summary>
- /// XLockDisplay
- /// </summary>
- /// <param name="display"></param>
- [DllImport("libX11")]
- private static extern void XLockDisplay(IntPtr display);
- #endregion
-
- #region XUnlockDisplay
- /// <summary>
- /// XUnlockDisplay
- /// </summary>
- /// <param name="display"></param>
- [DllImport("libX11")]
- private static extern void XUnlockDisplay(IntPtr display);
- #endregion
-
- #region XDefaultScreen
- /// <summary>
- /// XDefaultScreen
- /// </summary>
- /// <param name="display"></param>
- /// <returns></returns>
- [DllImport("libX11")]
- private static extern int XDefaultScreen(IntPtr display);
- #endregion
-
- #region XRootWindow
- /// <summary>
- /// XRoot window
- /// </summary>
- /// <param name="display"></param>
- /// <param name="screen_number"></param>
- /// <returns></returns>
- [DllImport("libX11")]
- private static extern IntPtr XRootWindow(IntPtr display,
- int screen_number);
- #endregion
-
- #region XGetVisualInfo
- /// <summary>
- /// XGet visual info
- /// </summary>
- /// <param name="display"></param>
- /// <param name="vinfoMask"></param>
- /// <param name="template"></param>
- /// <param name="nitems"></param>
- /// <returns></returns>
- [DllImport("libX11", EntryPoint = "XGetVisualInfo")]
- private static extern IntPtr XGetVisualInfo(IntPtr display,
- IntPtr vinfoMask, ref XVisualInfo template, out int nitems);
- #endregion
-
- #region XCreateColormap
- /// <summary>
- /// XCreate colormap
- /// </summary>
- /// <param name="display"></param>
- /// <param name="window"></param>
- /// <param name="visual"></param>
- /// <param name="alloc"></param>
- /// <returns></returns>
- [DllImport("libX11")]
- private static extern IntPtr XCreateColormap(IntPtr display, IntPtr window,
- IntPtr visual, int alloc);
- #endregion
-
- #region GetStaticFieldValue
- /// <summary>
- /// Get static field value
- /// </summary>
- private static object GetStaticFieldValue(Type type, string fieldName)
- {
- return type.GetField(fieldName, BindingFlags.NonPublic |
- BindingFlags.Static).GetValue(null);
- }
- #endregion
-
- #region SetStaticFieldValue
- /// <summary>
- /// Set static field value
- /// </summary>
- private static void SetStaticFieldValue(Type type, string fieldName,
- object value)
- {
- type.GetField(fieldName, BindingFlags.NonPublic |
- BindingFlags.Static).SetValue(null, value);
- }
- #endregion
-
- #endregion
- }
- }
-