chore: initial commit

This commit is contained in:
fallenoak 2023-01-02 13:17:18 -06:00
commit 70b00c5c38
No known key found for this signature in database
GPG key ID: 7628F8E61AEA070D
965 changed files with 264882 additions and 0 deletions

48
src/app/CMakeLists.txt Normal file
View file

@ -0,0 +1,48 @@
if(WHOA_SYSTEM_MAC)
file(GLOB PRIVATE_SOURCES "mac/*.cpp" "mac/*.mm")
set_source_files_properties(${PRIVATE_SOURCES}
PROPERTIES COMPILE_FLAGS "-x objective-c++"
)
add_executable(Whoa ${PRIVATE_SOURCES})
target_link_libraries(Whoa
PRIVATE
client
event
gx
net
util
"-framework AppKit"
"-framework Carbon"
"-framework IOKit"
)
install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/mac/MainMenu.nib DESTINATION "bin")
endif()
if(WHOA_SYSTEM_LINUX)
file(GLOB PRIVATE_SOURCES "linux/*.cpp")
add_executable(Whoa ${PRIVATE_SOURCES})
target_link_libraries(Whoa
PRIVATE
client
event
gx
net
util
)
endif()
target_include_directories(Whoa
PRIVATE
${CMAKE_SOURCE_DIR}/src
)
# Windows executables yet to be done
if(WHOA_SYSTEM_MAC OR WHOA_SYSTEM_LINUX)
install(TARGETS Whoa DESTINATION "bin")
endif()

11
src/app/linux/Wowre.cpp Normal file
View file

@ -0,0 +1,11 @@
#include "client/Client.hpp"
int main(int argc, char* argv[]) {
// TODO
CommonMain();
// TODO
return 0;
}

View file

@ -0,0 +1,16 @@
#ifndef APP_MAC_ENGINE_GL_LAYER_VIEW_H
#define APP_MAC_ENGINE_GL_LAYER_VIEW_H
#include "gx/gll/GLLayerView.h"
#include <AppKit/AppKit.h>
#include <Foundation/Foundation.h>
@interface EngineGLLayerView : GLLayerView
- (void)insertText:(id)string;
- (void)keyDown:(NSEvent*)event;
@end
#endif

View file

@ -0,0 +1,41 @@
#include "app/mac/EngineGLLayerView.h"
#include "app/mac/MacClient.h"
#include "event/Input.hpp"
#include <Carbon/Carbon.h>
@implementation EngineGLLayerView
- (void)insertText:(id)string {
// TODO
}
- (void)keyDown:(NSEvent*)event {
uint32_t keyCode = event.keyCode;
MacClient::CheckKeyboardLayout();
if (keyCode <= 0x7F) {
uint32_t key = MacClient::s_keyConversion[keyCode];
if (key != KEY_NONE) {
OsQueuePut(OS_INPUT_KEY_DOWN, key, 0, 0, 0);
}
}
if (MacClient::GetTextInputEnabled()) {
auto events = [NSArray arrayWithObject:event];
[self interpretKeyEvents:events];
} else {
EventRef eventRef = static_cast<EventRef>(const_cast<void*>([event eventRef]));
uint8_t chr;
if (GetEventParameter(eventRef, 'kchr', 'TEXT', 0, 1, 0, &chr) == noErr) {
if (chr > 0x1F && chr <= 0x7E) {
OsQueuePut(OS_INPUT_CHAR, chr, 1, 0, 0);
}
}
}
}
@end

30
src/app/mac/MacClient.h Normal file
View file

@ -0,0 +1,30 @@
#ifndef APP_MAC_MAC_CLIENT_H
#define APP_MAC_MAC_CLIENT_H
#include "event/Event.hpp"
#include <cstdint>
class MacClient {
public:
enum ClipboardAction {
ClipboardUndo = 1,
ClipboardCut = 2,
ClipboardCopy = 3,
ClipboardPaste = 4,
ClipboardSelectAll = 5
};
static void* s_currentKeyboardLayout;
static KEY s_specialKeyConversion[128];
static KEY s_keyConversion[128];
static void CheckKeyboardLayout(void);
static double GetMouseSpeed(void);
static bool GetTextInputEnabled(void);
static void InitializeKeyConversion(void);
static bool IsUsingGLLayer(void);
static void PostClipboardKeyEvents(MacClient::ClipboardAction);
static void SetMouseCoalescingEnabled(bool);
};
#endif

375
src/app/mac/MacClient.mm Normal file
View file

