diff --git a/Source/OpenTK/Graphics/Display.cs b/Source/OpenTK/Graphics/Display.cs new file mode 100644 index 00000000..35508392 --- /dev/null +++ b/Source/OpenTK/Graphics/Display.cs @@ -0,0 +1,97 @@ +#region --- License --- +/* Licensed under the MIT/X11 license. + * Copyright (c) 2006-2008 the OpenTK team. + * This notice may not be removed. + * See license.txt for licensing detailed licensing information. */ +#endregion + +using System; +using System.Collections.Generic; +using System.Text; + +namespace OpenTK.Graphics +{ + /// + /// Defines a display device on the underlying system, and provides + /// methods to query and change its display parameters. + /// + public class Display + { + // TODO: Add support for refresh rate queries and switches. + // TODO: Check whether bits_per_pixel works correctly under Mono/X11. + // TODO: Add properties that describe the 'usable' size of the Display, i.e. the maximized size without the taskbar etc. + // TODO: Does not detect changes to primary device. + + int width, height; + int bits_per_pixel; + float refresh_rate; + bool primary; + + static List available_displays = new List(); + static object display_lock = new object(); + static Display primary_display; + + #region --- Constructors --- + + static Display() + { + lock (display_lock) + { + int i = 0; + foreach (System.Windows.Forms.Screen scr in System.Windows.Forms.Screen.AllScreens) + { + available_displays.Add(new Display(scr.Bounds.Width, scr.Bounds.Height, scr.BitsPerPixel, 0, scr.Primary)); + if (scr.Primary) + primary_display = available_displays[i]; + ++i; + } + } + } + + Display(int width, int height, int bitsPerPixel, float refreshRate, bool primary) + { + this.width = width; + this.height = height; + this.bits_per_pixel = bitsPerPixel; + this.refresh_rate = refreshRate; + this.primary = primary; + } + + #endregion + + #region --- Public Methods --- + + /// Gets a System.Int32 that contains the width of this Display in pixels. + public int Width { get { return width; } } + + /// Gets a System.Int32 that contains the height of this Display in pixels. + public int Height { get { return height; } } + + /// Gets a System.Int32 that contains number of bits per pixel of this Display. Typical values include 8, 16, 24 and 32. + public int BitsPerPixel { get { return bits_per_pixel; } } + + /// Gets a System.Boolean that indicates whether this Display is the primary Display in systems with multiple Displays. + public bool Primary { get { return primary; } } + + /// + /// Gets an array of OpenTK.Display objects, which describe all available display devices. + /// + public static Display[] AvailableDisplays + { + get + { + lock (display_lock) + { + return available_displays.ToArray(); + } + } + } + + /// Gets the primary display of this system. + public static Display PrimaryDisplay { get { return primary_display; } } + + #endregion + + + } +}