Revert "Remove child window from windows gamewindow backend"

This reverts commit f112751dd64fcd51237b3449b874fcc1d5c92b61.
This commit is contained in:
UnknownShadow200 2017-07-26 20:16:41 +10:00
parent f112751dd6
commit 273d276086

View File

@ -47,7 +47,7 @@ namespace OpenTK.Platform.Windows
readonly WindowProcedure WindowProcedureDelegate; readonly WindowProcedure WindowProcedureDelegate;
bool class_registered, disposed, exists; bool class_registered, disposed, exists;
WinWindowInfo window; WinWindowInfo window, child_window;
WindowState windowState = WindowState.Normal; WindowState windowState = WindowState.Normal;
bool focused; bool focused;
bool mouse_outside_window = true; bool mouse_outside_window = true;
@ -66,8 +66,13 @@ namespace OpenTK.Platform.Windows
public WinGLNative(int x, int y, int width, int height, string title, GameWindowFlags options, DisplayDevice device) { public WinGLNative(int x, int y, int width, int height, string title, GameWindowFlags options, DisplayDevice device) {
WindowProcedureDelegate = WindowProcedure; WindowProcedureDelegate = WindowProcedure;
// To avoid issues with Ati drivers on Windows 6+ with compositing enabled, the context will not be
// bound to the top-level window, but rather to a child window docked in the parent.
window = new WinWindowInfo( window = new WinWindowInfo(
CreateWindow(x, y, width, height, title, options, device, IntPtr.Zero), null); CreateWindow(x, y, width, height, title, options, device, IntPtr.Zero), null);
child_window = new WinWindowInfo(
CreateWindow(0, 0, ClientSize.Width, ClientSize.Height, title, options, device, window.WindowHandle), window);
exists = true; exists = true;
} }
@ -117,7 +122,7 @@ namespace OpenTK.Platform.Windows
API.GetClientRect(handle, out rect); API.GetClientRect(handle, out rect);
client_rectangle = rect.ToRectangle(); client_rectangle = rect.ToRectangle();
API.SetWindowPos(window.WindowHandle, IntPtr.Zero, 0, 0, ClientRectangle.Width, ClientRectangle.Height, API.SetWindowPos(child_window.WindowHandle, IntPtr.Zero, 0, 0, ClientRectangle.Width, ClientRectangle.Height,
SetWindowPosFlags.NOZORDER | SetWindowPosFlags.NOOWNERZORDER | SetWindowPosFlags.NOZORDER | SetWindowPosFlags.NOOWNERZORDER |
SetWindowPosFlags.NOACTIVATE | SetWindowPosFlags.NOSENDCHANGING); SetWindowPosFlags.NOACTIVATE | SetWindowPosFlags.NOSENDCHANGING);
if (suppress_resize <= 0 && Resize != null) if (suppress_resize <= 0 && Resize != null)
@ -348,6 +353,7 @@ namespace OpenTK.Platform.Windows
API.UnregisterClass(ClassName, Instance); API.UnregisterClass(ClassName, Instance);
window.Dispose(); window.Dispose();
child_window.Dispose();
if (Closed != null) if (Closed != null)
Closed(this, EventArgs.Empty); Closed(this, EventArgs.Empty);
@ -362,7 +368,7 @@ namespace OpenTK.Platform.Windows
private void EnableMouseTracking() { private void EnableMouseTracking() {
TrackMouseEventStructure me = new TrackMouseEventStructure(); TrackMouseEventStructure me = new TrackMouseEventStructure();
me.Size = TrackMouseEventStructure.SizeInBytes; me.Size = TrackMouseEventStructure.SizeInBytes;
me.TrackWindowHandle = window.WindowHandle; me.TrackWindowHandle = child_window.WindowHandle;
me.Flags = TrackMouseEventFlags.LEAVE; me.Flags = TrackMouseEventFlags.LEAVE;
if (!API.TrackMouseEvent(ref me)) if (!API.TrackMouseEvent(ref me))
@ -688,7 +694,7 @@ namespace OpenTK.Platform.Windows
} }
public IWindowInfo WindowInfo { public IWindowInfo WindowInfo {
get { return window; } get { return child_window; }
} }
public KeyboardDevice Keyboard { public KeyboardDevice Keyboard {