@ -0,0 +1,375 @@
#include "app/mac/MacClient.h"
#include "event/Input.hpp"
#include "os/Compat.hpp"
#include <AppKit/AppKit.h>
#include <Carbon/Carbon.h>
#include <IOKit/IOKitLib.h>
#include <IOKit/hidsystem/event_status_driver.h>
#include <IOKit/hidsystem/IOHIDLib.h>
#include <IOKit/hidsystem/IOHIDParameter.h>
void* MacClient::s_currentKeyboardLayout = nullptr;
KEY MacClient::s_specialKeyConversion[128] = {
KEY_NONE,
KEY_NONE,
KEY_NONE,
KEY_NONE,
KEY_NONE,
KEY_NONE,
KEY_NONE,
KEY_NONE,
KEY_NONE,
KEY_NONE,
KEY_NONE,
KEY_NONE,
KEY_NONE,
KEY_NONE,
KEY_NONE,
KEY_NONE,
KEY_NONE,
KEY_NONE,
KEY_1, // kVK_ANSI_1 (0x12)
KEY_2, // kVK_ANSI_2 (0x13)
KEY_3, // kVK_ANSI_3 (0x14)
KEY_4, // kVK_ANSI_4 (0x15)
KEY_6, // kVK_ANSI_6 (0x16)
KEY_5, // kVK_ANSI_5 (0x17)
KEY_NONE,
KEY_9, // kVK_ANSI_9 (0x19)
KEY_7, // kVK_ANSI_7 (0x1A)
KEY_NONE,
KEY_8, // kVK_ANSI_8 (0x1C)
KEY_0, // kVK_ANSI_0 (0x1D)
KEY_NONE,
KEY_NONE,
KEY_NONE,
KEY_NONE,
KEY_NONE,
KEY_NONE,
KEY_ENTER, // kVK_Return (0x24)
KEY_NONE,
KEY_NONE,
KEY_NONE,
KEY_NONE,
KEY_NONE,
KEY_NONE,
KEY_NONE,
KEY_NONE,
KEY_NONE,
KEY_NONE,
KEY_NONE,
KEY_TAB, // kVK_Tab (0x30)
KEY_SPACE, // kVK_Space (0x31)
KEY_NONE,
KEY_BACKSPACE, // kVK_Delete (0x33)
KEY_NONE,
KEY_ESCAPE, // kVK_Escape (0x35)
KEY_NONE,
KEY_NONE,
KEY_LSHIFT, // kVK_Shift (0x38)
KEY_CAPSLOCK, // kVK_CapsLock (0x39)
KEY_LALT, // kVK_Option (0x3A)
KEY_LCONTROL, // kVK_Control (0x3B)
KEY_RSHIFT, // kVK_RightShift (0x3C)
KEY_RALT, // kVK_RightOption (0x3D)
KEY_RCONTROL, // kVK_RightControl (0x3E)
KEY_NONE,
KEY_F17, // kVK_F17 (0x40)
KEY_NUMPAD_DECIMAL, // kVK_ANSI_KeypadDecimal (0x41)
KEY_NONE,
KEY_NUMPAD_MULTIPLY, // kVK_ANSI_KeypadMultiply (0x43)
KEY_NONE,
KEY_NUMPAD_PLUS, // kVK_ANSI_KeypadPlus (0x45)
KEY_NONE,
KEY_NUMLOCK, // kVK_ANSI_KeypadClear (0x47)
KEY_NONE,
KEY_NONE,
KEY_NONE,
KEY_NUMPAD_DIVIDE, // kVK_ANSI_KeypadDivide (0x4B)
KEY_ENTER, // kVK_ANSI_KeypadEnter (0x4C)
KEY_NONE,
KEY_NUMPAD_MINUS, // kVK_ANSI_KeypadMinus (0x4E)
KEY_F18, // kVK_F18 (0x4F)
KEY_F19, // kVK_F19 (0x50)
KEY_NUMPAD_EQUALS, // kVK_ANSI_KeypadEquals (0x51)
KEY_NUMPAD0, // kVK_ANSI_Keypad0 (0x52)
KEY_NUMPAD1, // kVK_ANSI_Keypad1 (0x53)
KEY_NUMPAD2, // kVK_ANSI_Keypad2 (0x54)
KEY_NUMPAD3, // kVK_ANSI_Keypad3 (0x55)
KEY_NUMPAD4, // kVK_ANSI_Keypad4 (0x56)
KEY_NUMPAD5, // kVK_ANSI_Keypad5 (0x57)
KEY_NUMPAD6, // kVK_ANSI_Keypad6 (0x58)
KEY_NUMPAD7, // kVK_ANSI_Keypad7 (0x59)
KEY_NONE,
KEY_NUMPAD8, // kVK_ANSI_Keypad8 (0x5B)
KEY_NUMPAD9, // kVK_ANSI_Keypad9 (0x5C)
KEY_NONE,
KEY_NONE,
KEY_NONE,
KEY_F5, // kVK_F5 (0x60)
KEY_F6, // kVK_F6 (0x61)
KEY_F7, // kVK_F7 (0x62)
KEY_F3, // kVK_F3 (0x63)
KEY_F8, // kVK_F8 (0x64)
KEY_F9, // kVK_F9 (0x65)
KEY_NONE,
KEY_F11, // kVK_F11 (0x67)
KEY_NONE,
KEY_F13, // kVK_F13 (0x69)
KEY_F16, // kVK_F16 (0x6A)
KEY_F14, // kVK_F14 (0x6B)
KEY_NONE,
KEY_F10, // kVK_F10 (0x6D)
KEY_NONE,
KEY_F12, // kVK_F12 (0x6F)
KEY_NONE,
KEY_F15, // kVK_F15 (0x71)
KEY_INSERT, // kVK_Help (0x72)
KEY_HOME, // kVK_Home (0x73)
KEY_PAGEUP, // kVK_PageUp (0x74)
KEY_DELETE, // kVK_ForwardDelete (0x75)
KEY_F4, // kVK_F4 (0x76)
KEY_END, // kVK_End (0x77)
KEY_F2, // kVK_F2 (0x78)
KEY_PAGEDOWN, // kVK_PageDown (0x79)
KEY_F1, // kVK_F1 (0x7A)
KEY_LEFT, // kVK_LeftArrow (0x7B)
KEY_RIGHT, // kVK_RightArrow (0x7C)
KEY_DOWN, // kVK_DownArrow (0x7D)
KEY_UP, // kVK_UpArrow (0x7E)
KEY_NONE
};
KEY MacClient::s_keyConversion[128];
void MacClient::CheckKeyboardLayout() {
#if WHOA_SYSTEM_VERSION < WHOA_MACOS_10_6
void* KCHR = reinterpret_cast<void*>(GetScriptManagerVariable(smKCHRCache));
if (MacClient::s_currentKeyboardLayout != KCHR) {
MacClient::InitializeKeyConversion();
MacClient::s_currentKeyboardLayout = KCHR;
}
#endif
#if WHOA_SYSTEM_VERSION >= WHOA_MACOS_10_6
TISInputSourceRef inputSrc = TISCopyCurrentKeyboardLayoutInputSource();
CFDataRef layoutData = static_cast<CFDataRef>(TISGetInputSourceProperty(inputSrc, kTISPropertyUnicodeKeyLayoutData));
const UCKeyboardLayout* keyboardLayout = reinterpret_cast<const UCKeyboardLayout*>(CFDataGetBytePtr(layoutData));
if (MacClient::s_currentKeyboardLayout != keyboardLayout) {
MacClient::InitializeKeyConversion();
MacClient::s_currentKeyboardLayout = const_cast<UCKeyboardLayout*>(keyboardLayout);
}
#endif
}
double MacClient::GetMouseSpeed() {
#if WHOA_SYSTEM_VERSION < WHOA_MACOS_10_12
double mouseSpeed = 1.0;
NXEventHandle handle = NXOpenEventStatus();
if (handle) {
IOHIDGetAccelerationWithKey(handle, CFSTR(kIOHIDMouseAccelerationType), &mouseSpeed);
NXCloseEventStatus(handle);
}
return mouseSpeed;
#endif
#if WHOA_SYSTEM_VERSION >= WHOA_MACOS_10_12
double mouseSpeed = 1.0;
io_service_t service = IORegistryEntryFromPath(kIOMasterPortDefault, kIOServicePlane ":/IOResources/IOHIDSystem");
if (service != MACH_PORT_NULL) {
CFDictionaryRef parameters = static_cast<CFDictionaryRef>(IORegistryEntryCreateCFProperty(service, CFSTR(kIOHIDParametersKey), kCFAllocatorDefault, kNilOptions));
CFNumberRef speedParameter = static_cast<CFNumberRef>(CFDictionaryGetValue(parameters, CFSTR(kIOHIDMouseAccelerationType)));
if (speedParameter) {
int32_t number;
if (CFNumberGetValue(static_cast<CFNumberRef>(speedParameter), kCFNumberSInt32Type, &number)) {
mouseSpeed = static_cast<double>(number) / 65536.0;
}
}
CFRelease(parameters);
IOObjectRelease(service);
}
return mouseSpeed;
#endif
}
bool MacClient::GetTextInputEnabled() {
// TODO
return false;
}
void MacClient::InitializeKeyConversion() {
memcpy(MacClient::s_keyConversion, MacClient::s_specialKeyConversion, sizeof(MacClient::s_specialKeyConversion));
#if WHOA_SYSTEM_VERSION < WHOA_MACOS_10_6
void* KCHR = reinterpret_cast<void*>(GetScriptManagerVariable(smKCHRCache));
if (KCHR) {
for (uint16_t i = 0; i < 128; i++) {
if (MacClient::s_keyConversion[i] == KEY_NONE) {
uint16_t translate = i | (1 << 7);
uint32_t state = 0;
uint32_t value = KeyTranslate(KCHR, translate, &state);
if (state) {
value = KeyTranslate(KCHR, translate, &state);
}
if (value) {
value = value - 97 <= 25 ? value - 32 : value;
auto string = CFStringCreateWithBytes(
nullptr,
reinterpret_cast<uint8_t*>(&value),
1,
0,
false
);
if (string) {
CFIndex len;
CFRange range = CFRangeMake(0, 1);
CFStringGetBytes(
string,
range,
kCFStringEncodingISOLatin1,
0,
0,
reinterpret_cast<uint8_t*>(&value),
1,
&len
);
if (len && value) {
MacClient::s_keyConversion[i] = static_cast<KEY>(value);
}
}
}
}
}
}
#endif
#if WHOA_SYSTEM_VERSION >= WHOA_MACOS_10_6
TISInputSourceRef inputSrc = TISCopyCurrentKeyboardLayoutInputSource();
CFDataRef layoutData = static_cast<CFDataRef>(TISGetInputSourceProperty(inputSrc, kTISPropertyUnicodeKeyLayoutData));
const UCKeyboardLayout* keyboardLayout = reinterpret_cast<const UCKeyboardLayout*>(CFDataGetBytePtr(layoutData));
const uint32_t keyboardType = LMGetKbdType();
if (keyboardLayout) {
for (uint16_t i = 0; i < 128; i++) {
if (MacClient::s_keyConversion[i] == KEY_NONE) {
uint16_t vkey = i;
uint32_t state = 0;
UniChar buf[1];
UniCharCount len;
OSStatus res = UCKeyTranslate(
keyboardLayout,
vkey,
kUCKeyActionUp,
0,
keyboardType,
0,
&state,
1,
&len,
buf
);
if (res != noErr) {
continue;
}
if (state) {
res = UCKeyTranslate(
keyboardLayout,
vkey,
kUCKeyActionUp,
0,
keyboardType,
0,
&state,
1,
&len,
buf
);
if (res != noErr) {
continue;
}
}
uint16_t value = buf[0];
if (len && value) {
value = value >= 97 && value <= 122 ? value - 32 : value;
MacClient::s_keyConversion[i] = static_cast<KEY>(value);
}
}
}
}
#endif
}
bool MacClient::IsUsingGLLayer() {
return true;
}
void MacClient::PostClipboardKeyEvents(MacClient::ClipboardAction action) {
int32_t v1;
switch (action) {
case ClipboardUndo:
v1 = 90;
break;
case ClipboardCut:
v1 = 88;
break;
case ClipboardCopy:
v1 = 67;
break;
case ClipboardPaste:
v1 = 86;
break;
case ClipboardSelectAll:
v1 = 65;
break;
default:
return;
}
OsInputPostEvent(OS_INPUT_KEY_DOWN, 2, 0, 0, 0);
OsInputPostEvent(OS_INPUT_KEY_DOWN, v1, 0, 0, 0);
OsInputPostEvent(OS_INPUT_KEY_UP, v1, 0, 0, 0);
OsInputPostEvent(OS_INPUT_KEY_UP, 2, 0, 0, 0);
}
void MacClient::SetMouseCoalescingEnabled(bool enabled) {
#if WHOA_SYSTEM_VERSION < WHOA_MACOS_10_5
bool prevEnabled = false;
SetMouseCoalescingEnabled(true, &prevEnabled);
#endif
#if WHOA_SYSTEM_VERSION >= WHOA_MACOS_10_5
[NSEvent setMouseCoalescingEnabled: enabled];
#endif
}

8
src/app/mac/Main.nib/classes.nib generated Executable file
View file

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>IBVersion</key>
<string>1</string>
</dict>
</plist>

18
src/app/mac/Main.nib/info.nib generated Executable file
View file

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>IBFramework Version</key>
<string>677</string>
<key>IBLastKnownRelativeProjectPath</key>
<string>../../../WoW.xcodeproj</string>
<key>IBOldestOS</key>
<integer>3</integer>
<key>IBOpenObjects</key>
<array/>
<key>IBSystem Version</key>
<string>9J61</string>
<key>targetFramework</key>
<string>IBCarbonFramework</string>
</dict>
</plist>

131
src/app/mac/Main.nib/objects.xib Executable file
View file

@ -0,0 +1,131 @@
<?xml version="1.0" standalone="yes"?>
<object class="NSIBObjectData">
<object name="rootObject" class="NSCustomObject" id="1">
</object>
<array count="17" name="allObjects">
<object class="IBCarbonMenuItem" id="144">
<string name="title">Paste</string>
<string name="keyEquivalent">v</string>
<ostype name="command">past</ostype>
</object>
<object class="IBCarbonMenuItem" id="142">
<boolean name="separator">TRUE</boolean>
</object>
<object class="IBCarbonMenuItem" id="149">
<string name="title">Copy</string>
<string name="keyEquivalent">c</string>
<ostype name="command">copy</ostype>
</object>
<object class="IBCarbonMenuItem" id="183">
<string name="title">About World of Warcraft...</string>
<int name="keyEquivalentModifier">0</int>
<ostype name="command">abou</ostype>
</object>
<object class="IBCarbonMenu" id="181">
<string name="title">World of Warcraft</string>
<string name="name">_NSAppleMenu</string>
<array count="3" name="items">
<reference idRef="183"/>
<object class="IBCarbonMenuItem" id="186">
<boolean name="separator">TRUE</boolean>
</object>
<object class="IBCarbonMenuItem" id="187">
<string name="title">Switch To Full Screen Mode</string>
<string name="keyEquivalent">m</string>
<ostype name="command">Full</ostype>
</object>
</array>
</object>
<object class="IBCarbonMenuItem" id="152">
<string name="title">Edit</string>
<object name="submenu" class="IBCarbonMenu" id="147">
<string name="title">Edit</string>
<int name="menuID">128</int>
<array count="6" name="items">
<object class="IBCarbonMenuItem" id="141">
<string name="title">Undo</string>
<string name="keyEquivalent">z</string>
<ostype name="command">undo</ostype>
</object>
<reference idRef="142"/>
<object class="IBCarbonMenuItem" id="143">
<string name="title">Cut</string>
<string name="keyEquivalent">x</string>
<ostype name="command">cut </ostype>
</object>
<reference idRef="149"/>
<reference idRef="144"/>
<object class="IBCarbonMenuItem" id="148">
<string name="title">Select All</string>
<string name="keyEquivalent">a</string>
<ostype name="command">sall</ostype>
</object>
</array>
</object>
</object>
<object class="IBCarbonMenu" id="29">
<string name="title">Untitled</string>
<string name="name">_NSMainMenu</string>
<array count="2" name="items">
<object class="IBCarbonMenuItem" id="182">
<string name="title">World of Warcraft</string>
<reference name="submenu" idRef="181"/>
</object>
<reference idRef="152"/>
</array>
</object>
<reference idRef="141"/>
<reference idRef="143"/>
<object class="IBCarbonMenuItem" id="198">
<string name="title">Show BatchViewer</string>
<boolean name="notPreviousAlternate">TRUE</boolean>
<ostype name="command">BVwr</ostype>
</object>
<reference idRef="187"/>
<reference idRef="182"/>
<object class="IBCarbonMenuItem" id="199">
<string name="title">Show GL Layer Setup</string>
<boolean name="notPreviousAlternate">TRUE</boolean>
<ostype name="command">GLLs</ostype>
</object>
<object class="IBCarbonMenu" id="197">
<string name="title">Batch Viewer</string>
<array count="2" name="items">
<reference idRef="198"/>
<reference idRef="199"/>
</array>
</object>
<reference idRef="186"/>
<reference idRef="147"/>
<reference idRef="148"/>
</array>
<array count="17" name="allParents">
<reference idRef="147"/>
<reference idRef="147"/>
<reference idRef="147"/>
<reference idRef="181"/>
<reference idRef="182"/>
<reference idRef="29"/>
<reference idRef="1"/>
<reference idRef="147"/>
<reference idRef="147"/>
<reference idRef="197"/>
<reference idRef="181"/>
<reference idRef="29"/>
<reference idRef="197"/>
<reference idRef="1"/>
<reference idRef="181"/>
<reference idRef="152"/>
<reference idRef="147"/>
</array>
<dictionary count="3" name="nameTable">
<string>BatchViewerMenu</string>
<reference idRef="197"/>
<string>File&apos;s Owner</string>
<reference idRef="1"/>
<string>MenuBar</string>
<reference idRef="29"/>
</dictionary>
<string name="targetFramework">IBCarbonFramework</string>
<unsigned_int name="nextObjectID">200</unsigned_int>
</object>

