Commit graph

630 commits

Author SHA1 Message Date
the_fiddler a3177540b7 Removed dependency on System.Windows.Forms. 2010-11-08 21:44:56 +00:00
the_fiddler c2d6f0c091 Refactored input drivers in terms of WinInputBase to reduce code duplication. 2010-11-08 21:43:29 +00:00
the_fiddler 0533a6be23 Minor spelling fix.
Use POINT structure instead of System.Drawing.Point.
2010-11-08 21:41:44 +00:00
the_fiddler e5928f2b8d WinRawInput requires Windows 5.1 (XP) or higher. 2010-11-08 21:40:43 +00:00
the_fiddler 13a07273ba Removed unimplement SetPixelFormatARB - no such function exists.
Added aggressive locking during context creation and delegate loading in order to avoid potential race conditions.
Now uses Wgl.Imports directly wherever possible in order to improve performance and avoid race conditions.
Slightly improved debugging messages.
2010-11-08 21:38:32 +00:00
the_fiddler 452d8924e6 Minor cosmetic fixes. Removed unused code. 2010-11-08 21:36:10 +00:00
the_fiddler e1e1be49c4 Removed WinForms dependency and performed general code cleanup. 2010-11-08 19:48:01 +00:00
the_fiddler 6bb01d4cbb Added GraphicsModeComparer for GraphicsMode comparisons.
Added WinInputBase as a base abstraction for all win32 input class.
2010-11-08 19:45:58 +00:00
the_fiddler fd3e1850b7 Retrieve all pixel formats at once and select the correct one through a custom selection predicate. Simplifies the code significantly and reduces the chance of race conditions. 2010-11-08 19:41:24 +00:00
the_fiddler d08438785e Avoid reference to System.Windows.Forms.
Pass a concrete GraphicsMode to the context constructor in SelectPixelFormatARB to avoid NRE.
2010-11-08 16:01:50 +00:00
the_fiddler 206a6530a4 Removed duplicate success message. 2010-11-08 15:58:42 +00:00
the_fiddler d65e0aad47 Release both shift keys when one is released. Otherwise, we end up with stuck keys. 2010-11-08 08:59:32 +00:00
the_fiddler 666355103b * XI2Mouse.cs:
* X11Factory.cs: Removed window hooking, as it complicates code
  unnecessarily.
2010-11-04 18:01:07 +00:00
the_fiddler b646cfa06c * X11KeyMap.cs: Added AltGr keycode.
* X11Mouse.cs: Use XQueryPointer instead of trying to hook events.

* X11Keyboard.cs: Improved handling of key modifiers.

* X11Factory.cs: Use new X11Mouse API.

* Functions.cs: Added XButtonGrab/XButtonUngrab.

* API.cs: Added missing XF86 keysyms.
2010-11-04 17:57:09 +00:00
the_fiddler 7e344e2ac2 * EventInfo.cs:
* AglContext.cs:
* MacOSKeyMap.cs:
* CarbonInput.cs:
* Application.cs:
* MacOSFactory.cs:
* CarbonGLNative.cs:
* CarbonWindowInfo.cs:
* MacOSGraphicsMode.cs:
* QuartzDisplayDeviceDriver.cs: Normalized code formatting.
2010-11-02 19:49:24 +00:00
the_fiddler 915f8e559f * X11Keyboard.cs: Use XQueryKeymap to discover key state.
* X11Factory.cs: Use new X11Keyboard interface.
Temporarily disabled XI2Mouse for testing.

* Functions.cs: Fixed type declaration for Time.
Added support for XIGrabDevice, XIUngrabDevice, XGrabKey, XUngrabKey,
  XAllowEvents and XKeycodeToKeysym/XKeysymToKeycode.

