[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">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Platform\MacOS\EventInfo.cs">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Platform\MacOS\MacOSFactory.cs">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
|
@ -291,9 +288,6 @@
|
|||
<Compile Include="Platform\MacOS\MacOSKeyMap.cs">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Platform\MacOS\Application.cs">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Platform\MacOS\QuartzDisplayDeviceDriver.cs">
|
||||
<SubType>Code</SubType>
|
||||
</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.Runtime.InteropServices;
|
||||
using System.Diagnostics;
|
||||
#if !MINIMAL
|
||||
using System.Drawing;
|
||||
#endif
|
||||
|
||||
using EventTime = System.Double;
|
||||
|
||||
|
||||
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 ---
|
||||
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
|
@ -129,11 +40,13 @@ namespace OpenTK.Platform.MacOS.Carbon
|
|||
{
|
||||
public float X;
|
||||
public float Y;
|
||||
|
||||
public HIPoint(float x, float y)
|
||||
{
|
||||
X = x;
|
||||
Y = y;
|
||||
}
|
||||
|
||||
public HIPoint(double x, double y)
|
||||
: this((float)x, (float)y)
|
||||
{ }
|
||||
|
@ -160,552 +73,6 @@ namespace OpenTK.Platform.MacOS.Carbon
|
|||
}
|
||||
|
||||
#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