597
src/app/mac/Main.xib Normal file
View file

@ -0,0 +1,597 @@
<?xml version="1.0" encoding="UTF-8"?>
<archive type="com.apple.InterfaceBuilder3.Carbon.XIB" version="8.00">
<data>
<int key="IBDocument.SystemTarget">1030</int>
<string key="IBDocument.SystemVersion">15G19009</string>
<string key="IBDocument.InterfaceBuilderVersion">11000</string>
<string key="IBDocument.AppKitVersion">1404.47</string>
<string key="IBDocument.HIToolboxVersion">807.20</string>
<dictionary class="NSMutableDictionary" key="IBDocument.PluginVersions"/>
<array class="NSMutableArray" key="IBDocument.EditedObjectIDs"/>
<array key="IBDocument.PluginDependencies" id="0"/>
<dictionary class="NSMutableDictionary" key="IBDocument.Metadata"/>
<array class="NSMutableArray" key="IBDocument.RootObjects" id="234250886">
<object class="IBHIMenu" id="783341525">
<string key="NSTitle">Untitled</string>
<array class="NSMutableArray" key="NSMenuItems">
<object class="IBHIMenuItem" id="374205419">
<reference key="NSMenu" ref="783341525"/>
<string key="NSTitle">World of Warcraft</string>
<string key="NSKeyEquiv"/>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<object class="NSImage" key="NSOnImage" id="678796781">
<string key="NSName">NSMenuCheckmark</string>
<int key="NSImageFlags">-1396703232</int>
</object>
<object class="NSImage" key="NSMixedImage" id="788635175">
<string key="NSName">NSMenuMixedState</string>
<int key="NSImageFlags">-1396703232</int>
</object>
<string key="NSAction">submenuAction:</string>
<reference key="NSTarget" ref="273282363"/>
<object class="IBHIMenu" key="NSSubmenu" id="273282363">
<string key="NSTitle">World of Warcraft</string>
<array class="NSMutableArray" key="NSMenuItems">
<object class="IBHIMenuItem" id="962291476">
<reference key="NSMenu" ref="273282363"/>
<string key="NSTitle">About World of Warcraft...</string>
<string key="NSKeyEquiv"/>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="678796781"/>
<reference key="NSMixedImage" ref="788635175"/>
<string key="title">About World of Warcraft...</string>
<string key="keyEquivalent"/>
<integer value="0" key="disabled"/>
<integer value="0" key="checked"/>
<integer value="0" key="submenuParentChoosable"/>
<integer value="0" key="dynamic"/>
<integer value="0" key="notPreviousAlternate"/>
<integer value="0" key="hidden"/>
<integer value="0" key="ignoreMeta"/>
<integer value="0" key="sectionHeader"/>
<integer value="0" key="customDraw"/>
<integer value="0" key="autoRepeat"/>
<integer value="0" key="autoDisable"/>
<integer value="0" key="updateSingleItem"/>
<integer value="0" key="includeInCmdKeyMatching"/>
<integer value="0" key="keyEquivalentModifierMask"/>
<integer value="1633841013" key="command"/>
<nil key="helpTagText"/>
<nil key="helpTagExtendedText"/>
<integer value="0" key="helpTagDisplaySide"/>
</object>
<object class="IBHIMenuItem" id="28259413">
<reference key="NSMenu" ref="273282363"/>
<bool key="NSIsSeparator">YES</bool>
<string key="NSTitle"/>
<string key="NSKeyEquiv"/>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="678796781"/>
<reference key="NSMixedImage" ref="788635175"/>
<string key="title"/>
<string key="keyEquivalent"/>
<integer value="0" key="disabled"/>
<integer value="0" key="checked"/>
<integer value="0" key="submenuParentChoosable"/>
<integer value="0" key="dynamic"/>
<integer value="0" key="notPreviousAlternate"/>
<integer value="0" key="hidden"/>
<integer value="0" key="ignoreMeta"/>
<integer value="0" key="sectionHeader"/>
<integer value="0" key="customDraw"/>
<integer value="0" key="autoRepeat"/>
<integer value="0" key="autoDisable"/>
<integer value="0" key="updateSingleItem"/>
<integer value="0" key="includeInCmdKeyMatching"/>
<integer value="1048576" key="keyEquivalentModifierMask"/>
<integer value="0" key="command"/>
<nil key="helpTagText"/>
<nil key="helpTagExtendedText"/>
<integer value="0" key="helpTagDisplaySide"/>
</object>
<object class="IBHIMenuItem" id="716945557">
<reference key="NSMenu" ref="273282363"/>
<string key="NSTitle">Switch To Full Screen Mode</string>
<string key="NSKeyEquiv">m</string>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="678796781"/>
<reference key="NSMixedImage" ref="788635175"/>
<string key="title">Switch To Full Screen Mode</string>
<string key="keyEquivalent">m</string>
<integer value="0" key="disabled"/>
<integer value="0" key="checked"/>
<integer value="0" key="submenuParentChoosable"/>
<integer value="0" key="dynamic"/>
<integer value="0" key="notPreviousAlternate"/>
<integer value="0" key="hidden"/>
<integer value="0" key="ignoreMeta"/>
<integer value="0" key="sectionHeader"/>
<integer value="0" key="customDraw"/>
<integer value="0" key="autoRepeat"/>
<integer value="0" key="autoDisable"/>
<integer value="0" key="updateSingleItem"/>
<integer value="0" key="includeInCmdKeyMatching"/>
<integer value="1048576" key="keyEquivalentModifierMask"/>
<integer value="1182100588" key="command"/>
<nil key="helpTagText"/>
<nil key="helpTagExtendedText"/>
<integer value="0" key="helpTagDisplaySide"/>
</object>
</array>
<string key="name">_NSAppleMenu</string>
<string key="title">World of Warcraft</string>
<integer value="0" key="menuID"/>
<integer value="0" key="excludesMarkColumn"/>
<integer value="0" key="autoDisable"/>
<integer value="0" key="usePencilGlyph"/>
<integer value="0" key="hidden"/>
<integer value="0" key="condenseSeparators"/>
</object>
<string key="title">World of Warcraft</string>
<string key="keyEquivalent"/>
<integer value="0" key="disabled"/>
<integer value="0" key="checked"/>
<integer value="0" key="submenuParentChoosable"/>
<integer value="0" key="dynamic"/>
<integer value="0" key="notPreviousAlternate"/>
<integer value="0" key="hidden"/>
<integer value="0" key="ignoreMeta"/>
<integer value="0" key="sectionHeader"/>
<integer value="0" key="customDraw"/>
<integer value="0" key="autoRepeat"/>
<integer value="0" key="autoDisable"/>
<integer value="0" key="updateSingleItem"/>
<integer value="0" key="includeInCmdKeyMatching"/>
<integer value="1048576" key="keyEquivalentModifierMask"/>
<integer value="0" key="command"/>
<nil key="helpTagText"/>
<nil key="helpTagExtendedText"/>
<integer value="0" key="helpTagDisplaySide"/>
</object>
<object class="IBHIMenuItem" id="832277564">
<reference key="NSMenu" ref="783341525"/>
<string key="NSTitle">Edit</string>
<string key="NSKeyEquiv"/>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="678796781"/>
<reference key="NSMixedImage" ref="788635175"/>
<string key="NSAction">submenuAction:</string>
<reference key="NSTarget" ref="775244329"/>
<object class="IBHIMenu" key="NSSubmenu" id="775244329">
<string key="NSTitle">Edit</string>
<array class="NSMutableArray" key="NSMenuItems">
<object class="IBHIMenuItem" id="525595591">
<reference key="NSMenu" ref="775244329"/>
<string key="NSTitle">Undo</string>
<string key="NSKeyEquiv">z</string>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="678796781"/>
<reference key="NSMixedImage" ref="788635175"/>
<string key="title">Undo</string>
<string key="keyEquivalent">z</string>
<integer value="0" key="disabled"/>
<integer value="0" key="checked"/>
<integer value="0" key="submenuParentChoosable"/>
<integer value="0" key="dynamic"/>
<integer value="0" key="notPreviousAlternate"/>
<integer value="0" key="hidden"/>
<integer value="0" key="ignoreMeta"/>
<integer value="0" key="sectionHeader"/>
<integer value="0" key="customDraw"/>
<integer value="0" key="autoRepeat"/>
<integer value="0" key="autoDisable"/>
<integer value="0" key="updateSingleItem"/>
<integer value="0" key="includeInCmdKeyMatching"/>
<integer value="1048576" key="keyEquivalentModifierMask"/>
<integer value="1970168943" key="command"/>
<nil key="helpTagText"/>
<nil key="helpTagExtendedText"/>
<integer value="0" key="helpTagDisplaySide"/>
</object>
<object class="IBHIMenuItem" id="348288318">
<reference key="NSMenu" ref="775244329"/>
<bool key="NSIsSeparator">YES</bool>
<string key="NSTitle"/>
<string key="NSKeyEquiv"/>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="678796781"/>
<reference key="NSMixedImage" ref="788635175"/>
<string key="title"/>
<string key="keyEquivalent"/>
<integer value="0" key="disabled"/>
<integer value="0" key="checked"/>
<integer value="0" key="submenuParentChoosable"/>
<integer value="0" key="dynamic"/>
<integer value="0" key="notPreviousAlternate"/>
<integer value="0" key="hidden"/>
<integer value="0" key="ignoreMeta"/>
<integer value="0" key="sectionHeader"/>
<integer value="0" key="customDraw"/>
<integer value="0" key="autoRepeat"/>
<integer value="0" key="autoDisable"/>
<integer value="0" key="updateSingleItem"/>
<integer value="0" key="includeInCmdKeyMatching"/>
<integer value="1048576" key="keyEquivalentModifierMask"/>
<integer value="0" key="command"/>
<nil key="helpTagText"/>
<nil key="helpTagExtendedText"/>
<integer value="0" key="helpTagDisplaySide"/>
</object>
<object class="IBHIMenuItem" id="504943467">
<reference key="NSMenu" ref="775244329"/>
<string key="NSTitle">Cut</string>
<string key="NSKeyEquiv">x</string>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="678796781"/>
<reference key="NSMixedImage" ref="788635175"/>
<string key="title">Cut</string>
<string key="keyEquivalent">x</string>
<integer value="0" key="disabled"/>
<integer value="0" key="checked"/>
<integer value="0" key="submenuParentChoosable"/>
<integer value="0" key="dynamic"/>
<integer value="0" key="notPreviousAlternate"/>
<integer value="0" key="hidden"/>
<integer value="0" key="ignoreMeta"/>
<integer value="0" key="sectionHeader"/>
<integer value="0" key="customDraw"/>
<integer value="0" key="autoRepeat"/>
<integer value="0" key="autoDisable"/>
<integer value="0" key="updateSingleItem"/>
<integer value="0" key="includeInCmdKeyMatching"/>
<integer value="1048576" key="keyEquivalentModifierMask"/>
<integer value="1668641824" key="command"/>
<nil key="helpTagText"/>
<nil key="helpTagExtendedText"/>
<integer value="0" key="helpTagDisplaySide"/>
</object>
<object class="IBHIMenuItem" id="1036249919">
<reference key="NSMenu" ref="775244329"/>
<string key="NSTitle">Copy</string>
<string key="NSKeyEquiv">c</string>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="678796781"/>
<reference key="NSMixedImage" ref="788635175"/>
<string key="title">Copy</string>
<string key="keyEquivalent">c</string>
<integer value="0" key="disabled"/>
<integer value="0" key="checked"/>
<integer value="0" key="submenuParentChoosable"/>
<integer value="0" key="dynamic"/>
<integer value="0" key="notPreviousAlternate"/>
<integer value="0" key="hidden"/>
<integer value="0" key="ignoreMeta"/>
<integer value="0" key="sectionHeader"/>
<integer value="0" key="customDraw"/>
<integer value="0" key="autoRepeat"/>
<integer value="0" key="autoDisable"/>
<integer value="0" key="updateSingleItem"/>
<integer value="0" key="includeInCmdKeyMatching"/>
<integer value="1048576" key="keyEquivalentModifierMask"/>
<integer value="1668247673" key="command"/>
<nil key="helpTagText"/>
<nil key="helpTagExtendedText"/>
<integer value="0" key="helpTagDisplaySide"/>
</object>
<object class="IBHIMenuItem" id="780439468">
<reference key="NSMenu" ref="775244329"/>
<string key="NSTitle">Paste</string>
<string key="NSKeyEquiv">v</string>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="678796781"/>
<reference key="NSMixedImage" ref="788635175"/>
<string key="title">Paste</string>
<string key="keyEquivalent">v</string>
<integer value="0" key="disabled"/>
<integer value="0" key="checked"/>
<integer value="0" key="submenuParentChoosable"/>
<integer value="0" key="dynamic"/>
<integer value="0" key="notPreviousAlternate"/>
<integer value="0" key="hidden"/>
<integer value="0" key="ignoreMeta"/>
<integer value="0" key="sectionHeader"/>
<integer value="0" key="customDraw"/>
<integer value="0" key="autoRepeat"/>
<integer value="0" key="autoDisable"/>
<integer value="0" key="updateSingleItem"/>
<integer value="0" key="includeInCmdKeyMatching"/>
<integer value="1048576" key="keyEquivalentModifierMask"/>
<integer value="1885434740" key="command"/>
<nil key="helpTagText"/>
<nil key="helpTagExtendedText"/>
<integer value="0" key="helpTagDisplaySide"/>
</object>
<object class="IBHIMenuItem" id="270786867">
<reference key="NSMenu" ref="775244329"/>
<string key="NSTitle">Select All</string>
<string key="NSKeyEquiv">a</string>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="678796781"/>
<reference key="NSMixedImage" ref="788635175"/>
<string key="title">Select All</string>
<string key="keyEquivalent">a</string>
<integer value="0" key="disabled"/>
<integer value="0" key="checked"/>
<integer value="0" key="submenuParentChoosable"/>
<integer value="0" key="dynamic"/>
<integer value="0" key="notPreviousAlternate"/>
<integer value="0" key="hidden"/>
<integer value="0" key="ignoreMeta"/>
<integer value="0" key="sectionHeader"/>
<integer value="0" key="customDraw"/>
<integer value="0" key="autoRepeat"/>
<integer value="0" key="autoDisable"/>
<integer value="0" key="updateSingleItem"/>
<integer value="0" key="includeInCmdKeyMatching"/>
<integer value="1048576" key="keyEquivalentModifierMask"/>
<integer value="1935764588" key="command"/>
<nil key="helpTagText"/>
<nil key="helpTagExtendedText"/>
<integer value="0" key="helpTagDisplaySide"/>
</object>
</array>
<string key="title">Edit</string>
<integer value="128" key="menuID"/>
<integer value="0" key="excludesMarkColumn"/>
<integer value="0" key="autoDisable"/>
<integer value="0" key="usePencilGlyph"/>
<integer value="0" key="hidden"/>
<integer value="0" key="condenseSeparators"/>
</object>
<string key="title">Edit</string>
<string key="keyEquivalent"/>
<integer value="0" key="disabled"/>
<integer value="0" key="checked"/>
<integer value="0" key="submenuParentChoosable"/>
<integer value="0" key="dynamic"/>
<integer value="0" key="notPreviousAlternate"/>
<integer value="0" key="hidden"/>
<integer value="0" key="ignoreMeta"/>
<integer value="0" key="sectionHeader"/>
<integer value="0" key="customDraw"/>
<integer value="0" key="autoRepeat"/>
<integer value="0" key="autoDisable"/>
<integer value="0" key="updateSingleItem"/>
<integer value="0" key="includeInCmdKeyMatching"/>
<integer value="1048576" key="keyEquivalentModifierMask"/>
<integer value="0" key="command"/>
<nil key="helpTagText"/>
<nil key="helpTagExtendedText"/>
<integer value="0" key="helpTagDisplaySide"/>
</object>
</array>
<string key="name">_NSMainMenu</string>
<string key="title">Untitled</string>
<integer value="0" key="menuID"/>
<integer value="0" key="excludesMarkColumn"/>
<integer value="0" key="autoDisable"/>
<integer value="0" key="usePencilGlyph"/>
<integer value="0" key="hidden"/>
<integer value="0" key="condenseSeparators"/>
</object>
<object class="IBHIMenu" id="231014827">
<string key="NSTitle">Batch Viewer</string>
<array class="NSMutableArray" key="NSMenuItems">
<object class="IBHIMenuItem" id="177821328">
<reference key="NSMenu" ref="231014827"/>
<string key="NSTitle">Show BatchViewer</string>
<string key="NSKeyEquiv"/>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="678796781"/>
<reference key="NSMixedImage" ref="788635175"/>
<string key="title">Show BatchViewer</string>
<string key="keyEquivalent"/>
<integer value="0" key="disabled"/>
<integer value="0" key="checked"/>
<integer value="0" key="submenuParentChoosable"/>
<integer value="0" key="dynamic"/>
<integer value="1" key="notPreviousAlternate"/>
<integer value="0" key="hidden"/>
<integer value="0" key="ignoreMeta"/>
<integer value="0" key="sectionHeader"/>
<integer value="0" key="customDraw"/>
<integer value="0" key="autoRepeat"/>
<integer value="0" key="autoDisable"/>
<integer value="0" key="updateSingleItem"/>
<integer value="0" key="includeInCmdKeyMatching"/>
<integer value="1048576" key="keyEquivalentModifierMask"/>
<integer value="1112962930" key="command"/>
<nil key="helpTagText"/>
<nil key="helpTagExtendedText"/>
<integer value="0" key="helpTagDisplaySide"/>
</object>
<object class="IBHIMenuItem" id="443792299">
<reference key="NSMenu" ref="231014827"/>
<string key="NSTitle">Show GL Layer Setup</string>
<string key="NSKeyEquiv"/>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="678796781"/>
<reference key="NSMixedImage" ref="788635175"/>
<string key="title">Show GL Layer Setup</string>
<string key="keyEquivalent"/>
<integer value="0" key="disabled"/>
<integer value="0" key="checked"/>
<integer value="0" key="submenuParentChoosable"/>
<integer value="0" key="dynamic"/>
<integer value="1" key="notPreviousAlternate"/>
<integer value="0" key="hidden"/>
<integer value="0" key="ignoreMeta"/>
<integer value="0" key="sectionHeader"/>
<integer value="0" key="customDraw"/>
<integer value="0" key="autoRepeat"/>
<integer value="0" key="autoDisable"/>
<integer value="0" key="updateSingleItem"/>
<integer value="0" key="includeInCmdKeyMatching"/>
<integer value="1048576" key="keyEquivalentModifierMask"/>
<integer value="1196182643" key="command"/>
<nil key="helpTagText"/>
<nil key="helpTagExtendedText"/>
<integer value="0" key="helpTagDisplaySide"/>
</object>
</array>
<string key="title">Batch Viewer</string>
<integer value="0" key="menuID"/>
<integer value="0" key="excludesMarkColumn"/>
<integer value="0" key="autoDisable"/>
<integer value="0" key="usePencilGlyph"/>
<integer value="0" key="hidden"/>
<integer value="0" key="condenseSeparators"/>
</object>
</array>
<object class="IBObjectContainer" key="IBDocument.Objects">
<array class="NSMutableArray" key="connectionRecords"/>
<object class="IBMutableOrderedSet" key="objectRecords">
<array key="orderedObjects">
<object class="IBObjectRecord">
<int key="objectID">0</int>
<reference key="object" ref="0"/>
<reference key="children" ref="234250886"/>
<nil key="parent"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">29</int>
<reference key="object" ref="783341525"/>
<array class="NSMutableArray" key="children">
<reference ref="832277564"/>
<reference ref="374205419"/>
</array>
<reference key="parent" ref="0"/>
<string key="objectName">MenuBar</string>
</object>
<object class="IBObjectRecord">
<int key="objectID">197</int>
<reference key="object" ref="231014827"/>
<array class="NSMutableArray" key="children">
<reference ref="177821328"/>
<reference ref="443792299"/>
</array>
<reference key="parent" ref="0"/>
<string key="objectName">BatchViewerMenu</string>
</object>
<object class="IBObjectRecord">
<int key="objectID">152</int>
<reference key="object" ref="832277564"/>
<array class="NSMutableArray" key="children">
<reference ref="775244329"/>
</array>
<reference key="parent" ref="783341525"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">182</int>
<reference key="object" ref="374205419"/>
<array class="NSMutableArray" key="children">
<reference ref="273282363"/>
</array>
<reference key="parent" ref="783341525"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">198</int>
<reference key="object" ref="177821328"/>
<reference key="parent" ref="231014827"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">199</int>
<reference key="object" ref="443792299"/>
<reference key="parent" ref="231014827"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">147</int>
<reference key="object" ref="775244329"/>
<array class="NSMutableArray" key="children">
<reference ref="780439468"/>
<reference ref="348288318"/>
<reference ref="1036249919"/>
<reference ref="525595591"/>
<reference ref="504943467"/>
<reference ref="270786867"/>
</array>
<reference key="parent" ref="832277564"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">181</int>
<reference key="object" ref="273282363"/>
<array class="NSMutableArray" key="children">
<reference ref="962291476"/>
<reference ref="716945557"/>
<reference ref="28259413"/>
</array>
<reference key="parent" ref="374205419"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">144</int>
<reference key="object" ref="780439468"/>
<reference key="parent" ref="775244329"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">142</int>
<reference key="object" ref="348288318"/>
<reference key="parent" ref="775244329"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">149</int>
<reference key="object" ref="1036249919"/>
<reference key="parent" ref="775244329"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">141</int>
<reference key="object" ref="525595591"/>
<reference key="parent" ref="775244329"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">143</int>
<reference key="object" ref="504943467"/>
<reference key="parent" ref="775244329"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">148</int>
<reference key="object" ref="270786867"/>
<reference key="parent" ref="775244329"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">183</int>
<reference key="object" ref="962291476"/>
<reference key="parent" ref="273282363"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">187</int>
<reference key="object" ref="716945557"/>
<reference key="parent" ref="273282363"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">186</int>
<reference key="object" ref="28259413"/>
<reference key="parent" ref="273282363"/>
</object>
</array>
</object>
<dictionary class="NSMutableDictionary" key="flattenedProperties"/>
<dictionary class="NSMutableDictionary" key="unlocalizedProperties"/>
<nil key="activeLocalization"/>
<dictionary class="NSMutableDictionary" key="localizations"/>
<nil key="sourceID"/>
<int key="maxID">200</int>
</object>
<object class="IBClassDescriber" key="IBDocument.Classes"/>
<int key="IBDocument.localizationMode">0</int>
<string key="IBDocument.TargetRuntimeIdentifier">IBCarbonFramework</string>
<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencies">
<string key="NS.key.0">com.apple.InterfaceBuilder.CarbonPlugin.macosx</string>
<integer value="1030" key="NS.object.0"/>
</object>
<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
<string key="IBDocument.LastKnownRelativeProjectPath">../../../WoW.xcodeproj</string>
<int key="IBDocument.defaultPropertyAccessControl">3</int>
</data>
</archive>

