Fixed GameWindow.{Bounds, Location, Size, X, Y} setters on OpenTK/Carbon

This commit is contained in:
thefiddler 2013-12-23 20:21:02 +01:00
parent c6a21a2239
commit c13d80d6d8
2 changed files with 38 additions and 31 deletions

View file

@ -64,6 +64,11 @@ namespace OpenTK.Platform.MacOS.Carbon
short bottom;
short right;
internal Rect(int left, int top, int width, int height)
: this((short)left, (short)top, (short)width, (short)height)
{
}
internal Rect(short _left, short _top, short _width, short _height)
{
top = _top;
@ -530,6 +535,9 @@ namespace OpenTK.Platform.MacOS.Carbon
return retval;
}
[DllImport(carbon)]
internal static extern OSStatus SetWindowBounds(IntPtr Windows, WindowRegionCode WindowRegionCode, ref Rect globalBounds);
//[DllImport(carbon)]
//internal static extern void MoveWindow(IntPtr window, short hGlobal, short vGlobal, bool front);

View file

@ -660,52 +660,51 @@ namespace OpenTK.Platform.MacOS
}
Rect GetRegion()
Rect GetClientSize()
{
Rect retval = API.GetWindowBounds(window.Handle, WindowRegionCode.ContentRegion);
return retval;
}
void SetLocation(short x, short y)
{
if (windowState == WindowState.Fullscreen)
return;
API.MoveWindow(window.Handle, x, y, false);
}
void SetSize(short width, short height)
{
if (WindowState == WindowState.Fullscreen)
return;
// The bounds of the window should be the size specified, but
// API.SizeWindow sets the content region size. So
// we reduce the size to get the correct bounds.
width -= (short)(bounds.Width - clientRectangle.Width);
height -= (short)(bounds.Height - clientRectangle.Height);
API.SizeWindow(window.Handle, width, height, true);
}
void SetClientSize(short width, short height)
{
if (WindowState == WindowState.Fullscreen)
return;
API.SizeWindow(window.Handle, width, height, true);
Rect new_bounds = new Rect(Bounds.X, Bounds.Y, width, height);
API.SetWindowBounds(window.Handle, WindowRegionCode.ContentRegion, ref new_bounds);
LoadSize();
}
void SetLocation(short x, short y)
{
if (windowState == WindowState.Fullscreen)
return;
Rect new_bounds = new Rect(x, y, Bounds.Width, Bounds.Height);
API.SetWindowBounds(window.Handle, WindowRegionCode.StructureRegion, ref new_bounds);
LoadSize();
}
void SetSize(short width, short height)
{
if (WindowState == WindowState.Fullscreen)
return;
Rect new_bounds = new Rect(Bounds.X, Bounds.Y, width, height);
API.SetWindowBounds(window.Handle, WindowRegionCode.StructureRegion, ref new_bounds);
LoadSize();
}
private void LoadSize()
{
if (WindowState == WindowState.Fullscreen)
return;
Rect r = API.GetWindowBounds(window.Handle, WindowRegionCode.StructureRegion);
bounds = new Rectangle(r.X, r.Y, r.Width, r.Height);
r = API.GetWindowBounds(window.Handle, WindowRegionCode.GlobalPortRegion);
r = API.GetWindowBounds(window.Handle, WindowRegionCode.ContentRegion);
clientRectangle = new Rectangle(0, 0, r.Width, r.Height);
}
@ -891,13 +890,13 @@ namespace OpenTK.Platform.MacOS
public int X
{
get { return ClientRectangle.X; }
get { return Bounds.X; }
set { Location = new Point(value, Y); }
}
public int Y
{
get { return ClientRectangle.Y; }
get { return Bounds.Y; }
set { Location = new Point(X, value); }
}