[Mac] Removed most legacy Carbon code
This commit is contained in:
parent
5f44f3d491
commit
824f238973
4 changed files with 2 additions and 902 deletions
|
@ -279,9 +279,6 @@
|
||||||
<Compile Include="Platform\Egl\EglMacPlatformFactory.cs">
|
<Compile Include="Platform\Egl\EglMacPlatformFactory.cs">
|
||||||
<SubType>Code</SubType>
|
<SubType>Code</SubType>
|
||||||
</Compile>
|
</Compile>
|
||||||
<Compile Include="Platform\MacOS\EventInfo.cs">
|
|
||||||
<SubType>Code</SubType>
|
|
||||||
</Compile>
|
|
||||||
<Compile Include="Platform\MacOS\MacOSFactory.cs">
|
<Compile Include="Platform\MacOS\MacOSFactory.cs">
|
||||||
<SubType>Code</SubType>
|
<SubType>Code</SubType>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
@ -291,9 +288,6 @@
|
||||||
<Compile Include="Platform\MacOS\MacOSKeyMap.cs">
|
<Compile Include="Platform\MacOS\MacOSKeyMap.cs">
|
||||||
<SubType>Code</SubType>
|
<SubType>Code</SubType>
|
||||||
</Compile>
|
</Compile>
|
||||||
<Compile Include="Platform\MacOS\Application.cs">
|
|
||||||
<SubType>Code</SubType>
|
|
||||||
</Compile>
|
|
||||||
<Compile Include="Platform\MacOS\QuartzDisplayDeviceDriver.cs">
|
<Compile Include="Platform\MacOS\QuartzDisplayDeviceDriver.cs">
|
||||||
<SubType>Code</SubType>
|
<SubType>Code</SubType>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
|
|
@ -1,149 +0,0 @@
|
||||||
#region License
|
|
||||||
//
|
|
||||||
// The Open Toolkit Library License
|
|
||||||
//
|
|
||||||
// Copyright (c) 2006 - 2010 the Open Toolkit library.
|
|
||||||
//
|
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
// of this software and associated documentation files (the "Software"), to deal
|
|
||||||
// in the Software without restriction, including without limitation the rights to
|
|
||||||
// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
|
||||||
// the Software, and to permit persons to whom the Software is furnished to do
|
|
||||||
// so, subject to the following conditions:
|
|
||||||
//
|
|
||||||
// The above copyright notice and this permission notice shall be included in all
|
|
||||||
// copies or substantial portions of the Software.
|
|
||||||
//
|
|
||||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
||||||
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
|
||||||
// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
||||||
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
|
||||||
// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
|
||||||
// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
||||||
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
|
||||||
// OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
//
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
// Created by Erik Ylvisaker on 3/17/08.
|
|
||||||
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Diagnostics;
|
|
||||||
using System.IO;
|
|
||||||
using System.Text;
|
|
||||||
|
|
||||||
namespace OpenTK.Platform.MacOS.Carbon
|
|
||||||
{
|
|
||||||
static class Application
|
|
||||||
{
|
|
||||||
static bool mInitialized = false;
|
|
||||||
static IntPtr uppHandler;
|
|
||||||
static int osMajor, osMinor, osBugfix;
|
|
||||||
|
|
||||||
static Application()
|
|
||||||
{
|
|
||||||
Initialize();
|
|
||||||
}
|
|
||||||
|
|
||||||
static internal void Initialize()
|
|
||||||
{
|
|
||||||
if (mInitialized)
|
|
||||||
return;
|
|
||||||
|
|
||||||
API.AcquireRootMenu();
|
|
||||||
|
|
||||||
ConnectEvents();
|
|
||||||
|
|
||||||
API.Gestalt(GestaltSelector.SystemVersionMajor, out osMajor);
|
|
||||||
API.Gestalt(GestaltSelector.SystemVersionMinor, out osMinor);
|
|
||||||
API.Gestalt(GestaltSelector.SystemVersionBugFix, out osBugfix);
|
|
||||||
|
|
||||||
Debug.Print("Running on Mac OS X {0}.{1}.{2}.", osMajor, osMinor, osBugfix);
|
|
||||||
|
|
||||||
TransformProcessToForeground();
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void TransformProcessToForeground()
|
|
||||||
{
|
|
||||||
Carbon.ProcessSerialNumber psn = new ProcessSerialNumber();
|
|
||||||
|
|
||||||
Debug.Print("Setting process to be foreground application.");
|
|
||||||
|
|
||||||
API.GetCurrentProcess(ref psn);
|
|
||||||
API.TransformProcessType(ref psn, ProcessApplicationTransformState.kProcessTransformToForegroundApplication);
|
|
||||||
API.SetFrontProcess(ref psn);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void ConnectEvents()
|
|
||||||
{
|
|
||||||
|
|
||||||
EventTypeSpec[] eventTypes = new EventTypeSpec[] {
|
|
||||||
new EventTypeSpec(EventClass.Application, AppEventKind.AppActivated),
|
|
||||||
new EventTypeSpec(EventClass.Application, AppEventKind.AppDeactivated),
|
|
||||||
new EventTypeSpec(EventClass.Application, AppEventKind.AppQuit),
|
|
||||||
new EventTypeSpec(EventClass.Mouse, MouseEventKind.MouseDown),
|
|
||||||
new EventTypeSpec(EventClass.Mouse, MouseEventKind.MouseUp),
|
|
||||||
new EventTypeSpec(EventClass.Mouse, MouseEventKind.MouseMoved),
|
|
||||||
new EventTypeSpec(EventClass.Mouse, MouseEventKind.MouseDragged),
|
|
||||||
new EventTypeSpec(EventClass.Mouse, MouseEventKind.MouseEntered),
|
|
||||||
new EventTypeSpec(EventClass.Mouse, MouseEventKind.MouseExited),
|
|
||||||
new EventTypeSpec(EventClass.Mouse, MouseEventKind.WheelMoved),
|
|
||||||
new EventTypeSpec(EventClass.Mouse, MouseEventKind.WheelScroll),
|
|
||||||
|
|
||||||
|
|
||||||
new EventTypeSpec(EventClass.Keyboard, KeyboardEventKind.RawKeyDown),
|
|
||||||
new EventTypeSpec(EventClass.Keyboard, KeyboardEventKind.RawKeyRepeat),
|
|
||||||
new EventTypeSpec(EventClass.Keyboard, KeyboardEventKind.RawKeyUp),
|
|
||||||
new EventTypeSpec(EventClass.Keyboard, KeyboardEventKind.RawKeyModifiersChanged),
|
|
||||||
new EventTypeSpec(EventClass.AppleEvent, AppleEventKind.AppleEvent),
|
|
||||||
};
|
|
||||||
|
|
||||||
MacOSEventHandler handler = EventHandler;
|
|
||||||
uppHandler = API.NewEventHandlerUPP(handler);
|
|
||||||
|
|
||||||
API.InstallApplicationEventHandler(uppHandler, eventTypes, IntPtr.Zero, IntPtr.Zero);
|
|
||||||
|
|
||||||
mInitialized = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
static OSStatus EventHandler(IntPtr inCaller, IntPtr inEvent, IntPtr userData)
|
|
||||||
{
|
|
||||||
EventInfo evt = new EventInfo(inEvent);
|
|
||||||
|
|
||||||
switch (evt.EventClass)
|
|
||||||
{
|
|
||||||
case EventClass.Application:
|
|
||||||
switch (evt.AppEventKind)
|
|
||||||
{
|
|
||||||
case AppEventKind.AppQuit:
|
|
||||||
API.RemoveEventHandler(uppHandler);
|
|
||||||
return OSStatus.EventNotHandled;
|
|
||||||
|
|
||||||
default:
|
|
||||||
return OSStatus.EventNotHandled;
|
|
||||||
}
|
|
||||||
|
|
||||||
case EventClass.AppleEvent:
|
|
||||||
// only event here is the apple event.
|
|
||||||
Debug.Print("Processing apple event.");
|
|
||||||
API.ProcessAppleEvent(inEvent);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return OSStatus.EventNotHandled;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void MainWindowClosed(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
Debug.Print("Quitting application event loop.");
|
|
||||||
API.QuitApplicationEventLoop();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static internal void ProcessEvents()
|
|
||||||
{
|
|
||||||
API.ProcessEvents();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -30,98 +30,9 @@
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
using System.Diagnostics;
|
|
||||||
#if !MINIMAL
|
|
||||||
using System.Drawing;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
using EventTime = System.Double;
|
|
||||||
|
|
||||||
|
|
||||||
namespace OpenTK.Platform.MacOS.Carbon
|
namespace OpenTK.Platform.MacOS.Carbon
|
||||||
{
|
{
|
||||||
|
|
||||||
#region --- Types defined in MacTypes.h ---
|
|
||||||
|
|
||||||
[StructLayout(LayoutKind.Sequential)]
|
|
||||||
internal struct CarbonPoint
|
|
||||||
{
|
|
||||||
internal short V;
|
|
||||||
internal short H;
|
|
||||||
|
|
||||||
public CarbonPoint(int x, int y)
|
|
||||||
{
|
|
||||||
V = (short)x;
|
|
||||||
H = (short)y;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
[StructLayout(LayoutKind.Sequential)]
|
|
||||||
internal struct Rect
|
|
||||||
{
|
|
||||||
short top;
|
|
||||||
short left;
|
|
||||||
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;
|
|
||||||
left = _left;
|
|
||||||
bottom = (short)(_top + _height);
|
|
||||||
right = (short)(_left + _width);
|
|
||||||
}
|
|
||||||
|
|
||||||
internal short X
|
|
||||||
{
|
|
||||||
get { return left; }
|
|
||||||
set
|
|
||||||
{
|
|
||||||
short width = Width;
|
|
||||||
left = value;
|
|
||||||
right = (short)(left + width);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
internal short Y
|
|
||||||
{
|
|
||||||
get { return top; }
|
|
||||||
set
|
|
||||||
{
|
|
||||||
short height = Height;
|
|
||||||
top = value;
|
|
||||||
bottom = (short)(top + height);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
internal short Width
|
|
||||||
{
|
|
||||||
get { return (short)(right - left); }
|
|
||||||
set { right = (short)(left + value); }
|
|
||||||
}
|
|
||||||
internal short Height
|
|
||||||
{
|
|
||||||
get { return (short)(bottom - top); }
|
|
||||||
set { bottom = (short)(top + value); }
|
|
||||||
}
|
|
||||||
|
|
||||||
public override string ToString()
|
|
||||||
{
|
|
||||||
return string.Format(
|
|
||||||
"Rect: [{0}, {1}, {2}, {3}]", X, Y, Width, Height);
|
|
||||||
}
|
|
||||||
|
|
||||||
public Rectangle ToRectangle()
|
|
||||||
{
|
|
||||||
return new Rectangle(X, Y, Width, Height);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region --- Types defined in HIGeometry.h ---
|
#region --- Types defined in HIGeometry.h ---
|
||||||
|
|
||||||
[StructLayout(LayoutKind.Sequential)]
|
[StructLayout(LayoutKind.Sequential)]
|
||||||
|
@ -129,11 +40,13 @@ namespace OpenTK.Platform.MacOS.Carbon
|
||||||
{
|
{
|
||||||
public float X;
|
public float X;
|
||||||
public float Y;
|
public float Y;
|
||||||
|
|
||||||
public HIPoint(float x, float y)
|
public HIPoint(float x, float y)
|
||||||
{
|
{
|
||||||
X = x;
|
X = x;
|
||||||
Y = y;
|
Y = y;
|
||||||
}
|
}
|
||||||
|
|
||||||
public HIPoint(double x, double y)
|
public HIPoint(double x, double y)
|
||||||
: this((float)x, (float)y)
|
: this((float)x, (float)y)
|
||||||
{ }
|
{ }
|
||||||
|
@ -160,552 +73,6 @@ namespace OpenTK.Platform.MacOS.Carbon
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region --- Types defined in CarbonEvents.h ---
|
|
||||||
|
|
||||||
enum EventAttributes : uint
|
|
||||||
{
|
|
||||||
kEventAttributeNone = 0,
|
|
||||||
kEventAttributeUserEvent = (1 << 0),
|
|
||||||
kEventAttributeMonitored = 1 << 3,
|
|
||||||
}
|
|
||||||
|
|
||||||
[StructLayout(LayoutKind.Sequential)]
|
|
||||||
internal struct EventTypeSpec
|
|
||||||
{
|
|
||||||
internal EventTypeSpec(EventClass evtClass, AppEventKind evtKind)
|
|
||||||
{
|
|
||||||
this.EventClass = evtClass;
|
|
||||||
this.EventKind = (uint)evtKind;
|
|
||||||
}
|
|
||||||
internal EventTypeSpec(EventClass evtClass, AppleEventKind appleKind)
|
|
||||||
{
|
|
||||||
this.EventClass = evtClass;
|
|
||||||
this.EventKind = (uint)appleKind;
|
|
||||||
}
|
|
||||||
internal EventTypeSpec(EventClass evtClass, MouseEventKind evtKind)
|
|
||||||
{
|
|
||||||
this.EventClass = evtClass;
|
|
||||||
this.EventKind = (uint)evtKind;
|
|
||||||
}
|
|
||||||
internal EventTypeSpec(EventClass evtClass, KeyboardEventKind evtKind)
|
|
||||||
{
|
|
||||||
this.EventClass = evtClass;
|
|
||||||
this.EventKind = (uint)evtKind;
|
|
||||||
}
|
|
||||||
internal EventTypeSpec(EventClass evtClass, WindowEventKind evtKind)
|
|
||||||
{
|
|
||||||
this.EventClass = evtClass;
|
|
||||||
this.EventKind = (uint)evtKind;
|
|
||||||
}
|
|
||||||
|
|
||||||
internal EventClass EventClass;
|
|
||||||
internal uint EventKind;
|
|
||||||
}
|
|
||||||
|
|
||||||
internal enum EventClass : int
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
kEventClassMouse = FOUR_CHAR_CODE('mous'),
|
|
||||||
kEventClassKeyboard = FOUR_CHAR_CODE('keyb'),
|
|
||||||
kEventClassTextInput = FOUR_CHAR_CODE('text'),
|
|
||||||
kEventClassApplication = FOUR_CHAR_CODE('appl'),
|
|
||||||
kEventClassAppleEvent = FOUR_CHAR_CODE('eppc'),
|
|
||||||
kEventClassMenu = FOUR_CHAR_CODE('menu'),
|
|
||||||
kEventClassWindow = FOUR_CHAR_CODE('wind'),
|
|
||||||
kEventClassControl = FOUR_CHAR_CODE('cntl'),
|
|
||||||
kEventClassCommand = FOUR_CHAR_CODE('cmds')
|
|
||||||
*/
|
|
||||||
Mouse = 0x6d6f7573,
|
|
||||||
Keyboard = 0x6b657962,
|
|
||||||
Application = 0x6170706c,
|
|
||||||
AppleEvent = 0x65707063,
|
|
||||||
Menu = 0x6d656e75,
|
|
||||||
Window = 0x77696e64,
|
|
||||||
}
|
|
||||||
internal enum WindowEventKind : int
|
|
||||||
{
|
|
||||||
// window events
|
|
||||||
WindowUpdate = 1,
|
|
||||||
WindowDrawContent = 2,
|
|
||||||
WindowDrawStructure = 3,
|
|
||||||
WindowEraseContent = 4,
|
|
||||||
WindowActivate = 5,
|
|
||||||
WindowDeactivate = 6,
|
|
||||||
WindowSizeChanged = 23,
|
|
||||||
WindowBoundsChanging = 26,
|
|
||||||
WindowBoundsChanged = 27,
|
|
||||||
WindowClickDragRgn = 32,
|
|
||||||
WindowClickResizeRgn = 33,
|
|
||||||
WindowClickCollapseRgn = 34,
|
|
||||||
WindowClickCloseRgn = 35,
|
|
||||||
WindowClickZoomRgn = 36,
|
|
||||||
WindowClickContentRgn = 37,
|
|
||||||
WindowClickProxyIconRgn = 38,
|
|
||||||
WindowClose = 72,
|
|
||||||
WindowClosed = 73,
|
|
||||||
WindowPaint = 1013,
|
|
||||||
}
|
|
||||||
internal enum MouseEventKind : int
|
|
||||||
{
|
|
||||||
MouseDown = 1,
|
|
||||||
MouseUp = 2,
|
|
||||||
MouseMoved = 5,
|
|
||||||
MouseDragged = 6,
|
|
||||||
MouseEntered = 8,
|
|
||||||
MouseExited = 9,
|
|
||||||
WheelMoved = 10,
|
|
||||||
WheelScroll = 11,
|
|
||||||
}
|
|
||||||
internal enum MouseButton : short
|
|
||||||
{
|
|
||||||
Primary = 1,
|
|
||||||
Secondary = 2,
|
|
||||||
Tertiary = 3,
|
|
||||||
}
|
|
||||||
|
|
||||||
internal enum KeyboardEventKind : int
|
|
||||||
{
|
|
||||||
// raw keyboard events
|
|
||||||
RawKeyDown = 1,
|
|
||||||
RawKeyRepeat = 2,
|
|
||||||
RawKeyUp = 3,
|
|
||||||
RawKeyModifiersChanged = 4,
|
|
||||||
}
|
|
||||||
|
|
||||||
internal enum AppEventKind : int
|
|
||||||
{
|
|
||||||
// application events
|
|
||||||
AppActivated = 1,
|
|
||||||
AppDeactivated = 2,
|
|
||||||
AppQuit = 3,
|
|
||||||
AppLaunchNotification = 4,
|
|
||||||
}
|
|
||||||
|
|
||||||
enum AppleEventKind : int
|
|
||||||
{
|
|
||||||
AppleEvent = 1,
|
|
||||||
}
|
|
||||||
|
|
||||||
internal enum EventParamName : int
|
|
||||||
{
|
|
||||||
WindowRef = 0x77696e64, // typeWindowRef,
|
|
||||||
|
|
||||||
// Mouse Events
|
|
||||||
MouseLocation = 0x6d6c6f63, // typeHIPoint
|
|
||||||
WindowMouseLocation = 0x776d6f75, // typeHIPoint
|
|
||||||
MouseButton = 0x6d62746e, // typeMouseButton
|
|
||||||
ClickCount = 0x63636e74, // typeUInt32
|
|
||||||
MouseWheelAxis = 0x6d776178, // typeMouseWheelAxis 'mwax'
|
|
||||||
MouseWheelDelta = 0x6d77646c, // typeSInt32 'mwdl'
|
|
||||||
MouseWheelSmoothVerticalDelta = 0x73617879, // typeSInt32 'saxy'
|
|
||||||
MouseWheelSmoothHorizontalDelta = 0x73617878, // typeSInt32 'saxx'
|
|
||||||
|
|
||||||
MouseDelta = 0x6d647461, // typeHIPoint
|
|
||||||
|
|
||||||
// Keyboard events
|
|
||||||
KeyCode = 0x6b636f64, // typeUInt32
|
|
||||||
KeyMacCharCode = 0x6b636872, // typechar
|
|
||||||
KeyModifiers = 0x6b6d6f64, // typeUInt32
|
|
||||||
|
|
||||||
}
|
|
||||||
internal enum EventParamType : int
|
|
||||||
{
|
|
||||||
typeWindowRef = 0x77696e64,
|
|
||||||
|
|
||||||
typeMouseButton = 0x6d62746e,
|
|
||||||
typeMouseWheelAxis = 0x6d776178,
|
|
||||||
typeHIPoint = 0x68697074,
|
|
||||||
typeHISize = 0x6869737a,
|
|
||||||
typeHIRect = 0x68697263,
|
|
||||||
|
|
||||||
typeChar = 0x54455854,
|
|
||||||
|
|
||||||
typeUInt32 = 0x6d61676e,
|
|
||||||
typeSInt32 = 0x6c6f6e67,
|
|
||||||
typeSInt16 = 0x73686f72,
|
|
||||||
typeSInt64 = 0x636f6d70,
|
|
||||||
typeIEEE32BitFloatingPoint = 0x73696e67,
|
|
||||||
typeIEEE64BitFloatingPoint = 0x646f7562,
|
|
||||||
}
|
|
||||||
|
|
||||||
internal enum EventMouseButton : int
|
|
||||||
{
|
|
||||||
Primary = 0,
|
|
||||||
Secondary = 1,
|
|
||||||
Tertiary = 2,
|
|
||||||
}
|
|
||||||
|
|
||||||
internal enum WindowRegionCode : int
|
|
||||||
{
|
|
||||||
TitleBarRegion = 0,
|
|
||||||
TitleTextRegion = 1,
|
|
||||||
CloseBoxRegion = 2,
|
|
||||||
ZoomBoxRegion = 3,
|
|
||||||
DragRegion = 5,
|
|
||||||
GrowRegion = 6,
|
|
||||||
CollapseBoxRegion = 7,
|
|
||||||
TitleProxyIconRegion = 8,
|
|
||||||
StructureRegion = 32,
|
|
||||||
ContentRegion = 33,
|
|
||||||
UpdateRegion = 34,
|
|
||||||
OpaqueRegion = 35,
|
|
||||||
GlobalPortRegion = 40,
|
|
||||||
ToolbarButtonRegion = 41
|
|
||||||
};
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region --- MacWindows.h ---
|
|
||||||
|
|
||||||
internal enum WindowClass : uint
|
|
||||||
{
|
|
||||||
Alert = 1, /* "I need your attention now."*/
|
|
||||||
MovableAlert = 2, /* "I need your attention now, but I'm kind enough to let you switch out of this app to do other things."*/
|
|
||||||
Modal = 3, /* system modal, not draggable*/
|
|
||||||
MovableModal = 4, /* application modal, draggable*/
|
|
||||||
Floating = 5, /* floats above all other application windows*/
|
|
||||||
Document = 6, /* document windows*/
|
|
||||||
Desktop = 7, /* desktop window (usually only one of these exists) - OS X only in CarbonLib 1.0*/
|
|
||||||
Utility = 8, /* Available in CarbonLib 1.1 and later, and in Mac OS X*/
|
|
||||||
Help = 10, /* Available in CarbonLib 1.1 and later, and in Mac OS X*/
|
|
||||||
Sheet = 11, /* Available in CarbonLib 1.3 and later, and in Mac OS X*/
|
|
||||||
Toolbar = 12, /* Available in CarbonLib 1.1 and later, and in Mac OS X*/
|
|
||||||
Plain = 13, /* Available in CarbonLib 1.2.5 and later, and Mac OS X*/
|
|
||||||
Overlay = 14, /* Available in Mac OS X*/
|
|
||||||
SheetAlert = 15, /* Available in CarbonLib 1.3 and later, and in Mac OS X 10.1 and later*/
|
|
||||||
AltPlain = 16, /* Available in CarbonLib 1.3 and later, and in Mac OS X 10.1 and later*/
|
|
||||||
Drawer = 20, /* Available in Mac OS X 10.2 or later*/
|
|
||||||
All = 0xFFFFFFFFu /* for use with GetFrontWindowOfClass, FindWindowOfClass, GetNextWindowOfClass*/
|
|
||||||
}
|
|
||||||
|
|
||||||
[Flags]
|
|
||||||
internal enum WindowAttributes : uint
|
|
||||||
{
|
|
||||||
NoAttributes = 0u, /* no attributes*/
|
|
||||||
CloseBox = (1u << 0), /* window has a close box*/
|
|
||||||
HorizontalZoom = (1u << 1), /* window has horizontal zoom box*/
|
|
||||||
VerticalZoom = (1u << 2), /* window has vertical zoom box*/
|
|
||||||
FullZoom = (VerticalZoom | HorizontalZoom),
|
|
||||||
CollapseBox = (1u << 3), /* window has a collapse box*/
|
|
||||||
Resizable = (1u << 4), /* window is resizable*/
|
|
||||||
SideTitlebar = (1u << 5), /* window wants a titlebar on the side (floating window class only)*/
|
|
||||||
NoUpdates = (1u << 16), /* this window receives no update events*/
|
|
||||||
NoActivates = (1u << 17), /* this window receives no activate events*/
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// This window uses composited drawing. This means that the entire
|
|
||||||
/// window is comprised of HIViews, and can be treated thusly. This
|
|
||||||
/// attribute must be specified at window creation, and cannot be
|
|
||||||
/// changed later with ChangeWindows. In 64-bit mode, all windows must
|
|
||||||
/// be compositing, and you must always specify this attribute when
|
|
||||||
/// creating a window from code or designing a window in Interface
|
|
||||||
/// Builder. Available on Mac OS X 10.2 and later.
|
|
||||||
/// </summary>
|
|
||||||
Compositing = (1u << 19),
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// This window's context should be scaled to match the display scale
|
|
||||||
/// factor. This attribute can only be used when
|
|
||||||
/// kHIWindowBitCompositing is also enabled. When this attribute is
|
|
||||||
/// enabled, you may not draw with QuickDraw in the window. If this
|
|
||||||
/// attribute is enabled and if the scale factor is something other
|
|
||||||
/// than 1.0, the window's scale mode will be
|
|
||||||
/// kHIWindowScaleModeFrameworkScaled. You may only specify this
|
|
||||||
/// attribute at window creation time. Available for all windows in
|
|
||||||
/// Mac OS X 10.4 and later.
|
|
||||||
/// </summary>
|
|
||||||
FrameworkScaled = (1u << 20),
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// This window has the standard Carbon window event handler
|
|
||||||
/// installed. Available for all windows.
|
|
||||||
/// </summary>
|
|
||||||
StandardHandler = (1u << 25),
|
|
||||||
InWindowMenu = (1u << 27),
|
|
||||||
LiveResize = (1u << 28),
|
|
||||||
StandardDocument = (CloseBox | FullZoom | CollapseBox | Resizable),
|
|
||||||
StandardFloating = (CloseBox | CollapseBox)
|
|
||||||
}
|
|
||||||
|
|
||||||
internal enum WindowPositionMethod : uint
|
|
||||||
{
|
|
||||||
CenterOnMainScreen = 1,
|
|
||||||
CenterOnParentWindow = 2,
|
|
||||||
CenterOnParentWindowScreen = 3,
|
|
||||||
CascadeOnMainScreen = 4,
|
|
||||||
CascadeOnParentWindow = 5,
|
|
||||||
CascadeOnParentWindowScreen = 6,
|
|
||||||
CascadeStartAtParentWindowScreen = 10,
|
|
||||||
AlertPositionOnMainScreen = 7,
|
|
||||||
AlertPositionOnParentWindow = 8,
|
|
||||||
AlertPositionOnParentWindowScreen = 9
|
|
||||||
}
|
|
||||||
|
|
||||||
internal delegate OSStatus MacOSEventHandler(IntPtr inCaller, IntPtr inEvent, IntPtr userData);
|
|
||||||
|
|
||||||
internal enum WindowPartCode : short
|
|
||||||
{
|
|
||||||
inDesk = 0,
|
|
||||||
inNoWindow = 0,
|
|
||||||
inMenuBar = 1,
|
|
||||||
inSysWindow = 2,
|
|
||||||
inContent = 3,
|
|
||||||
inDrag = 4,
|
|
||||||
inGrow = 5,
|
|
||||||
inGoAway = 6,
|
|
||||||
inZoomIn = 7,
|
|
||||||
inZoomOut = 8,
|
|
||||||
inCollapseBox = 11,
|
|
||||||
inProxyIcon = 12,
|
|
||||||
inToolbarButton = 13,
|
|
||||||
inStructure = 15,
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region --- Enums from gestalt.h ---
|
|
||||||
|
|
||||||
internal enum GestaltSelector
|
|
||||||
{
|
|
||||||
SystemVersion = 0x73797376, // FOUR_CHAR_CODE("sysv"), /* system version*/
|
|
||||||
SystemVersionMajor = 0x73797331, // FOUR_CHAR_CODE("sys1"), /* The major system version number; in 10.4.17 this would be the decimal value 10 */
|
|
||||||
SystemVersionMinor = 0x73797332, // FOUR_CHAR_CODE("sys2"), /* The minor system version number; in 10.4.17 this would be the decimal value 4 */
|
|
||||||
SystemVersionBugFix = 0x73797333, // FOUR_CHAR_CODE("sys3") /* The bug fix system version number; in 10.4.17 this would be the decimal value 17 */
|
|
||||||
};
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region --- Process Manager ---
|
|
||||||
|
|
||||||
enum ProcessApplicationTransformState : int
|
|
||||||
{
|
|
||||||
kProcessTransformToForegroundApplication = 1,
|
|
||||||
}
|
|
||||||
|
|
||||||
struct ProcessSerialNumber
|
|
||||||
{
|
|
||||||
public ulong high;
|
|
||||||
public ulong low;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
|
|
||||||
enum HICoordinateSpace
|
|
||||||
{
|
|
||||||
_72DPIGlobal = 1,
|
|
||||||
ScreenPixel = 2,
|
|
||||||
Window = 3,
|
|
||||||
View = 4
|
|
||||||
};
|
|
||||||
|
|
||||||
#region --- Carbon API Methods ---
|
|
||||||
|
|
||||||
internal partial class API
|
|
||||||
{
|
|
||||||
const string carbon = "/System/Library/Frameworks/Carbon.framework/Versions/Current/Carbon";
|
|
||||||
|
|
||||||
[DllImport(carbon)]
|
|
||||||
internal static extern EventClass GetEventClass(IntPtr inEvent);
|
|
||||||
[DllImport(carbon)]
|
|
||||||
internal static extern uint GetEventKind(IntPtr inEvent);
|
|
||||||
|
|
||||||
#region --- Processing Events ---
|
|
||||||
|
|
||||||
[DllImport(carbon)]
|
|
||||||
static extern IntPtr GetEventDispatcherTarget();
|
|
||||||
|
|
||||||
[DllImport(carbon,EntryPoint="ReceiveNextEvent")]
|
|
||||||
static extern OSStatus ReceiveNextEvent(uint inNumTypes,
|
|
||||||
IntPtr inList,
|
|
||||||
double inTimeout,
|
|
||||||
bool inPullEvent,
|
|
||||||
out IntPtr outEvent);
|
|
||||||
|
|
||||||
[DllImport(carbon)]
|
|
||||||
static extern void SendEventToEventTarget(IntPtr theEvent, IntPtr theTarget);
|
|
||||||
|
|
||||||
[DllImport(carbon)]
|
|
||||||
static extern void ReleaseEvent(IntPtr theEvent);
|
|
||||||
|
|
||||||
internal static void SendEvent(IntPtr theEvent)
|
|
||||||
{
|
|
||||||
IntPtr theTarget = GetEventDispatcherTarget();
|
|
||||||
SendEventToEventTarget(theEvent, theTarget);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Processes events in the queue and then returns.
|
|
||||||
internal static void ProcessEvents()
|
|
||||||
{
|
|
||||||
IntPtr theEvent;
|
|
||||||
IntPtr theTarget = GetEventDispatcherTarget();
|
|
||||||
|
|
||||||
for (;;)
|
|
||||||
{
|
|
||||||
OSStatus status = ReceiveNextEvent(0, IntPtr.Zero, 0.0, true, out theEvent);
|
|
||||||
|
|
||||||
if (status == OSStatus.EventLoopTimedOut)
|
|
||||||
break;
|
|
||||||
|
|
||||||
if (status != OSStatus.NoError)
|
|
||||||
{
|
|
||||||
Debug.Print("Message Loop status: {0}", status);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (theEvent == IntPtr.Zero)
|
|
||||||
break;
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
SendEventToEventTarget(theEvent, theTarget);
|
|
||||||
}
|
|
||||||
catch (System.ExecutionEngineException e)
|
|
||||||
{
|
|
||||||
Console.Error.WriteLine("ExecutionEngineException caught.");
|
|
||||||
Console.Error.WriteLine("theEvent: " + new EventInfo(theEvent).ToString());
|
|
||||||
Console.Error.WriteLine(e.Message);
|
|
||||||
Console.Error.WriteLine(e.StackTrace);
|
|
||||||
}
|
|
||||||
|
|
||||||
ReleaseEvent(theEvent);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
#region --- Processing apple event ---
|
|
||||||
|
|
||||||
[StructLayout(LayoutKind.Sequential)]
|
|
||||||
|
|
||||||
struct EventRecord
|
|
||||||
{
|
|
||||||
public ushort what;
|
|
||||||
public uint message;
|
|
||||||
public uint when;
|
|
||||||
public CarbonPoint where;
|
|
||||||
public uint modifiers;
|
|
||||||
}
|
|
||||||
|
|
||||||
[DllImport(carbon)]
|
|
||||||
static extern bool ConvertEventRefToEventRecord(IntPtr inEvent, out EventRecord outEvent);
|
|
||||||
|
|
||||||
[DllImport(carbon)]
|
|
||||||
static extern OSStatus AEProcessAppleEvent(ref EventRecord theEventRecord);
|
|
||||||
|
|
||||||
static internal void ProcessAppleEvent(IntPtr inEvent)
|
|
||||||
{
|
|
||||||
EventRecord record;
|
|
||||||
|
|
||||||
ConvertEventRefToEventRecord(inEvent, out record);
|
|
||||||
AEProcessAppleEvent(ref record);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region --- Event Handlers ---
|
|
||||||
|
|
||||||
[DllImport(carbon,EntryPoint="InstallEventHandler")]
|
|
||||||
static extern OSStatus _InstallEventHandler(
|
|
||||||
IntPtr eventTargetRef, IntPtr handlerProc,
|
|
||||||
int numtypes, EventTypeSpec[] typeList,
|
|
||||||
IntPtr userData, IntPtr handlerRef);
|
|
||||||
|
|
||||||
internal static void InstallApplicationEventHandler(IntPtr uppHandlerProc,
|
|
||||||
EventTypeSpec[] eventTypes, IntPtr userData, IntPtr handlerRef)
|
|
||||||
{
|
|
||||||
|
|
||||||
OSStatus error = _InstallEventHandler(GetApplicationEventTarget(), uppHandlerProc,
|
|
||||||
eventTypes.Length, eventTypes,
|
|
||||||
userData, handlerRef);
|
|
||||||
|
|
||||||
if (error != OSStatus.NoError)
|
|
||||||
{
|
|
||||||
throw new MacOSException(error);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
[DllImport(carbon)]
|
|
||||||
internal static extern OSStatus RemoveEventHandler(IntPtr inHandlerRef);
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region --- GetWindowEventTarget ---
|
|
||||||
|
|
||||||
[DllImport(carbon)]
|
|
||||||
internal static extern IntPtr GetWindowEventTarget(IntPtr window);
|
|
||||||
|
|
||||||
[DllImport(carbon)]
|
|
||||||
internal static extern IntPtr GetApplicationEventTarget();
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
#region --- UPP Event Handlers ---
|
|
||||||
|
|
||||||
[DllImport(carbon)]
|
|
||||||
internal static extern IntPtr NewEventHandlerUPP(MacOSEventHandler handler);
|
|
||||||
|
|
||||||
[DllImport(carbon)]
|
|
||||||
internal static extern void DisposeEventHandlerUPP(IntPtr userUPP);
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
#region --- Process Manager ---
|
|
||||||
|
|
||||||
[DllImport(carbon)]
|
|
||||||
internal static extern int TransformProcessType(ref Carbon.ProcessSerialNumber psn, ProcessApplicationTransformState type);
|
|
||||||
[DllImport(carbon)]
|
|
||||||
internal static extern int GetCurrentProcess(ref Carbon.ProcessSerialNumber psn);
|
|
||||||
[DllImport(carbon)]
|
|
||||||
internal static extern int SetFrontProcess(ref Carbon.ProcessSerialNumber psn);
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
#region --- Setting Dock Tile ---
|
|
||||||
|
|
||||||
[DllImport(carbon)]
|
|
||||||
internal extern static IntPtr CGColorSpaceCreateDeviceRGB();
|
|
||||||
[DllImport(carbon)]
|
|
||||||
internal extern static IntPtr CGDataProviderCreateWithData(IntPtr info, IntPtr[] data, int size, IntPtr releasefunc);
|
|
||||||
[DllImport(carbon)]
|
|
||||||
internal extern static IntPtr CGImageCreate(int width, int height, int bitsPerComponent, int bitsPerPixel, int bytesPerRow, IntPtr colorspace, uint bitmapInfo, IntPtr provider, IntPtr decode, int shouldInterpolate, int intent);
|
|
||||||
[DllImport(carbon)]
|
|
||||||
internal extern static void SetApplicationDockTileImage(IntPtr imageRef);
|
|
||||||
[DllImport(carbon)]
|
|
||||||
internal extern static void RestoreApplicationDockTileImage();
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
[DllImport(carbon)]
|
|
||||||
static extern IntPtr GetControlBounds(IntPtr control, out Rect bounds);
|
|
||||||
|
|
||||||
internal static Rect GetControlBounds(IntPtr control)
|
|
||||||
{
|
|
||||||
Rect retval;
|
|
||||||
GetControlBounds(control, out retval);
|
|
||||||
|
|
||||||
return retval;
|
|
||||||
}
|
|
||||||
|
|
||||||
[DllImport(carbon)]
|
|
||||||
internal static extern void RunApplicationEventLoop();
|
|
||||||
|
|
||||||
[DllImport(carbon)]
|
|
||||||
internal static extern void QuitApplicationEventLoop();
|
|
||||||
|
|
||||||
#region --- Menus ---
|
|
||||||
|
|
||||||
[DllImport(carbon)]
|
|
||||||
internal static extern IntPtr AcquireRootMenu();
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
const string gestaltlib = "/System/Library/Frameworks/Carbon.framework/Versions/Current/Carbon";
|
|
||||||
|
|
||||||
[DllImport(gestaltlib)]
|
|
||||||
internal static extern OSStatus Gestalt(GestaltSelector selector, out int response);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,112 +0,0 @@
|
||||||
#region License
|
|
||||||
//
|
|
||||||
// The Open Toolkit Library License
|
|
||||||
//
|
|
||||||
// Copyright (c) 2006 - 2010 the Open Toolkit library.
|
|
||||||
//
|
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
// of this software and associated documentation files (the "Software"), to deal
|
|
||||||
// in the Software without restriction, including without limitation the rights to
|
|
||||||
// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
|
||||||
// the Software, and to permit persons to whom the Software is furnished to do
|
|
||||||
// so, subject to the following conditions:
|
|
||||||
//
|
|
||||||
// The above copyright notice and this permission notice shall be included in all
|
|
||||||
// copies or substantial portions of the Software.
|
|
||||||
//
|
|
||||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
||||||
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
|
||||||
// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
||||||
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
|
||||||
// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
|
||||||
// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
||||||
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
|
||||||
// OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
//
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
// Created by Erik Ylvisaker on 3/17/08.
|
|
||||||
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.IO;
|
|
||||||
using System.Text;
|
|
||||||
|
|
||||||
namespace OpenTK.Platform.MacOS.Carbon
|
|
||||||
{
|
|
||||||
internal struct EventInfo
|
|
||||||
{
|
|
||||||
internal EventInfo(IntPtr eventRef)
|
|
||||||
{
|
|
||||||
this._eventClass = API.GetEventClass(eventRef);
|
|
||||||
this._eventKind = API.GetEventKind(eventRef);
|
|
||||||
}
|
|
||||||
|
|
||||||
uint _eventKind;
|
|
||||||
EventClass _eventClass;
|
|
||||||
|
|
||||||
public EventClass EventClass
|
|
||||||
{
|
|
||||||
get { return _eventClass; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public WindowEventKind WindowEventKind
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
if (EventClass == EventClass.Window)
|
|
||||||
return (WindowEventKind)_eventKind;
|
|
||||||
else
|
|
||||||
throw new InvalidCastException("Event is not a Window event.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
public KeyboardEventKind KeyboardEventKind
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
if (EventClass == EventClass.Keyboard)
|
|
||||||
return (KeyboardEventKind)_eventKind;
|
|
||||||
else
|
|
||||||
throw new InvalidCastException("Event is not a Keyboard event.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
public MouseEventKind MouseEventKind
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
if (EventClass == EventClass.Mouse)
|
|
||||||
return (MouseEventKind)_eventKind;
|
|
||||||
else
|
|
||||||
throw new InvalidCastException("Event is not an Mouse event.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
public AppEventKind AppEventKind
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
if (EventClass == EventClass.Application)
|
|
||||||
return (AppEventKind)_eventKind;
|
|
||||||
else
|
|
||||||
throw new InvalidCastException("Event is not an Application event.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public override string ToString()
|
|
||||||
{
|
|
||||||
switch (EventClass)
|
|
||||||
{
|
|
||||||
case EventClass.Application:
|
|
||||||
return "Event: App " + AppEventKind.ToString();
|
|
||||||
case EventClass.Keyboard:
|
|
||||||
return "Event: Keyboard " + KeyboardEventKind.ToString();
|
|
||||||
case EventClass.Mouse:
|
|
||||||
return "Event: Mouse " + MouseEventKind.ToString();
|
|
||||||
case EventClass.Window:
|
|
||||||
return "Event: Window " + WindowEventKind.ToString();
|
|
||||||
}
|
|
||||||
|
|
||||||
return "Event: Unknown Class " + EventClass.ToString() + " kind: " + _eventKind.ToString();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in a new issue