19
src/app/mac/MainApp.h Normal file
View file

@ -0,0 +1,19 @@
#ifndef APP_MAC_MAIN_APP_H
#define APP_MAC_MAIN_APP_H
#include "app/mac/MacClient.h"
#include <AppKit/AppKit.h>
#include <Foundation/Foundation.h>
@interface MainApp : NSObject
@property (retain) NSTimer* m_pollTimer;
@property bool isPolling;
@property (retain) IBOutlet NSMenuItem* captureFrameMenuItem;
@property (retain) IBOutlet NSMenuItem* showBatchViewerMenuItem;
@property (retain) IBOutlet NSMenuItem* showGLLayerSetupMenuItem;
@end
#endif

90
src/app/mac/MainApp.mm Normal file
View file

@ -0,0 +1,90 @@
#include "app/mac/MainApp.h"
#include "event/Event.hpp"
#include "event/Scheduler.hpp"
#include "os/Compat.hpp"
@implementation MainApp
+ (void)initialize {
[[NSUserDefaults standardUserDefaults]
registerDefaults: [NSDictionary
dictionaryWithObject: @"YES"
forKey: @"NSDisabledCharacterPaletteMenuItem"]];
[NSApp
setActivationPolicy: NSApplicationActivationPolicyRegular];
}
- (void)applicationDidFinishLaunching:(id)a1 {
self.m_pollTimer = [NSTimer
timerWithTimeInterval: 0.0001
target: self
selector: @selector(poll:)
userInfo: nil
repeats: true];
[[NSRunLoop currentRunLoop]
addTimer: self.m_pollTimer
forMode: NSDefaultRunLoopMode];
}
- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender {
// TODO
// OsQueuePut(5, 0, 0, 0, 0);
return NSTerminateCancel;
}
- (void)captureFrame:(id)a1 {
}
- (void)copy:(id)a3 {
MacClient::PostClipboardKeyEvents(MacClient::ClipboardCopy);
}
- (void)cut:(id)a3 {
MacClient::PostClipboardKeyEvents(MacClient::ClipboardCut);
}
- (void)paste:(id)a3 {
MacClient::PostClipboardKeyEvents(MacClient::ClipboardPaste);
}
- (void)poll:(id)a1 {
if (!Event::s_shouldLoopTerminate) {
Event::s_shouldLoopTerminate = SchedulerMainProcess();
if (Event::s_shouldLoopTerminate) {
[self.m_pollTimer invalidate];
self.m_pollTimer = nil;
[NSApp stop:self];
[NSApp
postEvent:
[NSEvent
otherEventWithType: NSEventTypeApplicationDefined
location: NSMakePoint(0, 0)
modifierFlags: 0
timestamp: 0
windowNumber: 0
context: 0
subtype: 0
data1: 0
data2: 0]
atStart: 0];
}
}
}
- (void)showBatchViewer:(id)a1 {
}
- (void)showGLLayerSetup:(id)a1 {
}
- (void)toggleFullscreenMode:(id)a1 {
// TODO
}
@end