* API.cs: Enumerate modes for XAllowEvents.
2010-11-01 08:01:44 +00:00
the_fiddler 2c5e7220c3 Implemented KeyboardState.IsConnected property.
Implemented WinRawKeyboard.RefreshDevices().
General code clean-up and beautification.
2010-10-29 11:46:57 +00:00
the_fiddler 2934c9d004 Decoupled new driver API from old public interface.
WinRawMouse can now detect mouse disconnection/connection events.
2010-10-29 11:27:40 +00:00
the_fiddler c1043d1693 Do not modify device state during the GetState() call. Fixes intermittent crashes. 2010-10-28 13:00:21 +00:00
the_fiddler 0044e4442d Modified GetState() to return the combined state for all mouse/keyboard devices. 2010-10-28 11:10:57 +00:00
the_fiddler c99571acac Fixed capacity parameter for GetWindowText(). Fixed debug string format that is printed when GetWindowText() fails. 2010-10-28 10:36:28 +00:00
the_fiddler a070918e93 Removed events that are not part of the INativeWindow interface. 2010-10-28 09:34:13 +00:00
the_fiddler e13a8e25ae Added code to raise all available events. Removed unused events from old OpenTK versions. Fixed potential race condition when raising events (an event might become null between the null check and the actual raising). 2010-10-28 09:31:00 +00:00
the_fiddler b7a0a7c800 Removed unused field. 2010-10-28 09:01:54 +00:00
the_fiddler ec01b1caae Don't shadow class field. 2010-10-28 09:01:43 +00:00
the_fiddler 5ff74aa685 Suppressed unused field warnings. The fields are necessary for interop, even if not explicitly accessed. 2010-10-28 09:01:25 +00:00
the_fiddler d56478c5b2 Minor cosmetic change. 2010-10-28 08:43:36 +00:00
the_fiddler 1bef154d36 Implemented WinRawKeyboard input driver. 2010-10-28 08:42:38 +00:00
the_fiddler 40c2576e06 Avoid numeric overflow when printing debug message. 2010-10-28 08:42:20 +00:00
the_fiddler fa0abf0d51 Minor fixes for code clarity. 2010-10-28 08:13:42 +00:00
the_fiddler 2430f82ff7 Implemented raw keyboard input for Windows. Improved the interface for receiving input. Moved raw input window to its own thread. 2010-10-22 14:57:06 +00:00
the_fiddler 75c71107a3 Initial implementation of raw mouse input on Windows. 2010-10-22 13:41:42 +00:00
the_fiddler b2ccc8f089 Fixed CursorVisible getter.
If necessary, re-grab the cursor whenever the window changes position/size.
2010-10-22 13:36:05 +00:00
the_fiddler 327941be33 Implemented PointToScreen and fixed mouse grab rectangle to match the client rectangle exactly. 2010-10-22 13:22:28 +00:00
the_fiddler bb01babfbd * XI2Mouse.cs:
* X11Factory.cs: Detect whether XInput2 is not supported without
  throwing an exception.
2010-10-22 07:41:56 +00:00
the_fiddler d49b315ced * Input/Mouse.cs:
* Platform/X11/X11Mouse.cs:
* Platform/X11/XI2Mouse.cs: Added internal list of mouse devices in
  preparation for multi-mouse support.
2010-10-21 14:53:10 +00:00
the_fiddler 671457b60a * OpenTK.csproj:
* Input/MouseState.cs:
* Platform/X11/Structs.cs:
* Platform/X11/XI2Mouse.cs:
* Platform/X11/Functions.cs:
* Platform/X11/X11Factory.cs: Added XInput2 driver for mice.
  Multi-mouse support pending.

* Platform/X11/X11Mouse.cs: Log the driver type for debugging
  purposes.
2010-10-21 12:32:00 +00:00
the_fiddler e638652d01 * Platform/X11/X11Keyboard.cs: Added index bounds check for
GetState.
2010-10-21 07:56:48 +00:00
the_fiddler 7947cad6f8 * OpenTK.csproj:
* Input/MouseState.cs:
* Input/ButtonState.cs:
* Platform/X11/X11Mouse.cs:
* Platform/X11/X11Factory.cs: Added initial implementation of
  OpenTK.Input.Mouse for X11.
2010-10-21 07:56:37 +00:00
the_fiddler 1529f811ac * X11Keyboard.cs: Do not allocate an X11WindowInfo unnecessarily. 2010-10-20 15:16:55 +00:00
the_fiddler 86588ea60c * Source/OpenTK/Input/Mouse.cs:
* Source/OpenTK/Platform/Factory.cs:
* Source/OpenTK/Input/InputDriver.cs:
* Source/OpenTK/Input/IMouseDriver.cs:
* Source/OpenTK/Platform/X11/X11Input.cs:
* Source/OpenTK/Platform/X11/X11Factory.cs:
* Source/OpenTK/Platform/Windows/WMInput.cs:
* Source/OpenTK/Platform/IPlatformFactory.cs:
* Source/OpenTK/Platform/MacOS/CarbonInput.cs:
* Source/OpenTK/Platform/Windows/WinFactory.cs:
* Source/OpenTK/Platform/MacOS/MacOSFactory.cs:
* Source/OpenTK/Platform/Windows/WinGLNative.cs:
* Source/OpenTK/Platform/Windows/WinRawMouse.cs:
* Source/OpenTK/Platform/Windows/WinRawInput.cs: Added new MouseDriver
  interface and added stub internal implementations.
