From 535733f5c7b379ec0b823aa5433fe61632a5772b Mon Sep 17 00:00:00 2001 From: Marco Antognini Date: Wed, 13 Jul 2011 22:14:49 +0200 Subject: [PATCH 1/3] Implemented OSX/Joysticks and fixed some tabulations --- include/SFML/Window/WindowHandle.hpp | 2 +- src/SFML/Window/GlContext.cpp | 4 +- src/SFML/Window/InputImpl.hpp | 2 +- src/SFML/Window/JoystickImpl.hpp | 2 +- src/SFML/Window/OSX/HIDInputManager.hpp | 26 +- src/SFML/Window/OSX/HIDInputManager.mm | 42 +++- src/SFML/Window/OSX/InputImpl.mm | 6 +- src/SFML/Window/OSX/JoystickImpl.cpp | 304 +++++++++++++++++++++++- src/SFML/Window/OSX/JoystickImpl.hpp | 15 +- 9 files changed, 372 insertions(+), 31 deletions(-) diff --git a/include/SFML/Window/WindowHandle.hpp b/include/SFML/Window/WindowHandle.hpp index 2947a7c53..81e44144e 100644 --- a/include/SFML/Window/WindowHandle.hpp +++ b/include/SFML/Window/WindowHandle.hpp @@ -54,7 +54,7 @@ namespace sf #elif defined(SFML_SYSTEM_MACOS) // Window handle is NSWindow (void*) on Mac OS X - Cocoa - typedef void* WindowHandle; + typedef void* WindowHandle; #endif diff --git a/src/SFML/Window/GlContext.cpp b/src/SFML/Window/GlContext.cpp index fe5a59cfd..196ed9c8b 100644 --- a/src/SFML/Window/GlContext.cpp +++ b/src/SFML/Window/GlContext.cpp @@ -48,8 +48,8 @@ #elif defined(SFML_SYSTEM_MACOS) - #include - typedef sf::priv::SFContext ContextType; + #include + typedef sf::priv::SFContext ContextType; #endif diff --git a/src/SFML/Window/InputImpl.hpp b/src/SFML/Window/InputImpl.hpp index 7c5014714..f4aa0247f 100644 --- a/src/SFML/Window/InputImpl.hpp +++ b/src/SFML/Window/InputImpl.hpp @@ -40,7 +40,7 @@ #elif defined(SFML_SYSTEM_MACOS) - #include + #include #endif diff --git a/src/SFML/Window/JoystickImpl.hpp b/src/SFML/Window/JoystickImpl.hpp index 5ec45ecb9..40fe6b324 100644 --- a/src/SFML/Window/JoystickImpl.hpp +++ b/src/SFML/Window/JoystickImpl.hpp @@ -87,7 +87,7 @@ struct JoystickState #elif defined(SFML_SYSTEM_MACOS) - #include + #include #endif diff --git a/src/SFML/Window/OSX/HIDInputManager.hpp b/src/SFML/Window/OSX/HIDInputManager.hpp index e6e13ad9a..81befac89 100644 --- a/src/SFML/Window/OSX/HIDInputManager.hpp +++ b/src/SFML/Window/OSX/HIDInputManager.hpp @@ -47,7 +47,8 @@ namespace priv /// keyboard and mouse states. It's only purpose is /// to help sf::priv::InputImpl class. /// -/// sf::priv::JoystickImpl is not concerned by this class. +/// HIDInputManager provides a function to get all connected joysticks +/// to help sf::priv::JoystickImpl. /// //////////////////////////////////////////////////////////// class HIDInputManager : NonCopyable @@ -84,6 +85,27 @@ public : //////////////////////////////////////////////////////////// bool IsMouseButtonPressed(Mouse::Button button); + //////////////////////////////////////////////////////////// + /// \brief List all connected joysticks + /// + /// \return a retained CFSetRef of IOHIDDeviceRef or NULL + /// + //////////////////////////////////////////////////////////// + CFSetRef CopyJoystickDevices(); + +public : + + //////////////////////////////////////////////////////////// + /// \brief Get the usb location ID of a given device + /// + /// This location ID is unique and can be used a usb port identifier + /// + /// \param device HID device to query + /// \return the device's location ID or 0 if something went wrong + /// + //////////////////////////////////////////////////////////// + static long GetLocationID(IOHIDDeviceRef device); + //////////////////////////////////////////////////////////// /// Try to convert a character into a SFML key code. /// @@ -199,7 +221,7 @@ private : //////////////////////////////////////////////////////////// /// \brief Filter the devices and return them. /// - /// If something went wrong FreeUp is called + /// FreeUp is _not_ called by this function. /// /// \param page HID page like kHIDPage_GenericDesktop /// \param usage HID usage page like kHIDUsage_GD_Keyboard or kHIDUsage_GD_Mouse diff --git a/src/SFML/Window/OSX/HIDInputManager.mm b/src/SFML/Window/OSX/HIDInputManager.mm index a8118db8f..84b51db9e 100644 --- a/src/SFML/Window/OSX/HIDInputManager.mm +++ b/src/SFML/Window/OSX/HIDInputManager.mm @@ -84,7 +84,6 @@ bool HIDInputManager::IsKeyPressed(Keyboard::Key key) return state; } - //////////////////////////////////////////////////////////// bool HIDInputManager::IsMouseButtonPressed(Mouse::Button button) { @@ -128,6 +127,35 @@ bool HIDInputManager::IsMouseButtonPressed(Mouse::Button button) } +//////////////////////////////////////////////////////////// +CFSetRef HIDInputManager::CopyJoystickDevices() +{ + return CopyDevices(kHIDPage_GenericDesktop, kHIDUsage_GD_Joystick); +} + + +//////////////////////////////////////////////////////////// +long HIDInputManager::GetLocationID(IOHIDDeviceRef device) +{ + long loc = 0; + + // Get a unique ID : its usb location ID + CFTypeRef typeRef = IOHIDDeviceGetProperty(device, + CFSTR(kIOHIDLocationIDKey)); + if (!typeRef || CFGetTypeID(typeRef) != CFNumberGetTypeID()) { + return 0; + } + + CFNumberRef locRef = (CFNumberRef)typeRef; + + if (!CFNumberGetValue(locRef, kCFNumberLongType, &loc)) { + return 0; + } + + return loc; +} + + //////////////////////////////////////////////////////////// HIDInputManager::HIDInputManager() : amIValid(true) @@ -198,8 +226,7 @@ void HIDInputManager::InitializeKeyboard() // Get only keyboards CFSetRef keyboards = CopyDevices(kHIDPage_GenericDesktop, kHIDUsage_GD_Keyboard); if (keyboards == NULL) { - - // FreeUp was already called + FreeUp(); return; } @@ -234,8 +261,7 @@ void HIDInputManager::InitializeMouse() // Get only mouses CFSetRef mouses = CopyDevices(kHIDPage_GenericDesktop, kHIDUsage_GD_Mouse); if (mouses == NULL) { - - // FreeUp was already called + FreeUp(); return; } @@ -525,17 +551,13 @@ CFSetRef HIDInputManager::CopyDevices(UInt32 page, UInt32 usage) CFSetRef devices = IOHIDManagerCopyDevices(myManager); if (devices == NULL) { - sf::Err() << "Cannot find any devices." << std::endl; - FreeUp(); return NULL; } - // Is there at least one keyboard ? + // Is there at least one device ? CFIndex deviceCount = CFSetGetCount(devices); if (deviceCount < 1) { - sf::Err() << "Found no device." << std::endl; CFRelease(devices); - FreeUp(); return NULL; } diff --git a/src/SFML/Window/OSX/InputImpl.mm b/src/SFML/Window/OSX/InputImpl.mm index 0690442f8..62fe7ee3c 100644 --- a/src/SFML/Window/OSX/InputImpl.mm +++ b/src/SFML/Window/OSX/InputImpl.mm @@ -102,14 +102,14 @@ SFOpenGLView* GetSFOpenGLViewFromSFMLWindow(const Window& window) //////////////////////////////////////////////////////////// bool InputImpl::IsKeyPressed(Keyboard::Key key) { - return HIDInputManager::GetInstance().IsKeyPressed(key); + return HIDInputManager::GetInstance().IsKeyPressed(key); } //////////////////////////////////////////////////////////// bool InputImpl::IsMouseButtonPressed(Mouse::Button button) { - return HIDInputManager::GetInstance().IsMouseButtonPressed(button); + return HIDInputManager::GetInstance().IsMouseButtonPressed(button); } @@ -117,7 +117,7 @@ bool InputImpl::IsMouseButtonPressed(Mouse::Button button) Vector2i InputImpl::GetMousePosition() { // Reverse Y axis to match SFML coord. - NSPoint pos = [NSEvent mouseLocation]; + NSPoint pos = [NSEvent mouseLocation]; pos.y = sf::VideoMode::GetDesktopMode().Height - pos.y; return Vector2i(pos.x, pos.y); diff --git a/src/SFML/Window/OSX/JoystickImpl.cpp b/src/SFML/Window/OSX/JoystickImpl.cpp index cd082fa3c..becb38578 100644 --- a/src/SFML/Window/OSX/JoystickImpl.cpp +++ b/src/SFML/Window/OSX/JoystickImpl.cpp @@ -27,48 +27,332 @@ // Headers //////////////////////////////////////////////////////////// #include - +#include namespace sf { namespace priv { +//////////////////////////////////////////////////////////// +JoystickImpl::Location JoystickImpl::myLocationIDs[sf::Joystick::Count] = { 0 }; + + //////////////////////////////////////////////////////////// bool JoystickImpl::IsConnected(unsigned int index) { - // @to be implemented - return false; + bool state = false; // Is the index-th joystick connected ? + + // First, let's check if the device was previously detected : + + if (myLocationIDs[index] != 0) { + state = true; + } + + // Otherwise, let's check if it is now connected : + else { // i.e., myLocationIDs[index] == 0 + + // Get all devices + CFSetRef devices = HIDInputManager::GetInstance().CopyJoystickDevices(); + + if (devices != NULL) { + + CFIndex size = CFSetGetCount(devices); + + if (size > 0) { + + CFTypeRef array[size]; // array of IOHIDDeviceRef + CFSetGetValues(devices, array); + + // If there exists a device d s.t. there is no j s.t. + // myLocationIDs[j] == d's location then we have a new device. + + for (CFIndex didx(0); didx < size; ++didx) { + IOHIDDeviceRef d = (IOHIDDeviceRef)array[didx]; + Location dloc = HIDInputManager::GetLocationID(d); + + bool foundJ = false; + for (unsigned int j(0); j < Joystick::Count; ++j) { + if (myLocationIDs[j] == dloc) { + foundJ = true; + break; // no need to loop again + } + } + + if (foundJ) { + // This is a known device + // Nothing else to do + } else { + // This is a new device + // We set it up for Open(..) + myLocationIDs[index] = dloc; + state = true; + break; // We stop looking for a new device + } + } + + } + + CFRelease(devices); + } + } + + return state; } //////////////////////////////////////////////////////////// bool JoystickImpl::Open(unsigned int index) { - // @to be implemented - return false; + myIndex = index; + Location deviceLoc = myLocationIDs[index]; // The device we need to load + + // Get all devices + CFSetRef devices = HIDInputManager::GetInstance().CopyJoystickDevices(); + if (devices == NULL) { + return false; + } + + // Get a usable copy of the joysticks devices. + CFIndex joysticksCount = CFSetGetCount(devices); + CFTypeRef devicesArray[joysticksCount]; + CFSetGetValues(devices, devicesArray); + + // Get the desired joystick. + IOHIDDeviceRef self = 0; + for (CFIndex i(0); i < joysticksCount; ++i) { + IOHIDDeviceRef d = (IOHIDDeviceRef)devicesArray[i]; + if (deviceLoc == HIDInputManager::GetLocationID(d)) { + self = d; + break; // We found it so we stop looping. + } + } + + if (self == 0) { + // This shouldn't happen! + CFRelease(devices); + return false; + } + + // Get a list of all elements attached to the device. + CFArrayRef elements = IOHIDDeviceCopyMatchingElements(self, + NULL, + kIOHIDOptionsTypeNone); + + if (elements == NULL) { + CFRelease(devices); + return false; + } + + // How many elements are there ? + CFIndex elementsCount = CFArrayGetCount(elements); + + if (elementsCount == 0) { + // What is a joystick with no element ? + CFRelease(elements); + CFRelease(devices); + return false; + } + + // Go through all connected elements. + for (int i = 0; i < elementsCount; ++i) { + IOHIDElementRef element = (IOHIDElementRef) CFArrayGetValueAtIndex(elements, i); + + switch (IOHIDElementGetType(element)) { + + case kIOHIDElementTypeInput_Misc: + switch (IOHIDElementGetUsage(element)) { + + case kHIDUsage_GD_X: + myAxis[Joystick::X] = element; + break; + + case kHIDUsage_GD_Y: + myAxis[Joystick::Y] = element; + break; + + case kHIDUsage_GD_Z: + myAxis[Joystick::Z] = element; + break; + + case kHIDUsage_GD_Rx: + myAxis[Joystick::U] = element; + break; + + case kHIDUsage_GD_Ry: + myAxis[Joystick::V] = element; + break; + + case kHIDUsage_GD_Rz: + myAxis[Joystick::R] = element; + break; + + // kHIDUsage_GD_Vx, kHIDUsage_GD_Vy, kHIDUsage_GD_Vz are ignored. + } + break; + + case kIOHIDElementTypeInput_Button: + if (myButtons.size() < Joystick::ButtonCount) { // If we have free slot... + myButtons.push_back(element); // ...we add this element to the list + } else { + // Too many buttons. We ignore this one. + } + break; + + default: // Make compiler happy + break; + } + } + + // Note : Joy::AxisPovX/Y are not supported (yet). + // Maybe kIOHIDElementTypeInput_Axis is the corresponding type but I can't test. + + // Retain all these objets for personal use + for (ButtonsVector::iterator it(myButtons.begin()); it != myButtons.end(); ++it) { + CFRetain(*it); + } + for (AxisMap::iterator it(myAxis.begin()); it != myAxis.end(); ++it) { + CFRetain(it->second); + } + + // Note : we didn't retain element in the switch because we might have multiple + // Axis X (for example) and we want to keep only the last one. So to prevent + // leaking we retain objects 'only' now. + + CFRelease(devices); + CFRelease(elements); + + return true; } //////////////////////////////////////////////////////////// void JoystickImpl::Close() { - // @to be implemented + for (ButtonsVector::iterator it(myButtons.begin()); it != myButtons.end(); ++it) { + CFRelease(*it); + } + myButtons.clear(); + + for (AxisMap::iterator it(myAxis.begin()); it != myAxis.end(); ++it) { + CFRelease(it->second); + } + myAxis.clear(); + + // And we unregister this joystick + myLocationIDs[myIndex] = 0; } //////////////////////////////////////////////////////////// JoystickCaps JoystickImpl::GetCapabilities() const { - // @to be implemented - return JoystickCaps(); + JoystickCaps caps; + + // Buttons : + caps.ButtonCount = myButtons.size(); + + // Axis : + for (AxisMap::const_iterator it(myAxis.begin()); it != myAxis.end(); ++it) { + caps.Axes[it->first] = true; + } + + return caps; } //////////////////////////////////////////////////////////// JoystickState JoystickImpl::Update() { - // @to be implemented - return JoystickState(); + static const JoystickState disconnectedState; // return this if joystick was disconnected + JoystickState state; // otherwise return that + state.Connected = true; + + // Note : free up is done in Close() which is called, if required, + // by the joystick manager. So we don't release buttons nor axes here. + + // First, let's determine if the joystick is still connected + Location selfLoc = myLocationIDs[myIndex]; + + // Get all devices + CFSetRef devices = HIDInputManager::GetInstance().CopyJoystickDevices(); + if (devices == NULL) { + return disconnectedState; + } + + // Get a usable copy of the joysticks devices. + CFIndex joysticksCount = CFSetGetCount(devices); + CFTypeRef devicesArray[joysticksCount]; + CFSetGetValues(devices, devicesArray); + + // Search for it + bool found = false; + for (CFIndex i(0); i < joysticksCount; ++i) { + IOHIDDeviceRef d = (IOHIDDeviceRef)devicesArray[i]; + if (selfLoc == HIDInputManager::GetLocationID(d)) { + found = true; + break; // Stop looping + } + } + + // Release unused stuff + CFRelease(devices); + + // Was it found ? + if (found) { + // Yes, so we can continue. + } else { + // No, so we stop here + return disconnectedState; + } + + // Update buttons' state + unsigned int i = 0; + for (ButtonsVector::iterator it(myButtons.begin()); it != myButtons.end(); ++it, ++i) { + IOHIDValueRef value = 0; + IOHIDDeviceGetValue(IOHIDElementGetDevice(*it), *it, &value); + + // Check for plug out. + if (!value) { + // No value ? Hum... Seems like the joystick is gone + return disconnectedState; + } + + // 1 means pressed, others mean released + state.Buttons[i] = IOHIDValueGetIntegerValue(value) == 1; + } + + // Update axes' state + for (AxisMap::iterator it = myAxis.begin(); it != myAxis.end(); ++it) { + IOHIDValueRef value = 0; + IOHIDDeviceGetValue(IOHIDElementGetDevice(it->second), it->second, &value); + + // Check for plug out. + if (!value) { + // No value ? Hum... Seems like the joystick is gone + return disconnectedState; + } + + // We want to bind [physicalMin,physicalMax] to [-100=min,100=max]. + // + // General formula to bind [a,b] to [c,d] with a linear progression : + // + // f : [a, b] -> [c, d] + // x |-> (x-a)(d-c)/(b-a)+c + // + // This method might not be very accurate (the "0 position" can be + // slightly shift with some device) but we don't care because most + // of devices are so sensitive that this is not relevant. + double physicalMax = IOHIDElementGetPhysicalMax(it->second); + double physicalMin = IOHIDElementGetPhysicalMin(it->second); + double scaledMin = -100; + double scaledMax = 100; + double physicalValue = IOHIDValueGetScaledValue(value, kIOHIDValueScaleTypePhysical); + float scaledValue = ((physicalValue - physicalMin) * (scaledMax - scaledMin) / (physicalMax - physicalMin)) + scaledMin; + state.Axes[it->first] = scaledValue; + } + + + return state; } } // namespace priv diff --git a/src/SFML/Window/OSX/JoystickImpl.hpp b/src/SFML/Window/OSX/JoystickImpl.hpp index 7dbef005e..e0c0add8c 100644 --- a/src/SFML/Window/OSX/JoystickImpl.hpp +++ b/src/SFML/Window/OSX/JoystickImpl.hpp @@ -30,7 +30,9 @@ // Headers //////////////////////////////////////////////////////////// #include - +#include +#include +#include namespace sf { @@ -91,6 +93,17 @@ private : //////////////////////////////////////////////////////////// // Member data //////////////////////////////////////////////////////////// + typedef long Location; + typedef std::map AxisMap; + typedef std::vector ButtonsVector; + + AxisMap myAxis; ///< Axis (IOHIDElementRef) connected to the joystick + ButtonsVector myButtons; ///< Buttons (IOHIDElementRef) connected to the joystick + unsigned int myIndex; ///< SFML index + + static Location myLocationIDs[sf::Joystick::Count]; ///< Global Joystick register + /// For a corresponding SFML index, myLocationIDs is either some usb + /// location or 0 if there isn't currently a connected joystick device }; } // namespace priv From c3e64230cbeee06eb6bcbdd24e7af925bb22ea0d Mon Sep 17 00:00:00 2001 From: Marco Antognini Date: Thu, 14 Jul 2011 09:59:20 +0200 Subject: [PATCH 2/3] OSX/Mouse::GetPosition(relativeTo) no longer complains when the window is closed --- src/SFML/Window/OSX/InputImpl.mm | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/SFML/Window/OSX/InputImpl.mm b/src/SFML/Window/OSX/InputImpl.mm index 62fe7ee3c..02880be59 100644 --- a/src/SFML/Window/OSX/InputImpl.mm +++ b/src/SFML/Window/OSX/InputImpl.mm @@ -61,6 +61,7 @@ SFOpenGLView* GetSFOpenGLViewFromSFMLWindow(const Window& window) // Get our SFOpenGLView from ... SFOpenGLView* view = nil; + if ([nsHandle isKindOfClass:[NSWindow class]]) { // If system handle is a window then from its content view. view = [nsHandle contentView]; @@ -89,10 +90,13 @@ SFOpenGLView* GetSFOpenGLViewFromSFMLWindow(const Window& window) } } else { - - sf::Err() << "The system handle is neither a nor " - << "object. This shouldn't happen." - << std::endl; + if (nsHandle != 0) { + sf::Err() << "The system handle is neither a nor " + << "object. This shouldn't happen." + << std::endl; + } else { + // This probably means the SFML window was previously closed. + } } From 552c3d114d083d373bc4416ac00f4804f30bc8de Mon Sep 17 00:00:00 2001 From: Marco Antognini Date: Fri, 15 Jul 2011 22:09:49 +0200 Subject: [PATCH 3/3] Added Cocoa example --- xcode/example/Cocoa.xcodeproj/project.pbxproj | 318 ++ .../contents.xcworkspacedata | 7 + xcode/example/Cocoa/Cocoa-Info.plist | 34 + xcode/example/Cocoa/Cocoa-Prefix.pch | 7 + xcode/example/Cocoa/CocoaAppDelegate.h | 59 + xcode/example/Cocoa/CocoaAppDelegate.mm | 197 + xcode/example/Cocoa/NSString+stdstring.h | 39 + xcode/example/Cocoa/NSString+stdstring.mm | 77 + xcode/example/Cocoa/blue.png | Bin 0 -> 114 bytes xcode/example/Cocoa/en.lproj/Credits.rtf | 7 + .../example/Cocoa/en.lproj/InfoPlist.strings | 2 + xcode/example/Cocoa/en.lproj/MainMenu.xib | 4182 +++++++++++++++++ xcode/example/Cocoa/green.png | Bin 0 -> 112 bytes xcode/example/Cocoa/logo.png | Bin 0 -> 104716 bytes xcode/example/Cocoa/main.m | 31 + xcode/example/Cocoa/red.png | Bin 0 -> 113 bytes xcode/example/readme.txt | 33 + .../ResourcePath.hpp | 0 .../ResourcePath.mm | 0 .../TemplateInfo.plist | 0 .../cute_image.jpg | Bin .../nice_music.ogg | Bin .../sansation.ttf | Bin .../TemplateIcon.icns | Bin .../TemplateInfo.plist | 0 .../TemplateInfo.plist | 0 .../cute_image.jpg | Bin .../nice_music.ogg | Bin .../sansation.ttf | Bin .../TemplateIcon.icns | Bin .../TemplateInfo.plist | 0 xcode/{ => templates}/readme.txt | 0 32 files changed, 4993 insertions(+) create mode 100644 xcode/example/Cocoa.xcodeproj/project.pbxproj create mode 100644 xcode/example/Cocoa.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 xcode/example/Cocoa/Cocoa-Info.plist create mode 100644 xcode/example/Cocoa/Cocoa-Prefix.pch create mode 100644 xcode/example/Cocoa/CocoaAppDelegate.h create mode 100644 xcode/example/Cocoa/CocoaAppDelegate.mm create mode 100644 xcode/example/Cocoa/NSString+stdstring.h create mode 100644 xcode/example/Cocoa/NSString+stdstring.mm create mode 100644 xcode/example/Cocoa/blue.png create mode 100644 xcode/example/Cocoa/en.lproj/Credits.rtf create mode 100644 xcode/example/Cocoa/en.lproj/InfoPlist.strings create mode 100644 xcode/example/Cocoa/en.lproj/MainMenu.xib create mode 100644 xcode/example/Cocoa/green.png create mode 100644 xcode/example/Cocoa/logo.png create mode 100644 xcode/example/Cocoa/main.m create mode 100644 xcode/example/Cocoa/red.png create mode 100644 xcode/example/readme.txt rename xcode/{ => templates}/SFML Application Base.xctemplate/ResourcePath.hpp (100%) rename xcode/{ => templates}/SFML Application Base.xctemplate/ResourcePath.mm (100%) rename xcode/{ => templates}/SFML Application Base.xctemplate/TemplateInfo.plist (100%) rename xcode/{ => templates}/SFML Application Base.xctemplate/cute_image.jpg (100%) rename xcode/{ => templates}/SFML Application Base.xctemplate/nice_music.ogg (100%) rename xcode/{ => templates}/SFML Application Base.xctemplate/sansation.ttf (100%) rename xcode/{ => templates}/SFML Application.xctemplate/TemplateIcon.icns (100%) rename xcode/{ => templates}/SFML Application.xctemplate/TemplateInfo.plist (100%) rename xcode/{ => templates}/SFML Command Line Tool Base.xctemplate/TemplateInfo.plist (100%) rename xcode/{ => templates}/SFML Command Line Tool Base.xctemplate/cute_image.jpg (100%) rename xcode/{ => templates}/SFML Command Line Tool Base.xctemplate/nice_music.ogg (100%) rename xcode/{ => templates}/SFML Command Line Tool Base.xctemplate/sansation.ttf (100%) rename xcode/{ => templates}/SFML Command Line Tool.xctemplate/TemplateIcon.icns (100%) rename xcode/{ => templates}/SFML Command Line Tool.xctemplate/TemplateInfo.plist (100%) rename xcode/{ => templates}/readme.txt (100%) diff --git a/xcode/example/Cocoa.xcodeproj/project.pbxproj b/xcode/example/Cocoa.xcodeproj/project.pbxproj new file mode 100644 index 000000000..3e8c495ae --- /dev/null +++ b/xcode/example/Cocoa.xcodeproj/project.pbxproj @@ -0,0 +1,318 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 4C5C378113CF64E1003655B8 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4C5C378013CF64E1003655B8 /* Cocoa.framework */; }; + 4C5C378B13CF64E1003655B8 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 4C5C378913CF64E1003655B8 /* InfoPlist.strings */; }; + 4C5C378D13CF64E1003655B8 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C5C378C13CF64E1003655B8 /* main.m */; }; + 4C5C379113CF64E1003655B8 /* Credits.rtf in Resources */ = {isa = PBXBuildFile; fileRef = 4C5C378F13CF64E1003655B8 /* Credits.rtf */; }; + 4C5C379413CF64E1003655B8 /* CocoaAppDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4C5C379313CF64E1003655B8 /* CocoaAppDelegate.mm */; }; + 4C5C379713CF64E1003655B8 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4C5C379513CF64E1003655B8 /* MainMenu.xib */; }; + 4CD83D6713D0A29400A29530 /* blue.png in Resources */ = {isa = PBXBuildFile; fileRef = 4CD83D6413D0A29400A29530 /* blue.png */; }; + 4CD83D6813D0A29400A29530 /* green.png in Resources */ = {isa = PBXBuildFile; fileRef = 4CD83D6513D0A29400A29530 /* green.png */; }; + 4CD83D6913D0A29400A29530 /* red.png in Resources */ = {isa = PBXBuildFile; fileRef = 4CD83D6613D0A29400A29530 /* red.png */; }; + 4CDE97AB13CF94760071C912 /* libsfml-graphics-d.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 4CDE97A813CF94760071C912 /* libsfml-graphics-d.dylib */; }; + 4CDE97AC13CF94760071C912 /* libsfml-system-d.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 4CDE97A913CF94760071C912 /* libsfml-system-d.dylib */; }; + 4CDE97AD13CF94760071C912 /* libsfml-window-d.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 4CDE97AA13CF94760071C912 /* libsfml-window-d.dylib */; }; + 4CDE97CD13D0366D0071C912 /* NSString+stdstring.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4CDE97CC13D0366D0071C912 /* NSString+stdstring.mm */; }; + 4CEFC42F13D09CB500F92B14 /* logo.png in Resources */ = {isa = PBXBuildFile; fileRef = 4CEFC42E13D09CB500F92B14 /* logo.png */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 4C5C377C13CF64E1003655B8 /* Cocoa.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Cocoa.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 4C5C378013CF64E1003655B8 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; }; + 4C5C378313CF64E1003655B8 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; }; + 4C5C378413CF64E1003655B8 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; }; + 4C5C378513CF64E1003655B8 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; + 4C5C378813CF64E1003655B8 /* Cocoa-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Cocoa-Info.plist"; sourceTree = ""; }; + 4C5C378A13CF64E1003655B8 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; + 4C5C378C13CF64E1003655B8 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; + 4C5C378E13CF64E1003655B8 /* Cocoa-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Cocoa-Prefix.pch"; sourceTree = ""; }; + 4C5C379013CF64E1003655B8 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = en; path = en.lproj/Credits.rtf; sourceTree = ""; }; + 4C5C379213CF64E1003655B8 /* CocoaAppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CocoaAppDelegate.h; sourceTree = ""; }; + 4C5C379313CF64E1003655B8 /* CocoaAppDelegate.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = CocoaAppDelegate.mm; sourceTree = ""; }; + 4C5C379613CF64E1003655B8 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/MainMenu.xib; sourceTree = ""; }; + 4CD83D6413D0A29400A29530 /* blue.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = blue.png; sourceTree = ""; }; + 4CD83D6513D0A29400A29530 /* green.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = green.png; sourceTree = ""; }; + 4CD83D6613D0A29400A29530 /* red.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = red.png; sourceTree = ""; }; + 4CDE97A813CF94760071C912 /* libsfml-graphics-d.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libsfml-graphics-d.dylib"; path = "usr/local/lib/libsfml-graphics-d.dylib"; sourceTree = SDKROOT; }; + 4CDE97A913CF94760071C912 /* libsfml-system-d.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libsfml-system-d.dylib"; path = "usr/local/lib/libsfml-system-d.dylib"; sourceTree = SDKROOT; }; + 4CDE97AA13CF94760071C912 /* libsfml-window-d.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libsfml-window-d.dylib"; path = "usr/local/lib/libsfml-window-d.dylib"; sourceTree = SDKROOT; }; + 4CDE97CB13D0366D0071C912 /* NSString+stdstring.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+stdstring.h"; sourceTree = ""; }; + 4CDE97CC13D0366D0071C912 /* NSString+stdstring.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "NSString+stdstring.mm"; sourceTree = ""; }; + 4CEFC42E13D09CB500F92B14 /* logo.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = logo.png; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 4C5C377913CF64E1003655B8 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 4CDE97AB13CF94760071C912 /* libsfml-graphics-d.dylib in Frameworks */, + 4CDE97AC13CF94760071C912 /* libsfml-system-d.dylib in Frameworks */, + 4CDE97AD13CF94760071C912 /* libsfml-window-d.dylib in Frameworks */, + 4C5C378113CF64E1003655B8 /* Cocoa.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 4C5C377113CF64E1003655B8 = { + isa = PBXGroup; + children = ( + 4C5C378613CF64E1003655B8 /* Cocoa */, + 4C5C377F13CF64E1003655B8 /* Frameworks */, + 4C5C377D13CF64E1003655B8 /* Products */, + ); + sourceTree = ""; + }; + 4C5C377D13CF64E1003655B8 /* Products */ = { + isa = PBXGroup; + children = ( + 4C5C377C13CF64E1003655B8 /* Cocoa.app */, + ); + name = Products; + sourceTree = ""; + }; + 4C5C377F13CF64E1003655B8 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 4CDE97A813CF94760071C912 /* libsfml-graphics-d.dylib */, + 4CDE97A913CF94760071C912 /* libsfml-system-d.dylib */, + 4CDE97AA13CF94760071C912 /* libsfml-window-d.dylib */, + 4C5C378013CF64E1003655B8 /* Cocoa.framework */, + 4C5C378213CF64E1003655B8 /* Other Frameworks */, + ); + name = Frameworks; + sourceTree = ""; + }; + 4C5C378213CF64E1003655B8 /* Other Frameworks */ = { + isa = PBXGroup; + children = ( + 4C5C378313CF64E1003655B8 /* AppKit.framework */, + 4C5C378413CF64E1003655B8 /* CoreData.framework */, + 4C5C378513CF64E1003655B8 /* Foundation.framework */, + ); + name = "Other Frameworks"; + sourceTree = ""; + }; + 4C5C378613CF64E1003655B8 /* Cocoa */ = { + isa = PBXGroup; + children = ( + 4C5C379213CF64E1003655B8 /* CocoaAppDelegate.h */, + 4C5C379313CF64E1003655B8 /* CocoaAppDelegate.mm */, + 4C5C379513CF64E1003655B8 /* MainMenu.xib */, + 4CDE97CB13D0366D0071C912 /* NSString+stdstring.h */, + 4CDE97CC13D0366D0071C912 /* NSString+stdstring.mm */, + 4C5C378713CF64E1003655B8 /* Supporting Files */, + ); + path = Cocoa; + sourceTree = ""; + }; + 4C5C378713CF64E1003655B8 /* Supporting Files */ = { + isa = PBXGroup; + children = ( + 4CEFC42E13D09CB500F92B14 /* logo.png */, + 4CD83D6413D0A29400A29530 /* blue.png */, + 4CD83D6513D0A29400A29530 /* green.png */, + 4CD83D6613D0A29400A29530 /* red.png */, + 4C5C378813CF64E1003655B8 /* Cocoa-Info.plist */, + 4C5C378913CF64E1003655B8 /* InfoPlist.strings */, + 4C5C378C13CF64E1003655B8 /* main.m */, + 4C5C378E13CF64E1003655B8 /* Cocoa-Prefix.pch */, + 4C5C378F13CF64E1003655B8 /* Credits.rtf */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 4C5C377B13CF64E1003655B8 /* Cocoa */ = { + isa = PBXNativeTarget; + buildConfigurationList = 4C5C379A13CF64E1003655B8 /* Build configuration list for PBXNativeTarget "Cocoa" */; + buildPhases = ( + 4C5C377813CF64E1003655B8 /* Sources */, + 4C5C377913CF64E1003655B8 /* Frameworks */, + 4C5C377A13CF64E1003655B8 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Cocoa; + productName = Cocoa; + productReference = 4C5C377C13CF64E1003655B8 /* Cocoa.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 4C5C377313CF64E1003655B8 /* Project object */ = { + isa = PBXProject; + buildConfigurationList = 4C5C377613CF64E1003655B8 /* Build configuration list for PBXProject "Cocoa" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = 4C5C377113CF64E1003655B8; + productRefGroup = 4C5C377D13CF64E1003655B8 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 4C5C377B13CF64E1003655B8 /* Cocoa */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 4C5C377A13CF64E1003655B8 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 4C5C378B13CF64E1003655B8 /* InfoPlist.strings in Resources */, + 4C5C379113CF64E1003655B8 /* Credits.rtf in Resources */, + 4C5C379713CF64E1003655B8 /* MainMenu.xib in Resources */, + 4CEFC42F13D09CB500F92B14 /* logo.png in Resources */, + 4CD83D6713D0A29400A29530 /* blue.png in Resources */, + 4CD83D6813D0A29400A29530 /* green.png in Resources */, + 4CD83D6913D0A29400A29530 /* red.png in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 4C5C377813CF64E1003655B8 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 4C5C378D13CF64E1003655B8 /* main.m in Sources */, + 4C5C379413CF64E1003655B8 /* CocoaAppDelegate.mm in Sources */, + 4CDE97CD13D0366D0071C912 /* NSString+stdstring.mm in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 4C5C378913CF64E1003655B8 /* InfoPlist.strings */ = { + isa = PBXVariantGroup; + children = ( + 4C5C378A13CF64E1003655B8 /* en */, + ); + name = InfoPlist.strings; + sourceTree = ""; + }; + 4C5C378F13CF64E1003655B8 /* Credits.rtf */ = { + isa = PBXVariantGroup; + children = ( + 4C5C379013CF64E1003655B8 /* en */, + ); + name = Credits.rtf; + sourceTree = ""; + }; + 4C5C379513CF64E1003655B8 /* MainMenu.xib */ = { + isa = PBXVariantGroup; + children = ( + 4C5C379613CF64E1003655B8 /* en */, + ); + name = MainMenu.xib; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 4C5C379813CF64E1003655B8 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; + COPY_PHASE_STRIP = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_VERSION = ""; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.6; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + }; + name = Debug; + }; + 4C5C379913CF64E1003655B8 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; + COPY_PHASE_STRIP = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + GCC_VERSION = ""; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.6; + SDKROOT = macosx; + }; + name = Release; + }; + 4C5C379B13CF64E1003655B8 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "Cocoa/Cocoa-Prefix.pch"; + INFOPLIST_FILE = "Cocoa/Cocoa-Info.plist"; + MACOSX_DEPLOYMENT_TARGET = 10.6; + PRODUCT_NAME = "$(TARGET_NAME)"; + WRAPPER_EXTENSION = app; + }; + name = Debug; + }; + 4C5C379C13CF64E1003655B8 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "Cocoa/Cocoa-Prefix.pch"; + INFOPLIST_FILE = "Cocoa/Cocoa-Info.plist"; + MACOSX_DEPLOYMENT_TARGET = 10.6; + PRODUCT_NAME = "$(TARGET_NAME)"; + WRAPPER_EXTENSION = app; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 4C5C377613CF64E1003655B8 /* Build configuration list for PBXProject "Cocoa" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 4C5C379813CF64E1003655B8 /* Debug */, + 4C5C379913CF64E1003655B8 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 4C5C379A13CF64E1003655B8 /* Build configuration list for PBXNativeTarget "Cocoa" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 4C5C379B13CF64E1003655B8 /* Debug */, + 4C5C379C13CF64E1003655B8 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 4C5C377313CF64E1003655B8 /* Project object */; +} diff --git a/xcode/example/Cocoa.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/xcode/example/Cocoa.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 000000000..b56347b71 --- /dev/null +++ b/xcode/example/Cocoa.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/xcode/example/Cocoa/Cocoa-Info.plist b/xcode/example/Cocoa/Cocoa-Info.plist new file mode 100644 index 000000000..ac4103a92 --- /dev/null +++ b/xcode/example/Cocoa/Cocoa-Info.plist @@ -0,0 +1,34 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIconFile + logo.png + CFBundleIdentifier + org.sfml-dev.${PRODUCT_NAME:rfc1034identifier} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + LSMinimumSystemVersion + ${MACOSX_DEPLOYMENT_TARGET} + NSHumanReadableCopyright + Copyright © 2007-2011 Marco Antognini and Laurent Gomila. Shared under zlib/libpng License. + NSMainNibFile + MainMenu + NSPrincipalClass + NSApplication + + diff --git a/xcode/example/Cocoa/Cocoa-Prefix.pch b/xcode/example/Cocoa/Cocoa-Prefix.pch new file mode 100644 index 000000000..63179b0dc --- /dev/null +++ b/xcode/example/Cocoa/Cocoa-Prefix.pch @@ -0,0 +1,7 @@ +// +// Prefix header for all source files of the 'Cocoa' target in the 'Cocoa' project +// + +#ifdef __OBJC__ + #import +#endif diff --git a/xcode/example/Cocoa/CocoaAppDelegate.h b/xcode/example/Cocoa/CocoaAppDelegate.h new file mode 100644 index 000000000..de583ff54 --- /dev/null +++ b/xcode/example/Cocoa/CocoaAppDelegate.h @@ -0,0 +1,59 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2011 Marco Antognini (antognini.marco@gmail.com), +// Laurent Gomila (laurent.gom@gmail.com), +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#import +#import + +/* + * NB : We need pointers for C++ objects fields in Obj-C interface ! + * The recomanded way is to use PIMP idiom. + * + * It's elegant. Moreover, we do no constrain + * other file including this one to be Obj-C++. + */ + +struct SFMLmainWindow; + +@interface CocoaAppDelegate : NSObject { +@private + NSWindow *_window; + NSView *_sfmlView; + NSTextField *_textField; + SFMLmainWindow *_mainWindow; + NSTimer *_renderTimer; + BOOL _visible; +} + +@property (retain) IBOutlet NSWindow *window; +@property (assign) IBOutlet NSView *sfmlView; +@property (assign) IBOutlet NSTextField *textField; + +-(IBAction)colorChanged:(NSPopUpButton *)sender; +-(IBAction)rotationChanged:(NSSlider *)sender; +-(IBAction)visibleChanged:(NSButton *)sender; +-(IBAction)textChanged:(NSTextField *)sender; +-(IBAction)updateText:(NSButton *)sender; + +@end diff --git a/xcode/example/Cocoa/CocoaAppDelegate.mm b/xcode/example/Cocoa/CocoaAppDelegate.mm new file mode 100644 index 000000000..9e5026474 --- /dev/null +++ b/xcode/example/Cocoa/CocoaAppDelegate.mm @@ -0,0 +1,197 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2011 Marco Antognini (antognini.marco@gmail.com), +// Laurent Gomila (laurent.gom@gmail.com), +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#import "CocoaAppDelegate.h" +#import "NSString+stdstring.h" + +// These define are used for converting the color of the NSPopUpButton +#define BLUE @"Blue" +#define GREEN @"Green" +#define RED @"Red" + +// Our PIMPL +struct SFMLmainWindow +{ + SFMLmainWindow(sf::WindowHandle win) + : renderWindow(win) + , background(sf::Color::Blue) + { + std::string resPath = [[[NSBundle mainBundle] resourcePath] tostdstring]; + if (!logo.LoadFromFile(resPath + "/logo.png")) { + NSLog(@"Couldn't load the logo image"); + } + + sprite.SetImage(logo, true); + sprite.SetOrigin(sprite.GetSize() / 2.f); + sprite.Scale(0.3, 0.3); + + unsigned int ww = renderWindow.GetWidth(); + unsigned int wh = renderWindow.GetHeight(); + sprite.SetPosition(sf::Vector2f(ww, wh) / 2.f); + + text.SetColor(sf::Color::White); + } + + sf::RenderWindow renderWindow; + sf::Text text; + sf::Image logo; + sf::Sprite sprite; + sf::Color background; +}; + +// Private stuff +@interface CocoaAppDelegate () + +@property (assign) SFMLmainWindow *mainWindow; +@property (retain) NSTimer *renderTimer; +@property (assign) BOOL visible; + +-(void)renderMainWindow:(NSTimer *)aTimer; + +@end + + +// Finally, the implementation +@implementation CocoaAppDelegate + +@synthesize window = _window; +@synthesize sfmlView = _sfmlView; +@synthesize textField = _textField; + +@synthesize mainWindow = _mainWindow; +@synthesize renderTimer = _renderTimer; +@synthesize visible = _visible; + +-(void)applicationDidFinishLaunching:(NSNotification *)aNotification +{ + // Init the 1st SFML render area. + self.mainWindow = new SFMLmainWindow(self.sfmlView); + self.mainWindow->text.SetString([self.textField.stringValue tostdwstring]); + self.visible = YES; + + // Launch the timer to periodically display our stuff into the Cocoa view. + self.renderTimer = [NSTimer timerWithTimeInterval:1.f/60.f + target:self + selector:@selector(renderMainWindow:) + userInfo:nil + repeats:YES]; + [[NSRunLoop mainRunLoop] addTimer:self.renderTimer + forMode:NSDefaultRunLoopMode]; + [[NSRunLoop mainRunLoop] addTimer:self.renderTimer + forMode:NSEventTrackingRunLoopMode]; + /* + * This is really some ugly code but in order to have the timer fired + * periodically we need to add it to the two above runloop mode. + * + * The default mode allows timer firing while the user doesn't do anything + * while the second mode allows timer firing while he is using a slider + * or a menu. + */ +} + +-(void)dealloc +{ + [self.renderTimer invalidate]; + self.mainWindow->renderWindow.Close(); + + self.window = nil; + self.sfmlView = nil; + self.textField = nil; + + delete self.mainWindow; + self.mainWindow = 0; + self.renderTimer = nil; + + [super dealloc]; +} + +-(void)renderMainWindow:(NSTimer *)aTimer +{ + // Scaling + /* /!\ we do this at 60fps so choose low scaling factor! /!\ */ + if (sf::Keyboard::IsKeyPressed(sf::Keyboard::Up)) + { + self.mainWindow->sprite.Scale(1.01, 1.01); + } + if (sf::Keyboard::IsKeyPressed(sf::Keyboard::Down)) + { + self.mainWindow->sprite.Scale(0.99, 0.99); + } + + // Clear the window, display some stuff and display it into our view. + + self.mainWindow->renderWindow.Clear(self.mainWindow->background); + + if (self.visible) + { + self.mainWindow->renderWindow.Draw(self.mainWindow->sprite); + } + + self.mainWindow->renderWindow.Draw(self.mainWindow->text); + + self.mainWindow->renderWindow.Display(); +} + +-(IBAction)colorChanged:(NSPopUpButton *)sender +{ + // Convert title to color + NSString *color = [[sender selectedItem] title]; + if ([color isEqualToString:BLUE]) + { + self.mainWindow->background = sf::Color::Blue; + } + else if ([color isEqualToString:GREEN]) + { + self.mainWindow->background = sf::Color::Green; + } + else + { + self.mainWindow->background = sf::Color::Red; + } +} + +-(IBAction)rotationChanged:(NSSlider *)sender +{ + float angle = [sender floatValue]; + self.mainWindow->sprite.SetRotation(angle); +} + +-(IBAction)visibleChanged:(NSButton *)sender +{ + self.visible = [sender state] == NSOnState; +} + +-(IBAction)textChanged:(NSTextField *)sender +{ + self.mainWindow->text.SetString([[sender stringValue] tostdwstring]); +} + +- (IBAction)updateText:(NSButton *)sender +{ + // Simply simulate textChanged : + [self textChanged:self.textField]; +} + +@end diff --git a/xcode/example/Cocoa/NSString+stdstring.h b/xcode/example/Cocoa/NSString+stdstring.h new file mode 100644 index 000000000..ae580a7a2 --- /dev/null +++ b/xcode/example/Cocoa/NSString+stdstring.h @@ -0,0 +1,39 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2011 Marco Antognini (antognini.marco@gmail.com), +// Laurent Gomila (laurent.gom@gmail.com), +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#import +#import + +@interface NSString (NSString_stdstring) + ++(id)stringWithstdstring:(std::string const &)string; + ++(id)stringWithstdwstring:(std::wstring const &)string; + +-(std::string)tostdstring; + +-(std::wstring)tostdwstring; + +@end diff --git a/xcode/example/Cocoa/NSString+stdstring.mm b/xcode/example/Cocoa/NSString+stdstring.mm new file mode 100644 index 000000000..db5ea3966 --- /dev/null +++ b/xcode/example/Cocoa/NSString+stdstring.mm @@ -0,0 +1,77 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2011 Marco Antognini (antognini.marco@gmail.com), +// Laurent Gomila (laurent.gom@gmail.com), +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#include + +@implementation NSString (NSString_stdstring) + ++(id)stringWithstdstring:(std::string const &)string +{ + std::string utf8; + utf8.reserve(string.size() + 1); + + sf::Utf8::FromAnsi(string.begin(), string.end(), std::back_inserter(utf8)); + + NSString *str = [NSString stringWithCString:utf8.c_str() + encoding:NSUTF8StringEncoding]; + return str; +} + +-(std::string)tostdstring +{ + // Not sure about the encoding to use. Using [self UTF8String] doesn't + // work for characters like é or à. + const char *cstr = [self cStringUsingEncoding:NSISOLatin1StringEncoding]; + + if (cstr != NULL) + { + std::string str(cstr); + return str; + } + else + { + return ""; + } +} + ++(id)stringWithstdwstring:(std::wstring const &)string +{ + char* data = (char *)string.data(); + unsigned size = string.size() * sizeof(wchar_t); + + NSString *str = [[[NSString alloc] initWithBytes:data length:size + encoding:NSUTF32LittleEndianStringEncoding] autorelease]; + return str; +} + +-(std::wstring)tostdwstring +{ + // According to wikipedia, Mac OS X is Little Endian on x86 and x86-64 + // http://en.wikipedia.org/wiki/Endianness + NSData* asData = [self dataUsingEncoding:NSUTF32LittleEndianStringEncoding]; + return std::wstring((wchar_t *)[asData bytes], [asData length] / sizeof(wchar_t)); +} + +@end \ No newline at end of file diff --git a/xcode/example/Cocoa/blue.png b/xcode/example/Cocoa/blue.png new file mode 100644 index 0000000000000000000000000000000000000000..8945e85b651b4ca00ead9f7380c1ed6a9e8c5016 GIT binary patch literal 114 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9GG!XV7ZFl&wkP*BCw z#WBP}FgYdR$N%|_Ob1*V<2GCiWR{R{JDgy`<1jPv!DU8~0ssI2 literal 0 HcmV?d00001 diff --git a/xcode/example/Cocoa/en.lproj/Credits.rtf b/xcode/example/Cocoa/en.lproj/Credits.rtf new file mode 100644 index 000000000..61de98d95 --- /dev/null +++ b/xcode/example/Cocoa/en.lproj/Credits.rtf @@ -0,0 +1,7 @@ +{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\paperw11900\paperh16840\vieww9600\viewh8400\viewkind0 +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qj\pardirnatural + +\f0\fs24 \cf0 See http://sfml-dev.org for more information} \ No newline at end of file diff --git a/xcode/example/Cocoa/en.lproj/InfoPlist.strings b/xcode/example/Cocoa/en.lproj/InfoPlist.strings new file mode 100644 index 000000000..477b28ff8 --- /dev/null +++ b/xcode/example/Cocoa/en.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Localized versions of Info.plist keys */ + diff --git a/xcode/example/Cocoa/en.lproj/MainMenu.xib b/xcode/example/Cocoa/en.lproj/MainMenu.xib new file mode 100644 index 000000000..bb8a33033 --- /dev/null +++ b/xcode/example/Cocoa/en.lproj/MainMenu.xib @@ -0,0 +1,4182 @@ + + + + 0 + 10K540 + 1891 + 1038.36 + 461.00 + + com.apple.InterfaceBuilder.CocoaPlugin + 1891 + + + YES + NSPopUpButton + NSMenuItem + NSMenu + NSTextFieldCell + NSButtonCell + NSButton + NSSlider + NSSliderCell + NSCustomObject + NSCustomView + NSView + NSWindowTemplate + NSTextField + NSPopUpButtonCell + + + YES + com.apple.InterfaceBuilder.CocoaPlugin + + + PluginDependencyRecalculationVersion + + + + YES + + NSApplication + + + FirstResponder + + + NSApplication + + + AMainMenu + + YES + + + Cocoa + + 1048576 + 2147483647 + + NSImage + NSMenuCheckmark + + + NSImage + NSMenuMixedState + + submenuAction: + + Cocoa + + YES + + + About Cocoa + + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Preferences… + , + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Services + + 1048576 + 2147483647 + + + submenuAction: + + Services + + YES + + _NSServicesMenu + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Hide Cocoa + h + 1048576 + 2147483647 + + + + + + Hide Others + h + 1572864 + 2147483647 + + + + + + Show All + + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Quit Cocoa + q + 1048576 + 2147483647 + + + + + _NSAppleMenu + + + + + File + + 1048576 + 2147483647 + + + submenuAction: + + File + + YES + + + New + n + 1048576 + 2147483647 + + + + + + Open… + o + 1048576 + 2147483647 + + + + + + Open Recent + + 1048576 + 2147483647 + + + submenuAction: + + Open Recent + + YES + + + Clear Menu + + 1048576 + 2147483647 + + + + + _NSRecentDocumentsMenu + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Close + w + 1048576 + 2147483647 + + + + + + Save + s + 1048576 + 2147483647 + + + + + + Save As… + S + 1179648 + 2147483647 + + + + + + Revert to Saved + + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Page Setup... + P + 1179648 + 2147483647 + + + + + + + Print… + p + 1048576 + 2147483647 + + + + + + + + + Edit + + 1048576 + 2147483647 + + + submenuAction: + + Edit + + YES + + + Undo + z + 1048576 + 2147483647 + + + + + + Redo + Z + 1179648 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Cut + x + 1048576 + 2147483647 + + + + + + Copy + c + 1048576 + 2147483647 + + + + + + Paste + v + 1048576 + 2147483647 + + + + + + Paste and Match Style + V + 1572864 + 2147483647 + + + + + + Delete + + 1048576 + 2147483647 + + + + + + Select All + a + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Find + + 1048576 + 2147483647 + + + submenuAction: + + Find + + YES + + + Find… + f + 1048576 + 2147483647 + + + 1 + + + + Find Next + g + 1048576 + 2147483647 + + + 2 + + + + Find Previous + G + 1179648 + 2147483647 + + + 3 + + + + Use Selection for Find + e + 1048576 + 2147483647 + + + 7 + + + + Jump to Selection + j + 1048576 + 2147483647 + + + + + + + + + Spelling and Grammar + + 1048576 + 2147483647 + + + submenuAction: + + Spelling and Grammar + + YES + + + Show Spelling and Grammar + : + 1048576 + 2147483647 + + + + + + Check Document Now + ; + 1048576 + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Check Spelling While Typing + + 1048576 + 2147483647 + + + + + + Check Grammar With Spelling + + 1048576 + 2147483647 + + + + + + Correct Spelling Automatically + + 2147483647 + + + + + + + + + Substitutions + + 1048576 + 2147483647 + + + submenuAction: + + Substitutions + + YES + + + Show Substitutions + + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Smart Copy/Paste + f + 1048576 + 2147483647 + + + 1 + + + + Smart Quotes + g + 1048576 + 2147483647 + + + 2 + + + + Smart Dashes + + 2147483647 + + + + + + Smart Links + G + 1179648 + 2147483647 + + + 3 + + + + Text Replacement + + 2147483647 + + + + + + + + + Transformations + + 2147483647 + + + submenuAction: + + Transformations + + YES + + + Make Upper Case + + 2147483647 + + + + + + Make Lower Case + + 2147483647 + + + + + + Capitalize + + 2147483647 + + + + + + + + + Speech + + 1048576 + 2147483647 + + + submenuAction: + + Speech + + YES + + + Start Speaking + + 1048576 + 2147483647 + + + + + + Stop Speaking + + 1048576 + 2147483647 + + + + + + + + + + + + Format + + 2147483647 + + + submenuAction: + + Format + + YES + + + Font + + 2147483647 + + + submenuAction: + + Font + + YES + + + Show Fonts + t + 1048576 + 2147483647 + + + + + + Bold + b + 1048576 + 2147483647 + + + 2 + + + + Italic + i + 1048576 + 2147483647 + + + 1 + + + + Underline + u + 1048576 + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Bigger + + + 1048576 + 2147483647 + + + 3 + + + + Smaller + - + 1048576 + 2147483647 + + + 4 + + + + YES + YES + + + 2147483647 + + + + + + Kern + + 2147483647 + + + submenuAction: + + Kern + + YES + + + Use Default + + 2147483647 + + + + + + Use None + + 2147483647 + + + + + + Tighten + + 2147483647 + + + + + + Loosen + + 2147483647 + + + + + + + + + Ligature + + 2147483647 + + + submenuAction: + + Ligature + + YES + + + Use Default + + 2147483647 + + + + + + Use None + + 2147483647 + + + + + + Use All + + 2147483647 + + + + + + + + + Baseline + + 2147483647 + + + submenuAction: + + Baseline + + YES + + + Use Default + + 2147483647 + + + + + + Superscript + + 2147483647 + + + + + + Subscript + + 2147483647 + + + + + + Raise + + 2147483647 + + + + + + Lower + + 2147483647 + + + + + + + + + YES + YES + + + 2147483647 + + + + + + Show Colors + C + 1048576 + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Copy Style + c + 1572864 + 2147483647 + + + + + + Paste Style + v + 1572864 + 2147483647 + + + + + _NSFontMenu + + + + + Text + + 2147483647 + + + submenuAction: + + Text + + YES + + + Align Left + { + 1048576 + 2147483647 + + + + + + Center + | + 1048576 + 2147483647 + + + + + + Justify + + 2147483647 + + + + + + Align Right + } + 1048576 + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Writing Direction + + 2147483647 + + + submenuAction: + + Writing Direction + + YES + + + YES + Paragraph + + 2147483647 + + + + + + CURlZmF1bHQ + + 2147483647 + + + + + + CUxlZnQgdG8gUmlnaHQ + + 2147483647 + + + + + + CVJpZ2h0IHRvIExlZnQ + + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + YES + Selection + + 2147483647 + + + + + + CURlZmF1bHQ + + 2147483647 + + + + + + CUxlZnQgdG8gUmlnaHQ + + 2147483647 + + + + + + CVJpZ2h0IHRvIExlZnQ + + 2147483647 + + + + + + + + + YES + YES + + + 2147483647 + + + + + + Show Ruler + + 2147483647 + + + + + + Copy Ruler + c + 1310720 + 2147483647 + + + + + + Paste Ruler + v + 1310720 + 2147483647 + + + + + + + + + + + + View + + 1048576 + 2147483647 + + + submenuAction: + + View + + YES + + + Show Toolbar + t + 1572864 + 2147483647 + + + + + + Customize Toolbar… + + 1048576 + 2147483647 + + + + + + + + + Window + + 1048576 + 2147483647 + + + submenuAction: + + Window + + YES + + + Minimize + m + 1048576 + 2147483647 + + + + + + Zoom + + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Bring All to Front + + 1048576 + 2147483647 + + + + + _NSWindowsMenu + + + + + Help + + 2147483647 + + + submenuAction: + + Help + + YES + + + Cocoa Help + ? + 1048576 + 2147483647 + + + + + _NSHelpMenu + + + + _NSMainMenu + + + 7 + 2 + {{232, 390}, {485, 379}} + 1417150464 + Cocoa + NSWindow + + + + 256 + + YES + + + 268 + {{366, 35}, {97, 26}} + + + + YES + + -2076049856 + 134219776 + + LucidaGrande + 13 + 1044 + + + -2035138305 + 129 + + + + 400 + 75 + + YES + + Color + + YES + + + Blue + + 1048576 + 2147483647 + + NSImage + blue + + + + _popUpItemAction: + + + + + Green + + 1048576 + 2147483647 + + NSImage + green + + + + _popUpItemAction: + + + + + Red + + 1048576 + 2147483647 + + NSImage + red + + + + _popUpItemAction: + + + + + + -1 + 1 + YES + YES + 2 + + + + + 268 + {{234, 34}, {28, 30}} + + + + YES + + 67501824 + 0 + + + 359 + 0.0 + 0.0 + 0.0 + 0 + 1 + NO + NO + 1 + + + + + 268 + {{18, 40}, {64, 18}} + + + + YES + + -2080244224 + 0 + Visible + + + 1211912703 + 2 + + NSImage + NSSwitch + + + NSSwitch + + + + 200 + 25 + + + + + 268 + {{172, 41}, {57, 17}} + + + + YES + + 68288064 + 272630784 + Rotation + + + + 6 + System + controlColor + + 3 + MC42NjY2NjY2NjY3AA + + + + 6 + System + controlTextColor + + 3 + MAA + + + + + + + 268 + {{325, 39}, {39, 17}} + + + + YES + + 68288064 + 272630784 + Color + + + + + + + + + 268 + {{20, 337}, {359, 22}} + + + + YES + + -1803944383 + 272630848 + Hello SFML! + + Enter some text here + + YES + + 6 + System + textBackgroundColor + + 3 + MQA + + + + 6 + System + textColor + + + + YES + NSAllRomanInputSourcesLocaleIdentifier + + + + + + 268 + {{20, 72}, {440, 260}} + + + + NSView + + + + 268 + {{381, 331}, {85, 32}} + + + + YES + + -2080244224 + 134217728 + Update + + + -2038021889 + 129 + + + DQ + 400 + 75 + + + + + 268 + {{17, 2}, {451, 17}} + + + + YES + + 68288064 + 272630784 + Tips : you can use up and down arrows to scale the logo. + + LucidaGrande + 11 + 16 + + + + + + + + {485, 379} + + + + + {{0, 0}, {1440, 878}} + {1e+13, 1e+13} + NO + 22 + + + CocoaAppDelegate + + + NSFontManager + + + + + YES + + + performMiniaturize: + + + + 37 + + + + arrangeInFront: + + + + 39 + + + + print: + + + + 86 + + + + runPageLayout: + + + + 87 + + + + clearRecentDocuments: + + + + 127 + + + + orderFrontStandardAboutPanel: + + + + 142 + + + + performClose: + + + + 193 + + + + toggleContinuousSpellChecking: + + + + 222 + + + + undo: + + + + 223 + + + + copy: + + + + 224 + + + + checkSpelling: + + + + 225 + + + + paste: + + + + 226 + + + + stopSpeaking: + + + + 227 + + + + cut: + + + + 228 + + + + showGuessPanel: + + + + 230 + + + + redo: + + + + 231 + + + + selectAll: + + + + 232 + + + + startSpeaking: + + + + 233 + + + + delete: + + + + 235 + + + + performZoom: + + + + 240 + + + + performFindPanelAction: + + + + 241 + + + + centerSelectionInVisibleArea: + + + + 245 + + + + toggleGrammarChecking: + + + + 347 + + + + toggleSmartInsertDelete: + + + + 355 + + + + toggleAutomaticQuoteSubstitution: + + + + 356 + + + + toggleAutomaticLinkDetection: + + + + 357 + + + + saveDocument: + + + + 362 + + + + saveDocumentAs: + + + + 363 + + + + revertDocumentToSaved: + + + + 364 + + + + runToolbarCustomizationPalette: + + + + 365 + + + + toggleToolbarShown: + + + + 366 + + + + hide: + + + + 367 + + + + hideOtherApplications: + + + + 368 + + + + unhideAllApplications: + + + + 370 + + + + newDocument: + + + + 373 + + + + openDocument: + + + + 374 + + + + addFontTrait: + + + + 421 + + + + addFontTrait: + + + + 422 + + + + modifyFont: + + + + 423 + + + + orderFrontFontPanel: + + + + 424 + + + + modifyFont: + + + + 425 + + + + raiseBaseline: + + + + 426 + + + + lowerBaseline: + + + + 427 + + + + copyFont: + + + + 428 + + + + subscript: + + + + 429 + + + + superscript: + + + + 430 + + + + tightenKerning: + + + + 431 + + + + underline: + + + + 432 + + + + orderFrontColorPanel: + + + + 433 + + + + useAllLigatures: + + + + 434 + + + + loosenKerning: + + + + 435 + + + + pasteFont: + + + + 436 + + + + unscript: + + + + 437 + + + + useStandardKerning: + + + + 438 + + + + useStandardLigatures: + + + + 439 + + + + turnOffLigatures: + + + + 440 + + + + turnOffKerning: + + + + 441 + + + + terminate: + + + + 449 + + + + toggleAutomaticSpellingCorrection: + + + + 456 + + + + orderFrontSubstitutionsPanel: + + + + 458 + + + + toggleAutomaticDashSubstitution: + + + + 461 + + + + toggleAutomaticTextReplacement: + + + + 463 + + + + uppercaseWord: + + + + 464 + + + + capitalizeWord: + + + + 467 + + + + lowercaseWord: + + + + 468 + + + + pasteAsPlainText: + + + + 486 + + + + performFindPanelAction: + + + + 487 + + + + performFindPanelAction: + + + + 488 + + + + performFindPanelAction: + + + + 489 + + + + showHelp: + + + + 493 + + + + delegate + + + + 495 + + + + alignCenter: + + + + 518 + + + + pasteRuler: + + + + 519 + + + + toggleRuler: + + + + 520 + + + + alignRight: + + + + 521 + + + + copyRuler: + + + + 522 + + + + alignJustified: + + + + 523 + + + + alignLeft: + + + + 524 + + + + makeBaseWritingDirectionNatural: + + + + 525 + + + + makeBaseWritingDirectionLeftToRight: + + + + 526 + + + + makeBaseWritingDirectionRightToLeft: + + + + 527 + + + + makeTextWritingDirectionNatural: + + + + 528 + + + + makeTextWritingDirectionLeftToRight: + + + + 529 + + + + makeTextWritingDirectionRightToLeft: + + + + 530 + + + + window + + + + 532 + + + + colorChanged: + + + + 557 + + + + sfmlView + + + + 558 + + + + initialFirstResponder + + + + 559 + + + + rotationChanged: + + + + 560 + + + + visibleChanged: + + + + 561 + + + + textChanged: + + + + 562 + + + + textField + + + + 566 + + + + updateText: + + + + 567 + + + + + YES + + 0 + + YES + + + + + + -2 + + + File's Owner + + + -1 + + + First Responder + + + -3 + + + Application + + + 29 + + + YES + + + + + + + + + + + + 19 + + + YES + + + + + + 56 + + + YES + + + + + + 217 + + + YES + + + + + + 83 + + + YES + + + + + + 81 + + + YES + + + + + + + + + + + + + + + + 75 + + + + + 80 + + + + + 78 + + + + + 72 + + + + + 82 + + + + + 124 + + + YES + + + + + + 77 + + + + + 73 + + + + + 79 + + + + + 112 + + + + + 74 + + + + + 125 + + + YES + + + + + + 126 + + + + + 205 + + + YES + + + + + + + + + + + + + + + + + + + + 202 + + + + + 198 + + + + + 207 + + + + + 214 + + + + + 199 + + + + + 203 + + + + + 197 + + + + + 206 + + + + + 215 + + + + + 218 + + + YES + + + + + + 216 + + + YES + + + + + + 200 + + + YES + + + + + + + + + + + 219 + + + + + 201 + + + + + 204 + + + + + 220 + + + YES + + + + + + + + + + 213 + + + + + 210 + + + + + 221 + + + + + 208 + + + + + 209 + + + + + 57 + + + YES + + + + + + + + + + + + + + + + 58 + + + + + 134 + + + + + 150 + + + + + 136 + + + + + 144 + + + + + 129 + + + + + 143 + + + + + 236 + + + + + 131 + + + YES + + + + + + 149 + + + + + 145 + + + + + 130 + + + + + 24 + + + YES + + + + + + + + + 92 + + + + + 5 + + + + + 239 + + + + + 23 + + + + + 295 + + + YES + + + + + + 296 + + + YES + + + + + + + 297 + + + + + 298 + + + + + 211 + + + YES + + + + + + 212 + + + YES + + + + + + + 195 + + + + + 196 + + + + + 346 + + + + + 348 + + + YES + + + + + + 349 + + + YES + + + + + + + + + + + + 350 + + + + + 351 + + + + + 354 + + + + + 371 + + + YES + + + + Main Window + + + 372 + + + YES + + + + + + + + + + + + Content View + + + 375 + + + YES + + + + + + 376 + + + YES + + + + + + + 377 + + + YES + + + + + + 388 + + + YES + + + + + + + + + + + + + + + + + + + + + 389 + + + + + 390 + + + + + 391 + + + + + 392 + + + + + 393 + + + + + 394 + + + + + 395 + + + + + 396 + + + + + 397 + + + YES + + + + + + 398 + + + YES + + + + + + 399 + + + YES + + + + + + 400 + + + + + 401 + + + + + 402 + + + + + 403 + + + + + 404 + + + + + 405 + + + YES + + + + + + + + + + 406 + + + + + 407 + + + + + 408 + + + + + 409 + + + + + 410 + + + + + 411 + + + YES + + + + + + + + 412 + + + + + 413 + + + + + 414 + + + + + 415 + + + YES + + + + + + + + + 416 + + + + + 417 + + + + + 418 + + + + + 419 + + + + + 420 + + + + + 450 + + + YES + + + + + + 451 + + + YES + + + + + + + + 452 + + + + + 453 + + + + + 454 + + + + + 457 + + + + + 459 + + + + + 460 + + + + + 462 + + + + + 465 + + + + + 466 + + + + + 485 + + + + + 490 + + + YES + + + + + + 491 + + + YES + + + + + + 492 + + + + + 494 + + + + + 496 + + + YES + + + + + + 497 + + + YES + + + + + + + + + + + + + + + 498 + + + + + 499 + + + + + 500 + + + + + 501 + + + + + 502 + + + + + 503 + + + YES + + + + + + 504 + + + + + 505 + + + + + 506 + + + + + 507 + + + + + 508 + + + YES + + + + + + + + + + + + + + 509 + + + + + 510 + + + + + 511 + + + + + 512 + + + + + 513 + + + + + 514 + + + + + 515 + + + + + 516 + + + + + 517 + + + + + 533 + + + YES + + + + Color + + + 534 + + + YES + + + + + + 535 + + + YES + + + + + + Menu - Color + + + 536 + + + + + 537 + + + Menu Item - Red + + + 538 + + + + + 541 + + + YES + + + + Visible + + + 542 + + + + + 545 + + + YES + + + + + + 546 + + + + + 539 + + + YES + + + + Rotation + + + 540 + + + + + 543 + + + YES + + + + + + 544 + + + + + 552 + + + YES + + + + Text + + + 553 + + + + + 554 + + + SFML view + + + 564 + + + YES + + + + + + 565 + + + + + 568 + + + YES + + + + + + 569 + + + + + + + YES + + YES + -1.IBPluginDependency + -2.IBPluginDependency + -3.IBPluginDependency + 112.IBPluginDependency + 124.IBPluginDependency + 125.IBPluginDependency + 126.IBPluginDependency + 129.IBPluginDependency + 130.IBPluginDependency + 131.IBPluginDependency + 134.IBPluginDependency + 136.IBPluginDependency + 143.IBPluginDependency + 144.IBPluginDependency + 145.IBPluginDependency + 149.IBPluginDependency + 150.IBPluginDependency + 19.IBPluginDependency + 195.IBPluginDependency + 196.IBPluginDependency + 197.IBPluginDependency + 198.IBPluginDependency + 199.IBPluginDependency + 200.IBPluginDependency + 201.IBPluginDependency + 202.IBPluginDependency + 203.IBPluginDependency + 204.IBPluginDependency + 205.IBPluginDependency + 206.IBPluginDependency + 207.IBPluginDependency + 208.IBPluginDependency + 209.IBPluginDependency + 210.IBPluginDependency + 211.IBPluginDependency + 212.IBPluginDependency + 213.IBPluginDependency + 214.IBPluginDependency + 215.IBPluginDependency + 216.IBPluginDependency + 217.IBPluginDependency + 218.IBPluginDependency + 219.IBPluginDependency + 220.IBPluginDependency + 221.IBPluginDependency + 23.IBPluginDependency + 236.IBPluginDependency + 239.IBPluginDependency + 24.IBPluginDependency + 29.IBPluginDependency + 295.IBPluginDependency + 296.IBPluginDependency + 297.IBPluginDependency + 298.IBPluginDependency + 346.IBPluginDependency + 348.IBPluginDependency + 349.IBPluginDependency + 350.IBPluginDependency + 351.IBPluginDependency + 354.IBPluginDependency + 371.IBNSWindowAutoPositionCentersHorizontal + 371.IBNSWindowAutoPositionCentersVertical + 371.IBPluginDependency + 371.IBWindowTemplateEditedContentRect + 371.NSWindowTemplate.visibleAtLaunch + 372.IBPluginDependency + 375.IBPluginDependency + 376.IBPluginDependency + 377.IBPluginDependency + 388.IBPluginDependency + 389.IBPluginDependency + 390.IBPluginDependency + 391.IBPluginDependency + 392.IBPluginDependency + 393.IBPluginDependency + 394.IBPluginDependency + 395.IBPluginDependency + 396.IBPluginDependency + 397.IBPluginDependency + 398.IBPluginDependency + 399.IBPluginDependency + 400.IBPluginDependency + 401.IBPluginDependency + 402.IBPluginDependency + 403.IBPluginDependency + 404.IBPluginDependency + 405.IBPluginDependency + 406.IBPluginDependency + 407.IBPluginDependency + 408.IBPluginDependency + 409.IBPluginDependency + 410.IBPluginDependency + 411.IBPluginDependency + 412.IBPluginDependency + 413.IBPluginDependency + 414.IBPluginDependency + 415.IBPluginDependency + 416.IBPluginDependency + 417.IBPluginDependency + 418.IBPluginDependency + 419.IBPluginDependency + 420.IBPluginDependency + 450.IBPluginDependency + 451.IBPluginDependency + 452.IBPluginDependency + 453.IBPluginDependency + 454.IBPluginDependency + 457.IBPluginDependency + 459.IBPluginDependency + 460.IBPluginDependency + 462.IBPluginDependency + 465.IBPluginDependency + 466.IBPluginDependency + 485.IBPluginDependency + 490.IBPluginDependency + 491.IBPluginDependency + 492.IBPluginDependency + 494.IBPluginDependency + 496.IBPluginDependency + 497.IBPluginDependency + 498.IBPluginDependency + 499.IBPluginDependency + 5.IBPluginDependency + 500.IBPluginDependency + 501.IBPluginDependency + 502.IBPluginDependency + 503.IBPluginDependency + 504.IBPluginDependency + 505.IBPluginDependency + 506.IBPluginDependency + 507.IBPluginDependency + 508.IBPluginDependency + 509.IBPluginDependency + 510.IBPluginDependency + 511.IBPluginDependency + 512.IBPluginDependency + 513.IBPluginDependency + 514.IBPluginDependency + 515.IBPluginDependency + 516.IBPluginDependency + 517.IBPluginDependency + 533.IBPluginDependency + 534.IBPluginDependency + 535.IBPluginDependency + 536.IBPluginDependency + 537.IBPluginDependency + 537.object.labelIdentifier + 538.IBPluginDependency + 539.IBPluginDependency + 540.IBPluginDependency + 541.IBPluginDependency + 542.IBPluginDependency + 543.IBPluginDependency + 544.IBPluginDependency + 545.IBPluginDependency + 546.IBPluginDependency + 552.IBPluginDependency + 553.IBPluginDependency + 554.IBPluginDependency + 56.IBPluginDependency + 564.IBPluginDependency + 565.IBPluginDependency + 568.IBPluginDependency + 569.IBPluginDependency + 57.IBPluginDependency + 58.IBPluginDependency + 72.IBPluginDependency + 73.IBPluginDependency + 74.IBPluginDependency + 75.IBPluginDependency + 77.IBPluginDependency + 78.IBPluginDependency + 79.IBPluginDependency + 80.IBPluginDependency + 81.IBPluginDependency + 82.IBPluginDependency + 83.IBPluginDependency + 92.IBPluginDependency + + + YES + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + com.apple.InterfaceBuilder.CocoaPlugin + {{380, 496}, {480, 360}} + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + IBBuiltInLabel-Red + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + YES + + + + + + YES + + + + + 570 + + + + YES + + CocoaAppDelegate + NSObject + + YES + + YES + colorChanged: + rotationChanged: + textChanged: + updateText: + visibleChanged: + + + YES + NSPopUpButton + NSSlider + NSTextField + NSButton + NSButton + + + + YES + + YES + colorChanged: + rotationChanged: + textChanged: + updateText: + visibleChanged: + + + YES + + colorChanged: + NSPopUpButton + + + rotationChanged: + NSSlider + + + textChanged: + NSTextField + + + updateText: + NSButton + + + visibleChanged: + NSButton + + + + + YES + + YES + sfmlView + textField + window + + + YES + NSView + NSTextField + NSWindow + + + + YES + + YES + sfmlView + textField + window + + + YES + + sfmlView + NSView + + + textField + NSTextField + + + window + NSWindow + + + + + IBProjectSource + ./Classes/CocoaAppDelegate.h + + + + NSDocument + + YES + + YES + printDocument: + revertDocumentToSaved: + runPageLayout: + saveDocument: + saveDocumentAs: + saveDocumentTo: + + + YES + id + id + id + id + id + id + + + + YES + + YES + printDocument: + revertDocumentToSaved: + runPageLayout: + saveDocument: + saveDocumentAs: + saveDocumentTo: + + + YES + + printDocument: + id + + + revertDocumentToSaved: + id + + + runPageLayout: + id + + + saveDocument: + id + + + saveDocumentAs: + id + + + saveDocumentTo: + id + + + + + IBProjectSource + ./Classes/NSDocument.h + + + + + 0 + IBCocoaFramework + + com.apple.InterfaceBuilder.CocoaPlugin.macosx + + + + com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3 + + + YES + 3 + + YES + + YES + NSMenuCheckmark + NSMenuMixedState + NSSwitch + blue + green + red + + + YES + {9, 8} + {7, 2} + {15, 15} + {16, 16} + {16, 16} + {16, 16} + + + + diff --git a/xcode/example/Cocoa/green.png b/xcode/example/Cocoa/green.png new file mode 100644 index 0000000000000000000000000000000000000000..fac1b69b5641c6e30ec9402954c755ecad457303 GIT binary patch literal 112 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9GG!XV7ZFl&wkP*BO! z#WBP}FgfK1e~So%8rPSmt$k7l4j4$WEly-O#lt+Gk0CsdNp97e7mh&H44$rjF6*2U FngGW!8ax01 literal 0 HcmV?d00001 diff --git a/xcode/example/Cocoa/logo.png b/xcode/example/Cocoa/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..242f1cd4d9bd3666352233e969e8eb60ec5b6f2a GIT binary patch literal 104716 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 literal 0 HcmV?d00001 diff --git a/xcode/example/Cocoa/main.m b/xcode/example/Cocoa/main.m new file mode 100644 index 000000000..d1177919e --- /dev/null +++ b/xcode/example/Cocoa/main.m @@ -0,0 +1,31 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2011 Marco Antognini (antognini.marco@gmail.com), +// Laurent Gomila (laurent.gom@gmail.com), +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#import + +int main(int argc, char *argv[]) +{ + return NSApplicationMain(argc, (const char **)argv); +} diff --git a/xcode/example/Cocoa/red.png b/xcode/example/Cocoa/red.png new file mode 100644 index 0000000000000000000000000000000000000000..731f36b8530f8db9f3cc27842d814003ff13174f GIT binary patch literal 113 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9GG!XV7ZFl&wkP*B;^ z#WBP}F!|5<0}L)tnAJXQbt>tTI&i>1ifwTs!zo_o`Fso!xlD3LxDH4Gl{0v{`njxg HN@xNA9B~^$ literal 0 HcmV?d00001 diff --git a/xcode/example/readme.txt b/xcode/example/readme.txt new file mode 100644 index 000000000..ba0941c04 --- /dev/null +++ b/xcode/example/readme.txt @@ -0,0 +1,33 @@ +SFML IN COCOA APPLICATION +========================= + +This is a small example of the integration of SFML in a Cocoa application. + +System Requirements +------------------- + +In order to run this example project you need : + * SFML 2 compiled as shared libs (dylib) + and installed into /usr/local; + * Xcode 4 (thus you will need Mac OS X 10.6 or greater). + +Features +-------- + + * This example shows how basic UI elements can interact with SFML + render areas such as sf::RenderWindow (you can use sf::Window and + OpenGL code too, of course). + * It also provides tools for converting NSString to and from + std::[w]string in an Objective-C Category of NSString. + +Special Considerations +---------------------- + +While mixing SFML into a Cocoa application you have to deal with mixing +C++ and Objective-C. In order to proceed you should use .mm extension for +Objective-C++ files. + +Be aware of the limitations of Objective-C++. Please refer to the official +documentation provided by Apple for more information. + +You can also work around these limitations by using CSFML. diff --git a/xcode/SFML Application Base.xctemplate/ResourcePath.hpp b/xcode/templates/SFML Application Base.xctemplate/ResourcePath.hpp similarity index 100% rename from xcode/SFML Application Base.xctemplate/ResourcePath.hpp rename to xcode/templates/SFML Application Base.xctemplate/ResourcePath.hpp diff --git a/xcode/SFML Application Base.xctemplate/ResourcePath.mm b/xcode/templates/SFML Application Base.xctemplate/ResourcePath.mm similarity index 100% rename from xcode/SFML Application Base.xctemplate/ResourcePath.mm rename to xcode/templates/SFML Application Base.xctemplate/ResourcePath.mm diff --git a/xcode/SFML Application Base.xctemplate/TemplateInfo.plist b/xcode/templates/SFML Application Base.xctemplate/TemplateInfo.plist similarity index 100% rename from xcode/SFML Application Base.xctemplate/TemplateInfo.plist rename to xcode/templates/SFML Application Base.xctemplate/TemplateInfo.plist diff --git a/xcode/SFML Application Base.xctemplate/cute_image.jpg b/xcode/templates/SFML Application Base.xctemplate/cute_image.jpg similarity index 100% rename from xcode/SFML Application Base.xctemplate/cute_image.jpg rename to xcode/templates/SFML Application Base.xctemplate/cute_image.jpg diff --git a/xcode/SFML Application Base.xctemplate/nice_music.ogg b/xcode/templates/SFML Application Base.xctemplate/nice_music.ogg similarity index 100% rename from xcode/SFML Application Base.xctemplate/nice_music.ogg rename to xcode/templates/SFML Application Base.xctemplate/nice_music.ogg diff --git a/xcode/SFML Application Base.xctemplate/sansation.ttf b/xcode/templates/SFML Application Base.xctemplate/sansation.ttf similarity index 100% rename from xcode/SFML Application Base.xctemplate/sansation.ttf rename to xcode/templates/SFML Application Base.xctemplate/sansation.ttf diff --git a/xcode/SFML Application.xctemplate/TemplateIcon.icns b/xcode/templates/SFML Application.xctemplate/TemplateIcon.icns similarity index 100% rename from xcode/SFML Application.xctemplate/TemplateIcon.icns rename to xcode/templates/SFML Application.xctemplate/TemplateIcon.icns diff --git a/xcode/SFML Application.xctemplate/TemplateInfo.plist b/xcode/templates/SFML Application.xctemplate/TemplateInfo.plist similarity index 100% rename from xcode/SFML Application.xctemplate/TemplateInfo.plist rename to xcode/templates/SFML Application.xctemplate/TemplateInfo.plist diff --git a/xcode/SFML Command Line Tool Base.xctemplate/TemplateInfo.plist b/xcode/templates/SFML Command Line Tool Base.xctemplate/TemplateInfo.plist similarity index 100% rename from xcode/SFML Command Line Tool Base.xctemplate/TemplateInfo.plist rename to xcode/templates/SFML Command Line Tool Base.xctemplate/TemplateInfo.plist diff --git a/xcode/SFML Command Line Tool Base.xctemplate/cute_image.jpg b/xcode/templates/SFML Command Line Tool Base.xctemplate/cute_image.jpg similarity index 100% rename from xcode/SFML Command Line Tool Base.xctemplate/cute_image.jpg rename to xcode/templates/SFML Command Line Tool Base.xctemplate/cute_image.jpg diff --git a/xcode/SFML Command Line Tool Base.xctemplate/nice_music.ogg b/xcode/templates/SFML Command Line Tool Base.xctemplate/nice_music.ogg similarity index 100% rename from xcode/SFML Command Line Tool Base.xctemplate/nice_music.ogg rename to xcode/templates/SFML Command Line Tool Base.xctemplate/nice_music.ogg diff --git a/xcode/SFML Command Line Tool Base.xctemplate/sansation.ttf b/xcode/templates/SFML Command Line Tool Base.xctemplate/sansation.ttf similarity index 100% rename from xcode/SFML Command Line Tool Base.xctemplate/sansation.ttf rename to xcode/templates/SFML Command Line Tool Base.xctemplate/sansation.ttf diff --git a/xcode/SFML Command Line Tool.xctemplate/TemplateIcon.icns b/xcode/templates/SFML Command Line Tool.xctemplate/TemplateIcon.icns similarity index 100% rename from xcode/SFML Command Line Tool.xctemplate/TemplateIcon.icns rename to xcode/templates/SFML Command Line Tool.xctemplate/TemplateIcon.icns diff --git a/xcode/SFML Command Line Tool.xctemplate/TemplateInfo.plist b/xcode/templates/SFML Command Line Tool.xctemplate/TemplateInfo.plist similarity index 100% rename from xcode/SFML Command Line Tool.xctemplate/TemplateInfo.plist rename to xcode/templates/SFML Command Line Tool.xctemplate/TemplateInfo.plist diff --git a/xcode/readme.txt b/xcode/templates/readme.txt similarity index 100% rename from xcode/readme.txt rename to xcode/templates/readme.txt