901
src/app/mac/MainMenu.nib/designable.nib generated Executable file
View file

@ -0,0 +1,901 @@
<?xml version="1.0" encoding="UTF-8"?>
<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.03">
<data>
<int key="IBDocument.SystemTarget">1030</int>
<string key="IBDocument.SystemVersion">9J61</string>
<string key="IBDocument.InterfaceBuilderVersion">677</string>
<string key="IBDocument.AppKitVersion">949.46</string>
<string key="IBDocument.HIToolboxVersion">353.00</string>
<object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
<bool key="EncodedWithXMLCoder">YES</bool>
<integer value="24"/>
</object>
<object class="NSArray" key="IBDocument.PluginDependencies">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
</object>
<object class="NSMutableDictionary" key="IBDocument.Metadata">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSArray" key="dict.sortedKeys">
<bool key="EncodedWithXMLCoder">YES</bool>
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
</object>
</object>
<object class="NSMutableArray" key="IBDocument.RootObjects" id="1048">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSCustomObject" id="1021">
<string key="NSClassName">NSApplication</string>
</object>
<object class="NSCustomObject" id="1014">
<string key="NSClassName">FirstResponder</string>
</object>
<object class="NSCustomObject" id="1050">
<string key="NSClassName">NSApplication</string>
</object>
<object class="NSMenu" id="649796088">
<string key="NSTitle">AMainMenu</string>
<object class="NSMutableArray" key="NSMenuItems">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSMenuItem" id="694149608">
<reference key="NSMenu" ref="649796088"/>
<string key="NSTitle">World of Warcraft</string>
<string key="NSKeyEquiv"/>
<int key="NSMnemonicLoc">2147483647</int>
<object class="NSCustomResource" key="NSOnImage" id="229763992">
<string key="NSClassName">NSImage</string>
<string key="NSResourceName">NSMenuCheckmark</string>
</object>
<object class="NSCustomResource" key="NSMixedImage" id="909111550">
<string key="NSClassName">NSImage</string>
<string key="NSResourceName">NSMenuMixedState</string>
</object>
<string key="NSAction">submenuAction:</string>
<object class="NSMenu" key="NSSubmenu" id="110575045">
<string key="NSTitle">World of Warcraft</string>
<object class="NSMutableArray" key="NSMenuItems">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSMenuItem" id="238522557">
<reference key="NSMenu" ref="110575045"/>
<string key="NSTitle">MENU_ABOUT</string>
<string key="NSKeyEquiv"/>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="229763992"/>
<reference key="NSMixedImage" ref="909111550"/>
</object>
<object class="NSMenuItem" id="304266470">
<reference key="NSMenu" ref="110575045"/>
<bool key="NSIsDisabled">YES</bool>
<bool key="NSIsSeparator">YES</bool>
<string key="NSTitle"/>
<string key="NSKeyEquiv"/>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="229763992"/>
<reference key="NSMixedImage" ref="909111550"/>
</object>
<object class="NSMenuItem" id="41361050">
<reference key="NSMenu" ref="110575045"/>
<string key="NSTitle">MENU_SWITCH_TO_FULLSCREEN</string>
<string key="NSKeyEquiv">m</string>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="229763992"/>
<reference key="NSMixedImage" ref="909111550"/>
</object>
<object class="NSMenuItem" id="294290359">
<reference key="NSMenu" ref="110575045"/>
<bool key="NSIsDisabled">YES</bool>
<bool key="NSIsSeparator">YES</bool>
<string key="NSTitle"/>
<string key="NSKeyEquiv"/>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="229763992"/>
<reference key="NSMixedImage" ref="909111550"/>
</object>
<object class="NSMenuItem" id="755159360">
<reference key="NSMenu" ref="110575045"/>
<string key="NSTitle">MENU_HIDE</string>
<string key="NSKeyEquiv">h</string>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="229763992"/>
<reference key="NSMixedImage" ref="909111550"/>
</object>
<object class="NSMenuItem" id="342932134">
<reference key="NSMenu" ref="110575045"/>
<string key="NSTitle">MENU_HIDE_OTHERS</string>
<string key="NSKeyEquiv">h</string>
<int key="NSKeyEquivModMask">1572864</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="229763992"/>
<reference key="NSMixedImage" ref="909111550"/>
</object>
<object class="NSMenuItem" id="908899353">
<reference key="NSMenu" ref="110575045"/>
<string key="NSTitle">MENU_SHOW_ALL</string>
<string key="NSKeyEquiv"/>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="229763992"/>
<reference key="NSMixedImage" ref="909111550"/>
</object>
<object class="NSMenuItem" id="1056857174">
<reference key="NSMenu" ref="110575045"/>
<bool key="NSIsDisabled">YES</bool>
<bool key="NSIsSeparator">YES</bool>
<string key="NSTitle"/>
<string key="NSKeyEquiv"/>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="229763992"/>
<reference key="NSMixedImage" ref="909111550"/>
</object>
<object class="NSMenuItem" id="632727374">
<reference key="NSMenu" ref="110575045"/>
<string key="NSTitle">MENU_QUIT</string>
<string key="NSKeyEquiv">q</string>
<int key="NSKeyEquivModMask">1572864</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="229763992"/>
<reference key="NSMixedImage" ref="909111550"/>
</object>
</object>
<string key="NSName">_NSAppleMenu</string>
</object>
</object>
<object class="NSMenuItem" id="952259628">
<reference key="NSMenu" ref="649796088"/>
<string key="NSTitle">MENU_EDIT</string>
<string key="NSKeyEquiv"/>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="229763992"/>
<reference key="NSMixedImage" ref="909111550"/>
<string key="NSAction">submenuAction:</string>
<object class="NSMenu" key="NSSubmenu" id="789758025">
<string key="NSTitle">MENU_EDIT</string>
<object class="NSMutableArray" key="NSMenuItems">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSMenuItem" id="1058277027">
<reference key="NSMenu" ref="789758025"/>
<string key="NSTitle">MENU_UNDO</string>
<string key="NSKeyEquiv">z</string>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="229763992"/>
<reference key="NSMixedImage" ref="909111550"/>
</object>
<object class="NSMenuItem" id="1040322652">
<reference key="NSMenu" ref="789758025"/>
<bool key="NSIsDisabled">YES</bool>
<bool key="NSIsSeparator">YES</bool>
<string key="NSTitle"/>
<string key="NSKeyEquiv"/>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="229763992"/>
<reference key="NSMixedImage" ref="909111550"/>
</object>
<object class="NSMenuItem" id="296257095">
<reference key="NSMenu" ref="789758025"/>
<string key="NSTitle">MENU_EDIT_CUT</string>
<string key="NSKeyEquiv">x</string>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="229763992"/>
<reference key="NSMixedImage" ref="909111550"/>
</object>
<object class="NSMenuItem" id="860595796">
<reference key="NSMenu" ref="789758025"/>
<string key="NSTitle">MENU_EDIT_COPY</string>
<string key="NSKeyEquiv">c</string>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="229763992"/>
<reference key="NSMixedImage" ref="909111550"/>
</object>
<object class="NSMenuItem" id="29853731">
<reference key="NSMenu" ref="789758025"/>
<string key="NSTitle">MENU_EDIT_PASTE</string>
<string key="NSKeyEquiv">v</string>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="229763992"/>
<reference key="NSMixedImage" ref="909111550"/>
</object>
<object class="NSMenuItem" id="583158037">
<reference key="NSMenu" ref="789758025"/>
<string key="NSTitle">MENU_EDIT_SELECT_ALL</string>
<string key="NSKeyEquiv">a</string>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="229763992"/>
<reference key="NSMixedImage" ref="909111550"/>
</object>
</object>
</object>
</object>
<object class="NSMenuItem" id="713487014">
<reference key="NSMenu" ref="649796088"/>
<string key="NSTitle">MENU_WINDOW</string>
<string key="NSKeyEquiv"/>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="229763992"/>
<reference key="NSMixedImage" ref="909111550"/>
<string key="NSAction">submenuAction:</string>
<object class="NSMenu" key="NSSubmenu" id="835318025">
<string key="NSTitle">MENU_WINDOW</string>
<object class="NSMutableArray" key="NSMenuItems">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSMenuItem" id="839061908">
<reference key="NSMenu" ref="835318025"/>
<string key="NSTitle">Show Batch Viewer</string>
<string key="NSKeyEquiv"/>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="229763992"/>
<reference key="NSMixedImage" ref="909111550"/>
</object>
<object class="NSMenuItem" id="825097611">
<reference key="NSMenu" ref="835318025"/>
<string key="NSTitle">Show GL Layer Setup</string>
<string key="NSKeyEquiv"/>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="229763992"/>
<reference key="NSMixedImage" ref="909111550"/>
</object>
<object class="NSMenuItem" id="891014876">
<reference key="NSMenu" ref="835318025"/>
<string key="NSTitle">Capture Frame</string>
<string key="NSKeyEquiv">r</string>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="229763992"/>
<reference key="NSMixedImage" ref="909111550"/>
</object>
</object>
<string key="NSName">_NSWindowsMenu</string>
</object>
</object>
</object>
<string key="NSName">_NSMainMenu</string>
</object>
<object class="NSCustomObject" id="106825686">
<string key="NSClassName">MainApp</string>
</object>
</object>
<object class="IBObjectContainer" key="IBDocument.Objects">
<object class="NSMutableArray" key="connectionRecords">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">orderFrontStandardAboutPanel:</string>
<reference key="source" ref="1021"/>
<reference key="destination" ref="238522557"/>
</object>
<int key="connectionID">142</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">undo:</string>
<reference key="source" ref="1014"/>
<reference key="destination" ref="1058277027"/>
</object>
<int key="connectionID">223</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">copy:</string>
<reference key="source" ref="1014"/>
<reference key="destination" ref="860595796"/>
</object>
<int key="connectionID">224</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">paste:</string>
<reference key="source" ref="1014"/>
<reference key="destination" ref="29853731"/>
</object>
<int key="connectionID">226</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">cut:</string>
<reference key="source" ref="1014"/>
<reference key="destination" ref="296257095"/>
</object>
<int key="connectionID">228</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">selectAll:</string>
<reference key="source" ref="1014"/>
<reference key="destination" ref="583158037"/>
</object>
<int key="connectionID">232</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">hide:</string>
<reference key="source" ref="1014"/>
<reference key="destination" ref="755159360"/>
</object>
<int key="connectionID">367</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">hideOtherApplications:</string>
<reference key="source" ref="1014"/>
<reference key="destination" ref="342932134"/>
</object>
<int key="connectionID">368</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">terminate:</string>
<reference key="source" ref="1014"/>
<reference key="destination" ref="632727374"/>
</object>
<int key="connectionID">369</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">unhideAllApplications:</string>
<reference key="source" ref="1014"/>
<reference key="destination" ref="908899353"/>
</object>
<int key="connectionID">370</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">delegate</string>
<reference key="source" ref="1021"/>
<reference key="destination" ref="106825686"/>
</object>
<int key="connectionID">452</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">showGLLayerSetup:</string>
<reference key="source" ref="106825686"/>
<reference key="destination" ref="825097611"/>
</object>
<int key="connectionID">454</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">showBatchViewer:</string>
<reference key="source" ref="106825686"/>
<reference key="destination" ref="839061908"/>
</object>
<int key="connectionID">455</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">showBatchViewerMenuItem</string>
<reference key="source" ref="106825686"/>
<reference key="destination" ref="839061908"/>
</object>
<int key="connectionID">456</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">showGLLayerSetupMenuItem</string>
<reference key="source" ref="106825686"/>
<reference key="destination" ref="825097611"/>
</object>
<int key="connectionID">457</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">toggleFullscreenMode:</string>
<reference key="source" ref="106825686"/>
<reference key="destination" ref="41361050"/>
</object>
<int key="connectionID">460</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">captureFrameMenuItem</string>
<reference key="source" ref="106825686"/>
<reference key="destination" ref="891014876"/>
</object>
<int key="connectionID">462</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">captureFrame:</string>
<reference key="source" ref="106825686"/>
<reference key="destination" ref="891014876"/>
</object>
<int key="connectionID">463</int>
</object>
</object>
<object class="IBMutableOrderedSet" key="objectRecords">
<object class="NSArray" key="orderedObjects">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="IBObjectRecord">
<int key="objectID">0</int>
<object class="NSArray" key="object" id="1049">
<bool key="EncodedWithXMLCoder">YES</bool>
</object>
<reference key="children" ref="1048"/>
<nil key="parent"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">-2</int>
<reference key="object" ref="1021"/>
<reference key="parent" ref="1049"/>
<string type="base64-UTF8" key="objectName">RmlsZSdzIE93bmVyA</string>
</object>
<object class="IBObjectRecord">
<int key="objectID">-1</int>
<reference key="object" ref="1014"/>
<reference key="parent" ref="1049"/>
<string key="objectName">First Responder</string>
</object>
<object class="IBObjectRecord">
<int key="objectID">-3</int>
<reference key="object" ref="1050"/>
<reference key="parent" ref="1049"/>
<string key="objectName">Application</string>
</object>
<object class="IBObjectRecord">
<int key="objectID">29</int>
<reference key="object" ref="649796088"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="713487014"/>
<reference ref="694149608"/>
<reference ref="952259628"/>
</object>
<reference key="parent" ref="1049"/>
<string key="objectName">Main Menu</string>
</object>
<object class="IBObjectRecord">
<int key="objectID">19</int>
<reference key="object" ref="713487014"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="835318025"/>
</object>
<reference key="parent" ref="649796088"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">56</int>
<reference key="object" ref="694149608"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="110575045"/>
</object>
<reference key="parent" ref="649796088"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">217</int>
<reference key="object" ref="952259628"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="789758025"/>
</object>
<reference key="parent" ref="649796088"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">205</int>
<reference key="object" ref="789758025"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="583158037"/>
<reference ref="1058277027"/>
<reference ref="296257095"/>
<reference ref="29853731"/>
<reference ref="860595796"/>
<reference ref="1040322652"/>
</object>
<reference key="parent" ref="952259628"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">198</int>
<reference key="object" ref="583158037"/>
<reference key="parent" ref="789758025"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">207</int>
<reference key="object" ref="1058277027"/>
<reference key="parent" ref="789758025"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">199</int>
<reference key="object" ref="296257095"/>
<reference key="parent" ref="789758025"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">203</int>
<reference key="object" ref="29853731"/>
<reference key="parent" ref="789758025"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">197</int>
<reference key="object" ref="860595796"/>
<reference key="parent" ref="789758025"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">206</int>
<reference key="object" ref="1040322652"/>
<reference key="parent" ref="789758025"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">57</int>
<reference key="object" ref="110575045"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="238522557"/>
<reference ref="755159360"/>
<reference ref="908899353"/>
<reference ref="632727374"/>
<reference ref="304266470"/>
<reference ref="1056857174"/>
<reference ref="342932134"/>
<reference ref="41361050"/>
<reference ref="294290359"/>
</object>
<reference key="parent" ref="694149608"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">58</int>
<reference key="object" ref="238522557"/>
<reference key="parent" ref="110575045"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">134</int>
<reference key="object" ref="755159360"/>
<reference key="parent" ref="110575045"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">150</int>
<reference key="object" ref="908899353"/>
<reference key="parent" ref="110575045"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">136</int>
<reference key="object" ref="632727374"/>
<reference key="parent" ref="110575045"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">236</int>
<reference key="object" ref="304266470"/>
<reference key="parent" ref="110575045"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">149</int>
<reference key="object" ref="1056857174"/>
<reference key="parent" ref="110575045"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">145</int>
<reference key="object" ref="342932134"/>
<reference key="parent" ref="110575045"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">24</int>
<reference key="object" ref="835318025"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="839061908"/>
<reference ref="825097611"/>
<reference ref="891014876"/>
</object>
<reference key="parent" ref="713487014"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">449</int>
<reference key="object" ref="839061908"/>
<reference key="parent" ref="835318025"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">450</int>
<reference key="object" ref="825097611"/>
<reference key="parent" ref="835318025"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">451</int>
<reference key="object" ref="106825686"/>
<reference key="parent" ref="1049"/>
<string key="objectName">MainApp</string>
</object>
<object class="IBObjectRecord">
<int key="objectID">458</int>
<reference key="object" ref="41361050"/>
<reference key="parent" ref="110575045"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">459</int>
<reference key="object" ref="294290359"/>
<reference key="parent" ref="110575045"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">461</int>
<reference key="object" ref="891014876"/>
<reference key="parent" ref="835318025"/>
</object>
</object>
</object>
<object class="NSMutableDictionary" key="flattenedProperties">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSMutableArray" key="dict.sortedKeys">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>-1.IBPluginDependency</string>
<string>-2.IBPluginDependency</string>
<string>-3.IBPluginDependency</string>
<string>134.IBPluginDependency</string>
<string>134.ImportedFromIB2</string>
<string>136.IBPluginDependency</string>
<string>136.ImportedFromIB2</string>
<string>145.IBPluginDependency</string>
<string>145.ImportedFromIB2</string>
<string>149.IBPluginDependency</string>
<string>149.ImportedFromIB2</string>
<string>150.IBPluginDependency</string>
<string>150.ImportedFromIB2</string>
<string>19.IBPluginDependency</string>
<string>19.ImportedFromIB2</string>
<string>197.IBPluginDependency</string>
<string>197.ImportedFromIB2</string>
<string>198.IBPluginDependency</string>
<string>198.ImportedFromIB2</string>
<string>199.IBPluginDependency</string>
<string>199.ImportedFromIB2</string>
<string>203.IBPluginDependency</string>
<string>203.ImportedFromIB2</string>
<string>205.IBEditorWindowLastContentRect</string>
<string>205.IBPluginDependency</string>
<string>205.ImportedFromIB2</string>
<string>205.editorWindowContentRectSynchronizationRect</string>
<string>206.IBPluginDependency</string>
<string>206.ImportedFromIB2</string>
<string>207.IBPluginDependency</string>
<string>207.ImportedFromIB2</string>
<string>217.IBPluginDependency</string>
<string>217.ImportedFromIB2</string>
<string>236.IBPluginDependency</string>
<string>236.ImportedFromIB2</string>
<string>24.IBEditorWindowLastContentRect</string>
<string>24.IBPluginDependency</string>
<string>24.ImportedFromIB2</string>
<string>24.editorWindowContentRectSynchronizationRect</string>
<string>29.IBEditorWindowLastContentRect</string>
<string>29.IBPluginDependency</string>
<string>29.ImportedFromIB2</string>
<string>29.WindowOrigin</string>
<string>29.editorWindowContentRectSynchronizationRect</string>
<string>449.IBPluginDependency</string>
<string>449.ImportedFromIB2</string>
<string>450.IBPluginDependency</string>
<string>450.ImportedFromIB2</string>
<string>451.IBPluginDependency</string>
<string>458.IBPluginDependency</string>
<string>458.ImportedFromIB2</string>
<string>459.IBPluginDependency</string>
<string>459.ImportedFromIB2</string>
<string>461.IBPluginDependency</string>
<string>56.IBPluginDependency</string>
<string>56.ImportedFromIB2</string>
<string>57.IBEditorWindowLastContentRect</string>
<string>57.IBPluginDependency</string>
<string>57.ImportedFromIB2</string>
<string>57.editorWindowContentRectSynchronizationRect</string>
<string>58.IBPluginDependency</string>
<string>58.ImportedFromIB2</string>
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<integer value="1" id="9"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<reference ref="9"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<reference ref="9"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<reference ref="9"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<reference ref="9"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<reference ref="9"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<reference ref="9"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<reference ref="9"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<reference ref="9"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<reference ref="9"/>
<string>{{1422, 1180}, {243, 113}}</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<reference ref="9"/>
<string>{{197, 734}, {243, 243}}</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<reference ref="9"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<reference ref="9"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<reference ref="9"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<reference ref="9"/>
<string>{{1548, 966}, {218, 63}}</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<reference ref="9"/>
<string>{{525, 802}, {197, 73}}</string>
<string>{{1295, 1029}, {390, 20}}</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<reference ref="9"/>
<string>{74, 862}</string>
<string>{{11, 977}, {478, 20}}</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<boolean value="YES" id="5"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<reference ref="5"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<reference ref="5"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<reference ref="9"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<reference ref="9"/>
<string>{{49, 388}, {312, 153}}</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<reference ref="9"/>
<string>{{23, 794}, {245, 183}}</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<reference ref="9"/>
</object>
</object>
<object class="NSMutableDictionary" key="unlocalizedProperties">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSArray" key="dict.sortedKeys">
<bool key="EncodedWithXMLCoder">YES</bool>
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
</object>
</object>
<nil key="activeLocalization"/>
<object class="NSMutableDictionary" key="localizations">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSArray" key="dict.sortedKeys">
<bool key="EncodedWithXMLCoder">YES</bool>
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
</object>
</object>
<nil key="sourceID"/>
<int key="maxID">463</int>
</object>
<object class="IBClassDescriber" key="IBDocument.Classes">
<object class="NSMutableArray" key="referencedPartialClassDescriptions">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="IBPartialClassDescription">
<string key="className">MainApp</string>
<string key="superclassName">NSObject</string>
<object class="NSMutableDictionary" key="actions">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSMutableArray" key="dict.sortedKeys">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>captureFrame:</string>
<string>cut:</string>
<string>paste:</string>
<string>selectAll:</string>
<string>showBatchViewer:</string>
<string>showGLLayerSetup:</string>
<string>toggleFullscreenMode:</string>
<string>undo:</string>
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>id</string>
<string>id</string>
<string>id</string>
<string>id</string>
<string>id</string>
<string>id</string>
<string>id</string>
<string>id</string>
</object>
</object>
<object class="NSMutableDictionary" key="outlets">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSMutableArray" key="dict.sortedKeys">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>captureFrameMenuItem</string>
<string>showBatchViewerMenuItem</string>
<string>showGLLayerSetupMenuItem</string>
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>NSMenuItem</string>
<string>NSMenuItem</string>
<string>NSMenuItem</string>
</object>
</object>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBProjectSource</string>
<string key="minorKey">Source/MainApp.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">MainApp</string>
<string key="superclassName">NSObject</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBUserSource</string>
<string key="minorKey"/>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">NSObject</string>
<object class="NSMutableDictionary" key="actions">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSMutableArray" key="dict.sortedKeys">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>didAdjustSubviews:</string>
<string>willAdjustSubviews:</string>
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>RBSplitView</string>
<string>RBSplitView</string>
</object>
</object>
<object class="IBClassDescriptionSource" key="sourceIdentifier" id="35014534">
<string key="majorKey">IBProjectSource</string>
<string key="minorKey">../../../Engine/Source/Gx/CGxDeviceGLL/GLLayer/RBSplitView.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">RBSplitSubview</string>
<string key="superclassName">NSView</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBProjectSource</string>
<string key="minorKey">../../../Engine/Source/Gx/CGxDeviceGLL/GLLayer/RBSplitSubview.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">RBSplitSubview</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier" id="60681676">
<string key="majorKey">IBProjectSource</string>
<string key="minorKey">../../../Engine/Source/Gx/CGxDeviceGLL/GLLayer/RBSplitViewPrivateDefines.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">RBSplitView</string>
<string key="superclassName">RBSplitSubview</string>
<object class="NSMutableDictionary" key="outlets">
<string key="NS.key.0">delegate</string>
<string key="NS.object.0">id</string>
</object>
<reference key="sourceIdentifier" ref="35014534"/>
</object>
<object class="IBPartialClassDescription">
<string key="className">RBSplitView</string>
<reference key="sourceIdentifier" ref="60681676"/>
</object>
<object class="IBPartialClassDescription">
<string key="className">StackTableView</string>
<string key="superclassName">NSTableView</string>
<object class="NSMutableDictionary" key="actions">
<string key="NS.key.0">copy:</string>
<string key="NS.object.0">id</string>
</object>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBProjectSource</string>
<string key="minorKey">../../../Engine/Source/Gx/CGxDeviceGLL/GLLayer/StackCrawlViewer.h</string>
</object>
</object>
</object>
</object>
<int key="IBDocument.localizationMode">0</int>
<string key="IBDocument.LastKnownRelativeProjectPath">../../WoW.xcodeproj</string>
<int key="IBDocument.defaultPropertyAccessControl">3</int>
</data>
</archive>