2010-10-20 14:58:38 +00:00
the_fiddler e801660ff7 * Source/OpenTK/OpenTK.csproj:
* Source/OpenTK/Input/Keyboard.cs:
* Source/OpenTK/Input/InputDriver.cs:
* Source/OpenTK/Input/KeyboardState.cs:
* Source/OpenTK/Input/IKeyboardDriver.cs:
* Source/OpenTK/Platform/X11/X11Input.cs:
* Source/OpenTK/Platform/X11/Functions.cs:
* Source/OpenTK/Platform/X11/X11Factory.cs:
* Source/OpenTK/Platform/Windows/WMInput.cs:
* Source/OpenTK/Platform/X11/X11Keyboard.cs:
* Source/OpenTK/Platform/MacOS/CarbonInput.cs:
* Source/OpenTK/Platform/Windows/WinGLNative.cs:
* Source/OpenTK/Platform/Windows/WinRawInput.cs:
* Source/OpenTK/Platform/Windows/WinRawKeyboard.cs: Added initial
  OpenTK.Input.Keyboard implementation for X11.
2010-10-20 14:33:23 +00:00
the_fiddler 7c0dbf7dcf * Source/OpenTK/Platform/X11/X11GLNative.cs: Confine pointer to
window when it becomes invisible.
2010-10-20 09:50:49 +00:00
the_fiddler 3b72054480 * Source/OpenTK/Platform/X11/X11GLNative.cs: Refactored empty cursor
creation into its own function. Create one empty cursor for the
  lifetime of the window.
2010-10-20 09:19:34 +00:00
the_fiddler 9ec00014eb Take into account the fact that ShowCursor(true/false) calls are cumulative (we want boolean behavior instead). 2010-10-19 09:25:09 +00:00
the_fiddler 00311cdb13 Added initial code for mouse grabbing. Modified GameWindowStates to test this. 2010-10-19 09:20:59 +00:00
the_fiddler a18825a062 * Source/OpenTK/Platform/MacOS/CarbonGLNative.cs: Removed unused
code.
2010-10-18 16:14:50 +00:00
the_fiddler d5aaf4a794 * Source/OpenTK/Platform/Windows/API.cs:
* Source/OpenTK/Platform/Windows/WinGLNative.cs: Implemented
  CursorVisible.