BIN
src/app/mac/MainMenu.nib/keyedobjects.nib generated Executable file

Binary file not shown.

126
src/app/mac/MainMenu.xib Normal file
View file

@ -0,0 +1,126 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="11762" systemVersion="15G19009" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none">
<dependencies>
<deployment version="1030" identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="11762"/>
</dependencies>
<objects>
<customObject id="-2" userLabel="File's Owner" customClass="NSApplication">
<connections>
<outlet property="delegate" destination="451" id="452"/>
</connections>
</customObject>
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
<customObject id="-3" userLabel="Application"/>
<menu title="AMainMenu" systemMenu="main" id="29" userLabel="Main Menu">
<items>
<menuItem title="World of Warcraft" id="56">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="World of Warcraft" systemMenu="apple" id="57">
<items>
<menuItem title="MENU_ABOUT" id="58">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="orderFrontStandardAboutPanel:" target="-2" id="142"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="236"/>
<menuItem title="MENU_SWITCH_TO_FULLSCREEN" keyEquivalent="m" id="458">
<connections>
<action selector="toggleFullscreenMode:" target="451" id="460"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="459"/>
<menuItem title="MENU_HIDE" keyEquivalent="h" id="134">
<connections>
<action selector="hide:" target="-1" id="367"/>
</connections>
</menuItem>
<menuItem title="MENU_HIDE_OTHERS" keyEquivalent="h" id="145">
<modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
<connections>
<action selector="hideOtherApplications:" target="-1" id="368"/>
</connections>
</menuItem>
<menuItem title="MENU_SHOW_ALL" id="150">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="unhideAllApplications:" target="-1" id="370"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="149"/>
<menuItem title="MENU_QUIT" keyEquivalent="q" id="136">
<modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
<connections>
<action selector="terminate:" target="-1" id="369"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="MENU_EDIT" id="217">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="MENU_EDIT" id="205">
<items>
<menuItem title="MENU_UNDO" keyEquivalent="z" id="207">
<connections>
<action selector="undo:" target="-1" id="223"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="206"/>
<menuItem title="MENU_EDIT_CUT" keyEquivalent="x" id="199">
<connections>
<action selector="cut:" target="-1" id="228"/>
</connections>
</menuItem>
<menuItem title="MENU_EDIT_COPY" keyEquivalent="c" id="197">
<connections>
<action selector="copy:" target="-1" id="224"/>
</connections>
</menuItem>
<menuItem title="MENU_EDIT_PASTE" keyEquivalent="v" id="203">
<connections>
<action selector="paste:" target="-1" id="226"/>
</connections>
</menuItem>
<menuItem title="MENU_EDIT_SELECT_ALL" keyEquivalent="a" id="198">
<connections>
<action selector="selectAll:" target="-1" id="232"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="MENU_WINDOW" id="19">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="MENU_WINDOW" systemMenu="window" id="24">
<items>
<menuItem title="Show Batch Viewer" id="449">
<connections>
<action selector="showBatchViewer:" target="451" id="455"/>
</connections>
</menuItem>
<menuItem title="Show GL Layer Setup" id="450">
<connections>
<action selector="showGLLayerSetup:" target="451" id="454"/>
</connections>
</menuItem>
<menuItem title="Capture Frame" keyEquivalent="r" id="461">
<connections>
<action selector="captureFrame:" target="451" id="463"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
</items>
</menu>
<customObject id="451" userLabel="MainApp" customClass="MainApp">
<connections>
<outlet property="captureFrameMenuItem" destination="461" id="462"/>
<outlet property="showBatchViewerMenuItem" destination="449" id="456"/>
<outlet property="showGLLayerSetupMenuItem" destination="450" id="457"/>
</connections>
</customObject>
</objects>
</document>

12
src/app/mac/View.h Normal file
View file

@ -0,0 +1,12 @@
#ifndef APP_MAC_VIEW_H
#define APP_MAC_VIEW_H
#include <objc/objc-runtime.h>
struct GLWindowCallbacks;
void AssignEngineViewCallbacks(GLWindowCallbacks*);
Class GetEngineViewClass(void);
#endif

27
src/app/mac/View.mm Normal file
View file

@ -0,0 +1,27 @@
#include "app/mac/View.h"
#include "app/mac/EngineGLLayerView.h"
#include "app/mac/WindowCallbacks.h"
#include "gx/gll/GLWindow.h"
GLWindowCallbacks EngineViewCallbacks = {
&MacOnResized,
&MacOnMouseDown,
&MacOnMouseMoved,
&MacOnMouseUp,
&MacOnKeyDown,
&MacOnKeyUp
};
void AssignEngineViewCallbacks(GLWindowCallbacks* callbacks) {
*callbacks = EngineViewCallbacks;
// TODO
// (callbacks + 100) = 0;
// TODO
// dword_12B9F54 = sub_A15850;
}
Class GetEngineViewClass() {
return [EngineGLLayerView class];
}

41
src/app/mac/Whoa.mm Normal file
View file

@ -0,0 +1,41 @@
#include "app/mac/WoWApplication.h"
#include "app/mac/MacClient.h"
#include "client/Client.hpp"
#include <AppKit/AppKit.h>
#include <Foundation/Foundation.h>
int32_t main(int32_t argc, char* argv[]) {
// TODO
// MacClient::SetupCommandLine(argc, argv, v10);
if (MacClient::IsUsingGLLayer()) {
// TODO
// GxSetRequestedApi(3);
// TODO
// OsInputSetIsUsingCocoaEventLoop(1);
[WoWApplication sharedApplication];
#if WHOA_SYSTEM_VERSION < WHOA_MACOS_10_8
[NSBundle
loadNibNamed: @"MainMenu"
owner: NSApp];
#endif
#if WHOA_SYSTEM_VERSION >= WHOA_MACOS_10_8
[[NSBundle mainBundle]
loadNibNamed: @"MainMenu"
owner: NSApp
topLevelObjects: nil];
#endif
[NSRunLoop currentRunLoop];
[NSApp mainMenu];
CommonMain();
}
return 0;
}