2010-10-18 16:14:38 +00:00
the_fiddler 42e0880cbb * Source/OpenTK/NativeWindow.cs:
* Source/OpenTK/INativeWindow.cs:
* Source/OpenTK/Platform/X11/API.cs:
* Source/OpenTK/Platform/X11/X11GLNative.cs:
* Source/OpenTK/Platform/Windows/WinGLNative.cs:
* Source/OpenTK/Platform/MacOS/CarbonGLNative.cs:
* Source/Examples/OpenTK/Test/GameWindowStates.cs: Initial
  implementation of CursorVisible API. See issue [#1560].
2010-10-18 15:25:25 +00:00
the_fiddler 8f9cd3decf Report Xinerama as not supported when it fails to detect any devices. Fixes issue on Nvidia drivers when Twinview is enabled. 2010-10-09 19:11:45 +00:00
the_fiddler ddb51b25f7 Added XF86VM fallback when XRandR is missing (many thanks to jdomnitz!) 2010-10-09 19:10:39 +00:00
the_fiddler 1f4b5be7d0 Synced trunk with 1.0 branch. 2010-10-02 18:52:34 +00:00
the_fiddler 3f8f9b09e3 Synced with 1.0 branch. 2010-03-11 22:53:11 +00:00
the_fiddler da7e4c7252 Backported bugfixes from 1.0 branch. 2010-02-03 19:04:42 +00:00
kanato ea5b4f9f06 * Platform/MacOS/CarbonGLNative.cs: Fix width/height properties on Mac OS X. 2010-01-11 22:08:00 +00:00
the_fiddler f12cbf1cd5 Synced trunk with 1.0 branch. 2009-11-16 18:45:41 +00:00
the_fiddler 089b72c9c8 Protect all Xlib calls with XLockDisplay/XUnlockDisplay. Fixes issue [#1354]: "Application always run in windowed mode when using shared contexts". 2009-11-09 19:05:41 +00:00
kanato 62b65af462 MacOS: Hack for AGL to have access to the display device specified when a NativeWindow is created. 2009-11-09 07:50:21 +00:00
kanato 56412367c4 MacOS: Detect display boundaries so created windows are placed in the right spot. 2009-11-09 07:39:38 +00:00
kanato c605a05ffb MacOS: Fix event from user clicking close box to properly report that window doesn't exist anymore. 2009-11-09 07:18:54 +00:00
the_fiddler e35f9d5374 Disabled OpenTK.Point, Size and Rectangle structures that were meant to replace their System.Drawing implementations until the correct course of action can be determined. This change is too disruptive to existing applications, especially if they are also using Windows.Forms (see discussion here: http://www.opentk.com/node/1348). 2009-11-08 23:02:53 +00:00
the_fiddler 0af0916ce0 Don't display window by default, unless "Visible = true" is called. Allows the creation of invisible windows for secondary GraphicsContexts. 2009-11-08 22:46:49 +00:00
the_fiddler e1485cdfca Added a second terminating 0 to attribute list, trying to work around issue [#1352]: "Occasional AccessViolationExceptions when creating the GLControl". 2009-11-08 22:42:20 +00:00
the_fiddler 1cd2b8d076 Use SHOW command instead of SHOWNORMAL when making a window visible, since SHOWNORMAL will un-maximize a fullscreen or maximized window.
Do not force an invisible window to become visible when modifying its state or borders.
2009-11-07 10:44:31 +00:00
the_fiddler 2e418e5b6b Update the context when the native window is resized. 2009-11-06 21:56:35 +00:00
the_fiddler 70eba0eb20 MacOS can have an X server installed. Modified the code so that it prefers the native Carbon/Quartz platform driver over X in this case. 2009-11-06 17:58:35 +00:00
the_fiddler 8733dd7c2f * Platform/Windows/WinDisplayDevice.cs:
* Platform/MacOS/QuartzDisplayDeviceDriver.cs: Updated to use the new
  DisplayDevice constructors.

* Platform/X11/X11XrandrDisplayDevice.cs: Query Xinerama for the exact
  bounds of each display device, if available.
Use global X lock to protect from multithreaded access.
2009-11-06 09:50:50 +00:00
the_fiddler 39b4e329fd * X11GLNative.cs: Convert from ASCII to the default encoding before generating KeyPress events (allows support for simple scripts that do not use composition.) 2009-11-05 12:12:29 +00:00
the_fiddler 3e1ce4dfa5 * X11GLNative.cs: Implemented KeyPress event (no support for input
methods yet).

* Functions.cs: Added XLookupString and XRefreshKeyboardMapping
  methods for simple ANSI text input.
2009-11-05 11:49:24 +00:00
the_fiddler ada915fed0 Added missing TitleChanged event. 2009-11-04 20:49:38 +00:00
the_fiddler 3fd2b4b30b Removed unused code. 2009-11-04 20:48:35 +00:00
the_fiddler b36e6c64d7 Refactored timer installation/removal into their own methods. 2009-11-04 18:35:32 +00:00
the_fiddler 9f4eca541f Support external EGL contexts. 2009-11-04 17:00:52 +00:00
the_fiddler 5142354cda Renamed internal BindingsBase.LoadAll/Load methods to LoadEntryPoints/LoadEntryPoint, in order to avoid name clashes with the static GL.LoadAll() method.
Added GraphicsContext() constructor that takes an existing, valid OpenGL context. This can be used for interop with third-party toolkits which create the OpenGL context themselves.
2009-11-04 16:49:56 +00:00
the_fiddler 3ca21ed1b6 Initialize threads before calling any other X methods. 2009-11-04 10:04:16 +00:00
the_fiddler 9f96fe71c1 Removed unnecessary debugging messages from main loop. 2009-11-04 10:03:50 +00:00
the_fiddler 765f54917e Default window style flags can be constants rather than static readonly fields.
Throw an exception if we fail to register the window class, the previous solution (check for "class already exists" error) was a workaround for a threading issue that has been solved.
Set the small icon when registering the class.
2009-11-04 09:21:41 +00:00
the_fiddler 15ab0d3ea7 Fixed ClassName and ModalLoopTimerId when constructing multiple WinGLNative windows in parallel.
WinGLNative windows are now correctly focused when clicked on the client area.
2009-11-03 23:42:06 +00:00
the_fiddler 544cf9d405 Serialize context construction to avoid threading issues with shared contexts. 2009-11-03 23:39:03 +00:00
the_fiddler 7e1ebfea6b Avoid static caching of extension strings and improve multithreading behavior - WGL extension checking is fast enough that caching is not very useful. 2009-11-03 23:36:37 +00:00
the_fiddler bd3334dd2b Added SyncRoot object to BindingsBase that can be used to protect shared state in the various bindings. 2009-11-03 23:26:57 +00:00
the_fiddler 74bae3e196 Use more aggressive xlib locking following the advice of the multithreaded X manpages (needs work). 2009-11-02 22:37:13 +00:00
the_fiddler 0bfb7897b0 Do not allow MakeCurrent() to change the display connection of the context. This would result in an X error and the change allows us to simplify shutdown/cleanup logic. 2009-11-02 20:50:16 +00:00
the_fiddler c8c652131e Added experimental Icon and IconConverter implementations from Mono.
Modified INativeWindow implementations to not qualify Icon class fully, so we can change the implementation between System.Drawing and OpenTK at will (using the EXPERIMENTAL #define).
2009-11-02 09:33:53 +00:00
the_fiddler ff572e83b7 Added experimental OpenTK.Point/Size/Rectangle alternatives to System.Drawing, to make OpenTK usable without referencing System.Drawing (disabled by default, #define EXPERIMENTAL to test). Modified a number of using directives and namespace qualifiers to accommodate this change. 2009-11-01 12:44:38 +00:00
the_fiddler 3d0a3dfb4e Implemented INativeWindow.MouseEnter/MouseLeave events on Win32 and X11. 2009-10-27 23:57:44 +00:00
the_fiddler a7ccef9ae8 Set default class cursor to avoid invalid cursors when entering the window. 2009-10-21 20:08:04 +00:00
the_fiddler f1fc4b5b4e Added LoadCursor method.
Added CursorName enum (only default arrow cursor is defined for now).
2009-10-21 20:07:32 +00:00
the_fiddler bdfa5fc9ec Avoid accessing OpenTK.Graphics.OpenGL from platform-specific code. Reduces coupling and code-duplication. 2009-10-21 10:16:32 +00:00
the_fiddler 25c646639b Trap WM_SYSCHAR to avoid generating system beeps on Alt+[Key] combinations. 2009-10-20 11:35:35 +00:00
the_fiddler ddcf5f6e44 Revert WindowBorder and WindowState value changes.
Use Nullable types to detect when WindowBorder and WindowState is not set.
2009-10-19 21:32:33 +00:00
the_fiddler 2b7ed38569 * X11GLNative.cs: Added more defensive checks for the existence of the window before issuing XDestroyWindow.
Do not allow multiple calls to XDestroyWindow once the shutdown sequence has been initialized. Fixes issue [#1190]: "GameWindow dispose on linux".
2009-10-19 19:46:37 +00:00
the_fiddler 162faad8e3 * X11GLNative.cs: Correctly set all necessary ClientMessage fields
for XSendEvent call in Close() method.
2009-10-19 19:03:17 +00:00
the_fiddler 47c1cc69e5 * Functions.cs: Added helper function for XSendEvent, so that we
don't need to cast the EventMask to IntPtr.
2009-10-19 19:02:07 +00:00
the_fiddler e2dd2cb58f * X11GLContext.cs: Correctly set GraphicsMode in constructor (resolves issue [#1175]: "Graphics] GraphicsContext.GraphicsMode property returns null on Linux"). 2009-10-19 18:11:32 +00:00
the_fiddler 0c9657c5e7 * X11GLNative.cs: Implemented Icon property for WMs that do not
respect _NET_WM_ICON (e.g. Gnome/Metacity/Compiz).
2009-10-19 10:42:28 +00:00
the_fiddler a05d06b2d8 * Functions.cs: Added a number of missing methods relating to
XWMHints, images, pixmaps and root windows.
Implemented Create[Mask|Pixmap]FromImage methods.

* Structs.cs: Added ImageFormat enum.
2009-10-19 10:41:41 +00:00
the_fiddler e551881f1b Implemented icon support. 2009-10-18 16:52:07 +00:00
the_fiddler 76ae6999cd Focused property now returns correct values. FocusedChanged event is now correctly raised. 2009-10-18 15:11:41 +00:00
the_fiddler 590789a684 Improved handling if WindowBorder changes when the window is WindowState is Maximized or Fullscreen. Maximized windows now correctly retain their maximized state, while fullscreen windows do not become non-fullscreen when their border is modified. 2009-10-18 14:56:53 +00:00