View file

@ -0,0 +1,19 @@
#ifndef APP_MAC_WINDOW_CALLBACKS_H
#define APP_MAC_WINDOW_CALLBACKS_H
#include <cstdint>
#include <AppKit/AppKit.h>
void MacOnKeyDown(NSEvent*);
void MacOnKeyUp(NSEvent*);
void MacOnMouseDown(int16_t, int32_t, int32_t);
void MacOnMouseMoved(int32_t, int32_t);
void MacOnMouseUp(int16_t, int32_t, int32_t);
void MacOnResized(int32_t width, int32_t height, bool a3);
#endif

View file

@ -0,0 +1,188 @@
#include "app/mac/WindowCallbacks.h"
#include "app/mac/MacClient.h"
#include "event/Input.hpp"
#include "gx/gll/CGxDeviceGLL.hpp"
#include "gx/Device.hpp"
#include "gx/Window.hpp"
#include "util/BlizzardCore.hpp"
void MacOnKeyDown(NSEvent* event) {
BLIZZARD_ASSERT(false);
}
void MacOnKeyUp(NSEvent* event) {
uint32_t keyCode = event.keyCode;
MacClient::CheckKeyboardLayout();
if (keyCode <= 0x7F) {
uint32_t key = MacClient::s_keyConversion[keyCode];
if (key != KEY_NONE) {
OsQueuePut(OS_INPUT_KEY_UP, key, 0, 0, 0);
}
}
}
void MacOnMouseDown(int16_t button, int32_t x, int32_t y) {
NSEvent* event = [NSApp currentEvent];
uint32_t modifierFlags = event.modifierFlags;
uint32_t v8 = 0;
if (modifierFlags & NSShiftKeyMask) {
v8 |= 0x2;
}
if (modifierFlags & NSAlternateKeyMask) {
v8 |= 0x8;
}
if (modifierFlags & NSCommandKeyMask) {
v8 |= 0x1;
}
if (modifierFlags & NSControlKeyMask) {
v8 |= 0x10;
}
if (modifierFlags & NSAlphaShiftKeyMask) {
v8 |= 0x4;
}
int16_t buttonNumber = button + 1;
int16_t buttonIndex = button;
if (buttonNumber > 0xF) {
return;
}
if (Input::s_buttonDown[buttonIndex]) {
return;
}
int16_t effectiveButtonNumber = buttonNumber;
Input::s_buttonDown[buttonIndex] = 1;
if (buttonNumber == 1) {
effectiveButtonNumber = 1;
if (v8 & 0x1) {
Input::s_simulatedRightButtonClick = 1;
// TODO
// if (Input::byte_12B94E2) {
// return;
// }
effectiveButtonNumber = 2;
}
}
if (buttonNumber == 2) {
if (Input::s_simulatedRightButtonClick) {
return;
} else {
effectiveButtonNumber = 2;
}
}
MOUSEBUTTON mouseButton = ConvertButtonNumberToMOUSEBUTTON(effectiveButtonNumber);
if (mouseButton) {
if (Input::s_mouseMode == 0) {
Input::s_currentMouse = { x, y };
}
OsQueuePut(OS_INPUT_MOUSE_DOWN, mouseButton, x, y, 0);
}
}
void MacOnMouseMoved(int32_t x, int32_t y) {
if (Input::s_mouseMode == 1) {
NSEvent* event = [NSApp currentEvent];
int32_t deltaX = static_cast<int32_t>(floor(event.deltaX));
int32_t deltaY = static_cast<int32_t>(floor(event.deltaY));
OsQueuePut(OS_INPUT_MOUSE_MOVE_RELATIVE, 0, deltaX, deltaY, 0);
} else {
Input::s_currentMouse = { x, y };
OsQueuePut(OS_INPUT_MOUSE_MOVE, 0, x, y, 0);
}
}
void MacOnMouseUp(int16_t button, int32_t x, int32_t y) {
NSEvent* event = [NSApp currentEvent];
uint32_t modifierFlags = event.modifierFlags;
int16_t buttonNumber = button + 1;
int16_t buttonIndex = button;
if (buttonNumber > 0xF) {
return;
}
if (!Input::s_buttonDown[buttonIndex]) {
return;
}
int16_t effectiveButtonNumber = buttonNumber;
Input::s_buttonDown[buttonIndex] = 0;
if (buttonNumber == 1) {
effectiveButtonNumber = 1;
if (Input::s_simulatedRightButtonClick) {
effectiveButtonNumber = 2;
Input::s_simulatedRightButtonClick = 0;
// TODO
// if (Input::byte_12B94E2) {
// return;
// }
}
}
if (buttonNumber == 2) {
if (Input::s_simulatedRightButtonClick) {
return;
} else {
effectiveButtonNumber = 2;
}
}
MOUSEBUTTON mouseButton = ConvertButtonNumberToMOUSEBUTTON(effectiveButtonNumber);
if (mouseButton) {
if (Input::s_mouseMode != 0) {
Input::s_currentMouse = { x, y };
}
OsQueuePut(OS_INPUT_MOUSE_UP, mouseButton, x, y, 0);
}
}
void MacOnResized(int32_t width, int32_t height, bool a3) {
if (a3) {
return;
}
static_cast<CGxDeviceGLL*>(g_theGxDevicePtr)->Resize(width, height);
OsQueuePut(OS_INPUT_SIZE, width, height, 0, 0);
// TODO SubA61E60(width, height)
auto bounds = GetSavedWindowBounds();
Rect newBounds = {
bounds->top,
bounds->left,
static_cast<int16_t>(bounds->top + height),
static_cast<int16_t>(bounds->left + width)
};
SetSavedWindowBounds(newBounds);
}

View file

@ -0,0 +1,11 @@
#ifndef APP_MAC_WOW_APPLICATION_H
#define APP_MAC_WOW_APPLICATION_H
#include <AppKit/AppKit.h>
#include <Foundation/Foundation.h>
@interface WoWApplication : NSApplication
@end
#endif

View file

@ -0,0 +1,24 @@
#include "app/mac/WoWApplication.h"
#include "gx/gll/GLLayerView.h"
@implementation WoWApplication
- (void)sendEvent:(NSEvent*)event {
auto responder = [[NSApp keyWindow] firstResponder];
if (responder && [responder isKindOfClass: [GLLayerView class]]) {
NSEventType type = [event type];
if (type == NSKeyDown && (event.keyCode == 114 || (event.keyCode == 48 && event.modifierFlags & NSControlKeyMask))) {
[responder keyDown: event];
return;
} else if (type == NSKeyUp) {
[responder keyUp: event];
return;
}
}
[super sendEvent:event];
}
@end