Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJens Verwiebe <info@jensverwiebe.de>2013-11-05 17:35:49 +0400
committerJens Verwiebe <info@jensverwiebe.de>2013-11-05 17:35:49 +0400
commit311c5f33ff04c43cffd7da264411bbd3b5e56eb0 (patch)
treeec852d6103eb98b7654bce207c24dc91786f284d /intern/ghost
parent7f5cb54b568cbdef6c96bb552a8dfc44f650e598 (diff)
OSX: remove Ghost carbon files finally
Diffstat (limited to 'intern/ghost')
-rw-r--r--intern/ghost/intern/GHOST_DisplayManagerCarbon.cpp175
-rw-r--r--intern/ghost/intern/GHOST_DisplayManagerCarbon.h116
-rw-r--r--intern/ghost/intern/GHOST_SystemCarbon.cpp1241
-rw-r--r--intern/ghost/intern/GHOST_SystemCarbon.h298
-rw-r--r--intern/ghost/intern/GHOST_SystemPathsCarbon.cpp88
-rw-r--r--intern/ghost/intern/GHOST_SystemPathsCarbon.h87
-rw-r--r--intern/ghost/intern/GHOST_WindowCarbon.cpp751
-rw-r--r--intern/ghost/intern/GHOST_WindowCarbon.h321
8 files changed, 0 insertions, 3077 deletions
diff --git a/intern/ghost/intern/GHOST_DisplayManagerCarbon.cpp b/intern/ghost/intern/GHOST_DisplayManagerCarbon.cpp
deleted file mode 100644
index 25e9123dae6..00000000000
--- a/intern/ghost/intern/GHOST_DisplayManagerCarbon.cpp
+++ /dev/null
@@ -1,175 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
- * All rights reserved.
- *
- * The Original Code is: all of this file.
- *
- * Contributor(s): none yet.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file ghost/intern/GHOST_DisplayManagerCarbon.cpp
- * \ingroup GHOST
- */
-
-
-/**
- * Copyright (C) 2001 NaN Technologies B.V.
- * \author Maarten Gribnau
- * \date September 21, 2001
- */
-
-#include "GHOST_DisplayManagerCarbon.h"
-#include "GHOST_Debug.h"
-
-// We do not support multiple monitors at the moment
-
-
-GHOST_DisplayManagerCarbon::GHOST_DisplayManagerCarbon(void)
-{
- if (::CGGetActiveDisplayList(0, NULL, &m_numDisplays) != CGDisplayNoErr)
- {
- m_numDisplays = 0;
- m_displayIDs = NULL;
- }
- if (m_numDisplays > 0)
- {
- m_displayIDs = new CGDirectDisplayID[m_numDisplays];
- GHOST_ASSERT((m_displayIDs != NULL), "GHOST_DisplayManagerCarbon::GHOST_DisplayManagerCarbon(): memory allocation failed");
- ::CGGetActiveDisplayList(m_numDisplays, m_displayIDs, &m_numDisplays);
- }
-}
-
-
-GHOST_TSuccess GHOST_DisplayManagerCarbon::getNumDisplays(GHOST_TUns8& numDisplays) const
-{
- numDisplays = (GHOST_TUns8) m_numDisplays;
- return GHOST_kSuccess;
-}
-
-
-GHOST_TSuccess GHOST_DisplayManagerCarbon::getNumDisplaySettings(GHOST_TUns8 display, GHOST_TInt32& numSettings) const
-{
- GHOST_ASSERT((display == kMainDisplay), "GHOST_DisplayManagerCarbon::getNumDisplaySettings(): only main display is supported");
-
- CFArrayRef displayModes;
- displayModes = ::CGDisplayAvailableModes(m_displayIDs[display]);
- CFIndex numModes = ::CFArrayGetCount(displayModes);
- numSettings = (GHOST_TInt32)numModes;
-
- return GHOST_kSuccess;
-}
-
-
-GHOST_TSuccess GHOST_DisplayManagerCarbon::getDisplaySetting(GHOST_TUns8 display, GHOST_TInt32 index, GHOST_DisplaySetting& setting) const
-{
- GHOST_ASSERT((display == kMainDisplay), "GHOST_DisplayManagerCarbon::getDisplaySetting(): only main display is supported");
-
- CFArrayRef displayModes;
- CGDirectDisplayID d = m_displayIDs[display];
- displayModes = ::CGDisplayAvailableModes(d);
- //CFIndex numModes = ::CFArrayGetCount(displayModes);/*unused*/
- //GHOST_TInt32 numSettings = (GHOST_TInt32)numModes; /*unused*/
- CFDictionaryRef displayModeValues = (CFDictionaryRef) ::CFArrayGetValueAtIndex(displayModes, index);
-
- setting.xPixels = getValue(displayModeValues, kCGDisplayWidth);
- setting.yPixels = getValue(displayModeValues, kCGDisplayHeight);
- setting.bpp = getValue(displayModeValues, kCGDisplayBitsPerPixel);
- setting.frequency = getValue(displayModeValues, kCGDisplayRefreshRate);
-
-#ifdef GHOST_DEBUG
- printf("display mode: width=%d, height=%d, bpp=%d, frequency=%d\n", setting.xPixels, setting.yPixels, setting.bpp, setting.frequency);
-#endif // GHOST_DEBUG
-
- return GHOST_kSuccess;
-}
-
-
-GHOST_TSuccess GHOST_DisplayManagerCarbon::getCurrentDisplaySetting(GHOST_TUns8 display, GHOST_DisplaySetting& setting) const
-{
- GHOST_ASSERT((display == kMainDisplay), "GHOST_DisplayManagerCarbon::getCurrentDisplaySetting(): only main display is supported");
-
- CFDictionaryRef displayModeValues = ::CGDisplayCurrentMode(m_displayIDs[display]);
-
- setting.xPixels = getValue(displayModeValues, kCGDisplayWidth);
- setting.yPixels = getValue(displayModeValues, kCGDisplayHeight);
- setting.bpp = getValue(displayModeValues, kCGDisplayBitsPerPixel);
- setting.frequency = getValue(displayModeValues, kCGDisplayRefreshRate);
-
-#ifdef GHOST_DEBUG
- printf("current display mode: width=%d, height=%d, bpp=%d, frequency=%d\n", setting.xPixels, setting.yPixels, setting.bpp, setting.frequency);
-#endif // GHOST_DEBUG
-
- return GHOST_kSuccess;
-}
-
-
-GHOST_TSuccess GHOST_DisplayManagerCarbon::setCurrentDisplaySetting(GHOST_TUns8 display, const GHOST_DisplaySetting& setting)
-{
- GHOST_ASSERT((display == kMainDisplay), "GHOST_DisplayManagerCarbon::setCurrentDisplaySetting(): only main display is supported");
-
-#ifdef GHOST_DEBUG
- printf("GHOST_DisplayManagerCarbon::setCurrentDisplaySetting(): requested settings:\n");
- printf(" setting.xPixels=%d\n", setting.xPixels);
- printf(" setting.yPixels=%d\n", setting.yPixels);
- printf(" setting.bpp=%d\n", setting.bpp);
- printf(" setting.frequency=%d\n", setting.frequency);
-#endif // GHOST_DEBUG
-
- CFDictionaryRef displayModeValues = ::CGDisplayBestModeForParametersAndRefreshRate(
- m_displayIDs[display],
- (size_t)setting.bpp,
- (size_t)setting.xPixels,
- (size_t)setting.yPixels,
- (CGRefreshRate)setting.frequency,
- NULL);
-
-#ifdef GHOST_DEBUG
- printf("GHOST_DisplayManagerCarbon::setCurrentDisplaySetting(): switching to:\n");
- printf(" setting.xPixels=%d\n", getValue(displayModeValues, kCGDisplayWidth));
- printf(" setting.yPixels=%d\n", getValue(displayModeValues, kCGDisplayHeight));
- printf(" setting.bpp=%d\n", getValue(displayModeValues, kCGDisplayBitsPerPixel));
- printf(" setting.frequency=%d\n", getValue(displayModeValues, kCGDisplayRefreshRate));
-#endif // GHOST_DEBUG
-
- CGDisplayErr err = ::CGDisplaySwitchToMode(m_displayIDs[display], displayModeValues);
-
- return err == CGDisplayNoErr ? GHOST_kSuccess : GHOST_kFailure;
-}
-
-
-long GHOST_DisplayManagerCarbon::getValue(CFDictionaryRef values, CFStringRef key) const
-{
- CFNumberRef numberValue = (CFNumberRef) CFDictionaryGetValue(values, key);
-
- if (!numberValue)
- {
- return -1;
- }
-
- long intValue;
-
- if (!CFNumberGetValue(numberValue, kCFNumberLongType, &intValue))
- {
- return -1;
- }
-
- return intValue;
-}
diff --git a/intern/ghost/intern/GHOST_DisplayManagerCarbon.h b/intern/ghost/intern/GHOST_DisplayManagerCarbon.h
deleted file mode 100644
index 1ac6540b7bd..00000000000
--- a/intern/ghost/intern/GHOST_DisplayManagerCarbon.h
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
- * All rights reserved.
- *
- * The Original Code is: all of this file.
- *
- * Contributor(s): none yet.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file ghost/intern/GHOST_DisplayManagerCarbon.h
- * \ingroup GHOST
- * Declaration of GHOST_DisplayManagerCarbon class.
- */
-
-#ifndef __GHOST_DISPLAYMANAGERCARBON_H__
-#define __GHOST_DISPLAYMANAGERCARBON_H__
-
-#ifndef __APPLE__
-#error Apple only!
-#endif // __APPLE__
-
-#include "GHOST_DisplayManager.h"
-
-#define __CARBONSOUND__
-#include <Carbon/Carbon.h>
-
-/**
- * Manages system displays (Mac OSX/Carbon implementation).
- * \see GHOST_DisplayManager
- * \author Maarten Gribnau
- * \date September 21, 2001
- */
-class GHOST_DisplayManagerCarbon : public GHOST_DisplayManager
-{
-public:
- /**
- * Constructor.
- */
- GHOST_DisplayManagerCarbon(void);
-
- /**
- * Returns the number of display devices on this system.
- * \param numDisplays The number of displays on this system.
- * \return Indication of success.
- */
- virtual GHOST_TSuccess getNumDisplays(GHOST_TUns8& numDisplays) const;
-
- /**
- * Returns the number of display settings for this display device.
- * \param display The index of the display to query with 0 <= display < getNumDisplays().
- * \param setting The number of settings of the display device with this index.
- * \return Indication of success.
- */
- virtual GHOST_TSuccess getNumDisplaySettings(GHOST_TUns8 display, GHOST_TInt32& numSettings) const;
-
- /**
- * Returns the current setting for this display device.
- * \param display The index of the display to query with 0 <= display < getNumDisplays().
- * \param index The setting index to be returned.
- * \param setting The setting of the display device with this index.
- * \return Indication of success.
- */
- virtual GHOST_TSuccess getDisplaySetting(GHOST_TUns8 display, GHOST_TInt32 index, GHOST_DisplaySetting& setting) const;
-
- /**
- * Returns the current setting for this display device.
- * \param display The index of the display to query with 0 <= display < getNumDisplays().
- * \param setting The current setting of the display device with this index.
- * \return Indication of success.
- */
- virtual GHOST_TSuccess getCurrentDisplaySetting(GHOST_TUns8 display, GHOST_DisplaySetting& setting) const;
-
- /**
- * Changes the current setting for this display device.
- * \param display The index of the display to query with 0 <= display < getNumDisplays().
- * \param setting The current setting of the display device with this index.
- * \return Indication of success.
- */
- virtual GHOST_TSuccess setCurrentDisplaySetting(GHOST_TUns8 display, const GHOST_DisplaySetting& setting);
-
-protected:
- /**
- * Returns a value from a dictionary.
- * \param values Dictionary to return value from.
- * \param key Key to return value for.
- * \return The value for this key.
- */
- long getValue(CFDictionaryRef values, CFStringRef key) const;
-
- /** Cached number of displays. */
- CGDisplayCount m_numDisplays;
- /** Cached display id's for each display. */
- CGDirectDisplayID *m_displayIDs;
-};
-
-
-#endif // __GHOST_DISPLAYMANAGERCARBON_H__
-
diff --git a/intern/ghost/intern/GHOST_SystemCarbon.cpp b/intern/ghost/intern/GHOST_SystemCarbon.cpp
deleted file mode 100644
index 6e72e26beb4..00000000000
--- a/intern/ghost/intern/GHOST_SystemCarbon.cpp
+++ /dev/null
@@ -1,1241 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
- * All rights reserved.
- *
- * The Original Code is: all of this file.
- *
- * Contributor(s): none yet.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file ghost/intern/GHOST_SystemCarbon.cpp
- * \ingroup GHOST
- */
-
-
-/**
- * Copyright (C) 2001 NaN Technologies B.V.
- * \author Maarten Gribnau
- * \date May 7, 2001
- */
-
-#include <Carbon/Carbon.h>
-#include <ApplicationServices/ApplicationServices.h>
-#include "GHOST_SystemCarbon.h"
-
-#include "GHOST_DisplayManagerCarbon.h"
-#include "GHOST_EventKey.h"
-#include "GHOST_EventButton.h"
-#include "GHOST_EventCursor.h"
-#include "GHOST_EventWheel.h"
-#ifdef WITH_INPUT_NDOF
-#include "GHOST_EventNDOF.h"
-#endif
-
-#include "GHOST_TimerManager.h"
-#include "GHOST_TimerTask.h"
-#include "GHOST_WindowManager.h"
-#include "GHOST_WindowCarbon.h"
-#include "GHOST_NDOFManager.h"
-#include "AssertMacros.h"
-
-/* blender class and types events */
-enum {
- kEventClassBlender = 'blnd'
-};
-
-enum {
- kEventBlenderNdofAxis = 1,
- kEventBlenderNdofButtons = 2
-};
-
-const EventTypeSpec kEvents[] =
-{
- { kEventClassAppleEvent, kEventAppleEvent },
-#if 0
- { kEventClassApplication, kEventAppActivated },
- { kEventClassApplication, kEventAppDeactivated },
- #endif
- { kEventClassKeyboard, kEventRawKeyDown },
- { kEventClassKeyboard, kEventRawKeyRepeat },
- { kEventClassKeyboard, kEventRawKeyUp },
- { kEventClassKeyboard, kEventRawKeyModifiersChanged },
-
- { kEventClassMouse, kEventMouseDown },
- { kEventClassMouse, kEventMouseUp },
- { kEventClassMouse, kEventMouseMoved },
- { kEventClassMouse, kEventMouseDragged },
- { kEventClassMouse, kEventMouseWheelMoved },
-
- { kEventClassWindow, kEventWindowClickZoomRgn }, /* for new zoom behaviour */
- { kEventClassWindow, kEventWindowZoom }, /* for new zoom behaviour */
- { kEventClassWindow, kEventWindowExpand }, /* for new zoom behaviour */
- { kEventClassWindow, kEventWindowExpandAll }, /* for new zoom behaviour */
-
- { kEventClassWindow, kEventWindowClose },
- { kEventClassWindow, kEventWindowActivated },
- { kEventClassWindow, kEventWindowDeactivated },
- { kEventClassWindow, kEventWindowUpdate },
- { kEventClassWindow, kEventWindowBoundsChanged },
-
- { kEventClassBlender, kEventBlenderNdofAxis },
- { kEventClassBlender, kEventBlenderNdofButtons }
-
-
-
-};
-
-
-
-static GHOST_TButtonMask convertButton(EventMouseButton button)
-{
- switch (button) {
- case kEventMouseButtonPrimary:
- return GHOST_kButtonMaskLeft;
- case kEventMouseButtonSecondary:
- return GHOST_kButtonMaskRight;
- case kEventMouseButtonTertiary:
- default:
- return GHOST_kButtonMaskMiddle;
- }
-}
-
-static GHOST_TKey convertKey(int rawCode)
-{
- /* This bit of magic converts the rawCode into a virtual
- * Mac key based on the current keyboard mapping, but
- * without regard to the modifiers (so we don't get 'a'
- * and 'A' for example.
- */
- static UInt32 dummy = 0;
- Handle transData = (Handle) GetScriptManagerVariable(smKCHRCache);
- unsigned char vk = KeyTranslate(transData, rawCode, &dummy);
- /* Map numpad based on rawcodes first, otherwise they
- * look like non-numpad events.
- * Added too: mapping the number keys, for french keyboards etc (ton)
- */
- // printf("GHOST: vk: %d %c raw: %d\n", vk, vk, rawCode);
-
- switch (rawCode) {
- case 18: return GHOST_kKey1;
- case 19: return GHOST_kKey2;
- case 20: return GHOST_kKey3;
- case 21: return GHOST_kKey4;
- case 23: return GHOST_kKey5;
- case 22: return GHOST_kKey6;
- case 26: return GHOST_kKey7;
- case 28: return GHOST_kKey8;
- case 25: return GHOST_kKey9;
- case 29: return GHOST_kKey0;
-
- case 82: return GHOST_kKeyNumpad0;
- case 83: return GHOST_kKeyNumpad1;
- case 84: return GHOST_kKeyNumpad2;
- case 85: return GHOST_kKeyNumpad3;
- case 86: return GHOST_kKeyNumpad4;
- case 87: return GHOST_kKeyNumpad5;
- case 88: return GHOST_kKeyNumpad6;
- case 89: return GHOST_kKeyNumpad7;
- case 91: return GHOST_kKeyNumpad8;
- case 92: return GHOST_kKeyNumpad9;
- case 65: return GHOST_kKeyNumpadPeriod;
- case 76: return GHOST_kKeyNumpadEnter;
- case 69: return GHOST_kKeyNumpadPlus;
- case 78: return GHOST_kKeyNumpadMinus;
- case 67: return GHOST_kKeyNumpadAsterisk;
- case 75: return GHOST_kKeyNumpadSlash;
- }
-
- if ((vk >= 'a') && (vk <= 'z')) {
- return (GHOST_TKey) (vk - 'a' + GHOST_kKeyA);
- }
- else if ((vk >= '0') && (vk <= '9')) {
- return (GHOST_TKey) (vk - '0' + GHOST_kKey0);
- }
- else if (vk == 16) {
- switch (rawCode) {
- case 122: return GHOST_kKeyF1;
- case 120: return GHOST_kKeyF2;
- case 99: return GHOST_kKeyF3;
- case 118: return GHOST_kKeyF4;
- case 96: return GHOST_kKeyF5;
- case 97: return GHOST_kKeyF6;
- case 98: return GHOST_kKeyF7;
- case 100: return GHOST_kKeyF8;
- case 101: return GHOST_kKeyF9;
- case 109: return GHOST_kKeyF10;
- case 103: return GHOST_kKeyF11;
- case 111: return GHOST_kKeyF12; // Never get, is used for ejecting the CD!
- }
- }
- else {
- switch (vk) {
- case kUpArrowCharCode: return GHOST_kKeyUpArrow;
- case kDownArrowCharCode: return GHOST_kKeyDownArrow;
- case kLeftArrowCharCode: return GHOST_kKeyLeftArrow;
- case kRightArrowCharCode: return GHOST_kKeyRightArrow;
-
- case kReturnCharCode: return GHOST_kKeyEnter;
- case kBackspaceCharCode: return GHOST_kKeyBackSpace;
- case kDeleteCharCode: return GHOST_kKeyDelete;
- case kEscapeCharCode: return GHOST_kKeyEsc;
- case kTabCharCode: return GHOST_kKeyTab;
- case kSpaceCharCode: return GHOST_kKeySpace;
-
- case kHomeCharCode: return GHOST_kKeyHome;
- case kEndCharCode: return GHOST_kKeyEnd;
- case kPageUpCharCode: return GHOST_kKeyUpPage;
- case kPageDownCharCode: return GHOST_kKeyDownPage;
-
- case '-': return GHOST_kKeyMinus;
- case '=': return GHOST_kKeyEqual;
- case ',': return GHOST_kKeyComma;
- case '.': return GHOST_kKeyPeriod;
- case '/': return GHOST_kKeySlash;
- case ';': return GHOST_kKeySemicolon;
- case '\'': return GHOST_kKeyQuote;
- case '\\': return GHOST_kKeyBackslash;
- case '[': return GHOST_kKeyLeftBracket;
- case ']': return GHOST_kKeyRightBracket;
- case '`': return GHOST_kKeyAccentGrave;
- }
- }
-
- // printf("GHOST: unknown key: %d %d\n", vk, rawCode);
-
- return GHOST_kKeyUnknown;
-}
-
-/* MacOSX returns a Roman charset with kEventParamKeyMacCharCodes
- * as defined here: http://developer.apple.com/documentation/mac/Text/Text-516.html
- * I am not sure how international this works...
- * For cross-platform convention, we'll use the Latin ascii set instead.
- * As defined at: http://www.ramsch.org/martin/uni/fmi-hp/iso8859-1.html
- *
- */
-static unsigned char convertRomanToLatin(unsigned char ascii)
-{
-
- if (ascii < 128) return ascii;
-
- switch (ascii) {
- case 128: return 142;
- case 129: return 143;
- case 130: return 128;
- case 131: return 201;
- case 132: return 209;
- case 133: return 214;
- case 134: return 220;
- case 135: return 225;
- case 136: return 224;
- case 137: return 226;
- case 138: return 228;
- case 139: return 227;
- case 140: return 229;
- case 141: return 231;
- case 142: return 233;
- case 143: return 232;
- case 144: return 234;
- case 145: return 235;
- case 146: return 237;
- case 147: return 236;
- case 148: return 238;
- case 149: return 239;
- case 150: return 241;
- case 151: return 243;
- case 152: return 242;
- case 153: return 244;
- case 154: return 246;
- case 155: return 245;
- case 156: return 250;
- case 157: return 249;
- case 158: return 251;
- case 159: return 252;
- case 160: return 0;
- case 161: return 176;
- case 162: return 162;
- case 163: return 163;
- case 164: return 167;
- case 165: return 183;
- case 166: return 182;
- case 167: return 223;
- case 168: return 174;
- case 169: return 169;
- case 170: return 174;
- case 171: return 180;
- case 172: return 168;
- case 173: return 0;
- case 174: return 198;
- case 175: return 216;
- case 176: return 0;
- case 177: return 177;
- case 178: return 0;
- case 179: return 0;
- case 180: return 165;
- case 181: return 181;
- case 182: return 0;
- case 183: return 0;
- case 184: return 215;
- case 185: return 0;
- case 186: return 0;
- case 187: return 170;
- case 188: return 186;
- case 189: return 0;
- case 190: return 230;
- case 191: return 248;
- case 192: return 191;
- case 193: return 161;
- case 194: return 172;
- case 195: return 0;
- case 196: return 0;
- case 197: return 0;
- case 198: return 0;
- case 199: return 171;
- case 200: return 187;
- case 201: return 201;
- case 202: return 0;
- case 203: return 192;
- case 204: return 195;
- case 205: return 213;
- case 206: return 0;
- case 207: return 0;
- case 208: return 0;
- case 209: return 0;
- case 210: return 0;
-
- case 214: return 247;
-
- case 229: return 194;
- case 230: return 202;
- case 231: return 193;
- case 232: return 203;
- case 233: return 200;
- case 234: return 205;
- case 235: return 206;
- case 236: return 207;
- case 237: return 204;
- case 238: return 211;
- case 239: return 212;
- case 240: return 0;
- case 241: return 210;
- case 242: return 218;
- case 243: return 219;
- case 244: return 217;
- case 245: return 0;
- case 246: return 0;
- case 247: return 0;
- case 248: return 0;
- case 249: return 0;
- case 250: return 0;
-
-
- default: return 0;
- }
-
-}
-
-
-/***/
-
-GHOST_SystemCarbon::GHOST_SystemCarbon() :
- m_modifierMask(0)
-{
- m_displayManager = new GHOST_DisplayManagerCarbon();
- GHOST_ASSERT(m_displayManager, "GHOST_SystemCarbon::GHOST_SystemCarbon(): m_displayManager==0\n");
- m_displayManager->initialize();
-
- UnsignedWide micros;
- ::Microseconds(&micros);
- m_start_time = UnsignedWideToUInt64(micros) / 1000;
- m_ignoreWindowSizedMessages = false;
-}
-
-GHOST_SystemCarbon::~GHOST_SystemCarbon()
-{
-}
-
-
-GHOST_TUns64 GHOST_SystemCarbon::getMilliSeconds() const
-{
- UnsignedWide micros;
- ::Microseconds(&micros);
- UInt64 millis;
- millis = UnsignedWideToUInt64(micros);
- return (millis / 1000) - m_start_time;
-}
-
-GHOST_TUns8 GHOST_SystemCarbon::getNumDisplays() const
-{
- // We do not support multiple monitors at the moment
- return 1;
-}
-
-
-void GHOST_SystemCarbon::getMainDisplayDimensions(GHOST_TUns32& width, GHOST_TUns32& height) const
-{
- BitMap screenBits;
- Rect bnds = GetQDGlobalsScreenBits(&screenBits)->bounds;
- width = bnds.right - bnds.left;
- height = bnds.bottom - bnds.top;
-}
-
-void GHOST_SystemCarbon::getAllDisplayDimensions(GHOST_TUns32& width, GHOST_TUns32& height) const
-{
- /* TODO */
- getMainDisplayDimensions(width, height);
-}
-
-GHOST_IWindow *GHOST_SystemCarbon::createWindow(
- const STR_String& title,
- GHOST_TInt32 left,
- GHOST_TInt32 top,
- GHOST_TUns32 width,
- GHOST_TUns32 height,
- GHOST_TWindowState state,
- GHOST_TDrawingContextType type,
- bool stereoVisual,
- const bool exclusive,
- const GHOST_TUns16 numOfAASamples,
- const GHOST_TEmbedderWindowID parentWindow)
-{
- GHOST_IWindow *window = 0;
-
- window = new GHOST_WindowCarbon(title, left, top, width, height, state, type);
-
- if (window) {
- if (window->getValid()) {
- // Store the pointer to the window
- GHOST_ASSERT(m_windowManager, "m_windowManager not initialized");
- m_windowManager->addWindow(window);
- m_windowManager->setActiveWindow(window);
- pushEvent(new GHOST_Event(getMilliSeconds(), GHOST_kEventWindowSize, window));
- }
- else {
- GHOST_PRINT("GHOST_SystemCarbon::createWindow(): window invalid\n");
- delete window;
- window = 0;
- }
- }
- else {
- GHOST_PRINT("GHOST_SystemCarbon::createWindow(): could not create window\n");
- }
- return window;
-}
-
-GHOST_TSuccess GHOST_SystemCarbon::beginFullScreen(const GHOST_DisplaySetting& setting, GHOST_IWindow **window, const bool stereoVisual)
-{
- GHOST_TSuccess success = GHOST_kFailure;
-
- // need yo make this Carbon all on 10.5 for fullscreen to work correctly
- CGCaptureAllDisplays();
-
- success = GHOST_System::beginFullScreen(setting, window, stereoVisual);
-
- if (success != GHOST_kSuccess) {
- // fullscreen failed for other reasons, release
- CGReleaseAllDisplays();
- }
-
- return success;
-}
-
-GHOST_TSuccess GHOST_SystemCarbon::endFullScreen(void)
-{
- CGReleaseAllDisplays();
- return GHOST_System::endFullScreen();
-}
-
-/* this is an old style low level event queue.
- * As we want to handle our own timers, this is ok.
- * the full screen hack should be removed */
-bool GHOST_SystemCarbon::processEvents(bool waitForEvent)
-{
- bool anyProcessed = false;
- EventRef event;
-
-// SetMouseCoalescingEnabled(false, NULL);
-
- do {
- GHOST_TimerManager *timerMgr = getTimerManager();
-
- if (waitForEvent) {
- GHOST_TUns64 next = timerMgr->nextFireTime();
- double timeOut;
-
- if (next == GHOST_kFireTimeNever) {
- timeOut = kEventDurationForever;
- }
- else {
- timeOut = (double)(next - getMilliSeconds()) / 1000.0;
- if (timeOut < 0.0)
- timeOut = 0.0;
- }
-
- ::ReceiveNextEvent(0, NULL, timeOut, false, &event);
- }
-
- if (timerMgr->fireTimers(getMilliSeconds())) {
- anyProcessed = true;
- }
-
- if (getFullScreen()) {
- // Check if the full-screen window is dirty
- GHOST_IWindow *window = m_windowManager->getFullScreenWindow();
- if (((GHOST_WindowCarbon *)window)->getFullScreenDirty()) {
- pushEvent(new GHOST_Event(getMilliSeconds(), GHOST_kEventWindowUpdate, window) );
- anyProcessed = true;
- }
- }
-
- /* end loop when no more events available */
- while (::ReceiveNextEvent(0, NULL, 0, true, &event) == noErr) {
- OSStatus status = ::SendEventToEventTarget(event, ::GetEventDispatcherTarget());
- if (status == noErr) {
- anyProcessed = true;
- }
- else {
- UInt32 i = ::GetEventClass(event);
-
- /* Ignore 'cgs ' class, no documentation on what they
- * are, but we get a lot of them
- */
- if (i != 'cgs ') {
- if (i != 'tblt') { // tablet event. we use the one packaged in the mouse event
- ; //printf("Missed - Class: '%.4s', Kind: %d\n", &i, ::GetEventKind(event));
- }
- }
- }
- ::ReleaseEvent(event);
- }
- } while (waitForEvent && !anyProcessed);
-
- return anyProcessed;
-}
-
-
-GHOST_TSuccess GHOST_SystemCarbon::getCursorPosition(GHOST_TInt32& x, GHOST_TInt32& y) const
-{
- Point mouseLoc;
- // Get the position of the mouse in the active port
- ::GetGlobalMouse(&mouseLoc);
- // Convert the coordinates to screen coordinates
- x = (GHOST_TInt32)mouseLoc.h;
- y = (GHOST_TInt32)mouseLoc.v;
- return GHOST_kSuccess;
-}
-
-
-GHOST_TSuccess GHOST_SystemCarbon::setCursorPosition(GHOST_TInt32 x, GHOST_TInt32 y)
-{
- float xf = (float)x, yf = (float)y;
-
- CGAssociateMouseAndMouseCursorPosition(false);
- CGSetLocalEventsSuppressionInterval(0);
- CGWarpMouseCursorPosition(CGPointMake(xf, yf));
- CGAssociateMouseAndMouseCursorPosition(true);
-
-//this doesn't work properly, see game engine mouse-look scripts
-// CGWarpMouseCursorPosition(CGPointMake(xf, yf));
- // this call below sends event, but empties other events (like shift)
- // CGPostMouseEvent(CGPointMake(xf, yf), TRUE, 1, FALSE, 0);
-
- return GHOST_kSuccess;
-}
-
-
-GHOST_TSuccess GHOST_SystemCarbon::getModifierKeys(GHOST_ModifierKeys& keys) const
-{
- UInt32 modifiers = ::GetCurrentKeyModifiers();
-
- keys.set(GHOST_kModifierKeyOS, (modifiers & cmdKey) ? true : false);
- keys.set(GHOST_kModifierKeyLeftAlt, (modifiers & optionKey) ? true : false);
- keys.set(GHOST_kModifierKeyLeftShift, (modifiers & shiftKey) ? true : false);
- keys.set(GHOST_kModifierKeyLeftControl, (modifiers & controlKey) ? true : false);
-
- return GHOST_kSuccess;
-}
-
-/* XXX, incorrect for multibutton mice */
-GHOST_TSuccess GHOST_SystemCarbon::getButtons(GHOST_Buttons& buttons) const
-{
- Boolean theOnlyButtonIsDown = ::Button();
- buttons.clear();
- buttons.set(GHOST_kButtonMaskLeft, theOnlyButtonIsDown);
- return GHOST_kSuccess;
-}
-
-#define FIRSTFILEBUFLG 512
-static bool g_hasFirstFile = false;
-static char g_firstFileBuf[512];
-
-extern "C" int GHOST_HACK_getFirstFile(char buf[FIRSTFILEBUFLG])
-{
- if (g_hasFirstFile) {
- strncpy(buf, g_firstFileBuf, FIRSTFILEBUFLG - 1);
- buf[FIRSTFILEBUFLG - 1] = '\0';
- return 1;
- }
- else {
- return 0;
- }
-}
-
-OSErr GHOST_SystemCarbon::sAEHandlerLaunch(const AppleEvent *event, AppleEvent *reply, SInt32 refCon)
-{
- //GHOST_SystemCarbon* sys = (GHOST_SystemCarbon*) refCon;
-
- return noErr;
-}
-
-OSErr GHOST_SystemCarbon::sAEHandlerOpenDocs(const AppleEvent *event, AppleEvent *reply, SInt32 refCon)
-{
- //GHOST_SystemCarbon* sys = (GHOST_SystemCarbon*) refCon;
- AEDescList docs;
- SInt32 ndocs;
- OSErr err;
-
- err = AEGetParamDesc(event, keyDirectObject, typeAEList, &docs);
- if (err != noErr) return err;
-
- err = AECountItems(&docs, &ndocs);
- if (err == noErr) {
- int i;
-
- for (i = 0; i < ndocs; i++) {
- FSSpec fss;
- AEKeyword kwd;
- DescType actType;
- Size actSize;
-
- err = AEGetNthPtr(&docs, i + 1, typeFSS, &kwd, &actType, &fss, sizeof(fss), &actSize);
- if (err != noErr)
- break;
-
- if (i == 0) {
- FSRef fsref;
-
- if (FSpMakeFSRef(&fss, &fsref) != noErr)
- break;
- if (FSRefMakePath(&fsref, (UInt8 *) g_firstFileBuf, sizeof(g_firstFileBuf)) != noErr)
- break;
-
- g_hasFirstFile = true;
- }
- }
- }
-
- AEDisposeDesc(&docs);
-
- return err;
-}
-
-OSErr GHOST_SystemCarbon::sAEHandlerPrintDocs(const AppleEvent *event, AppleEvent *reply, SInt32 refCon)
-{
- //GHOST_SystemCarbon* sys = (GHOST_SystemCarbon*) refCon;
-
- return noErr;
-}
-
-OSErr GHOST_SystemCarbon::sAEHandlerQuit(const AppleEvent *event, AppleEvent *reply, SInt32 refCon)
-{
- GHOST_SystemCarbon *sys = (GHOST_SystemCarbon *) refCon;
-
- sys->pushEvent(new GHOST_Event(sys->getMilliSeconds(), GHOST_kEventQuit, NULL) );
-
- return noErr;
-}
-
-
-GHOST_TSuccess GHOST_SystemCarbon::init()
-{
-
- GHOST_TSuccess success = GHOST_System::init();
- if (success) {
- /*
- * Initialize the cursor to the standard arrow shape (so that we can change it later on).
- * This initializes the cursor's visibility counter to 0.
- */
- ::InitCursor();
-
- MenuRef windMenu;
- ::CreateStandardWindowMenu(0, &windMenu);
- ::InsertMenu(windMenu, 0);
- ::DrawMenuBar();
-
- ::InstallApplicationEventHandler(sEventHandlerProc, GetEventTypeCount(kEvents), kEvents, this, &m_handler);
-
- ::AEInstallEventHandler(kCoreEventClass, kAEOpenApplication, sAEHandlerLaunch, (SInt32) this, false);
- ::AEInstallEventHandler(kCoreEventClass, kAEOpenDocuments, sAEHandlerOpenDocs, (SInt32) this, false);
- ::AEInstallEventHandler(kCoreEventClass, kAEPrintDocuments, sAEHandlerPrintDocs, (SInt32) this, false);
- ::AEInstallEventHandler(kCoreEventClass, kAEQuitApplication, sAEHandlerQuit, (SInt32) this, false);
-
- }
- return success;
-}
-
-
-GHOST_TSuccess GHOST_SystemCarbon::exit()
-{
- return GHOST_System::exit();
-}
-
-
-OSStatus GHOST_SystemCarbon::handleWindowEvent(EventRef event)
-{
- WindowRef windowRef;
- GHOST_WindowCarbon *window;
- OSStatus err = eventNotHandledErr;
-
- // Check if the event was send to a GHOST window
- ::GetEventParameter(event, kEventParamDirectObject, typeWindowRef, NULL, sizeof(WindowRef), NULL, &windowRef);
- window = (GHOST_WindowCarbon *) ::GetWRefCon(windowRef);
- if (!validWindow(window)) {
- return err;
- }
-
- //if (!getFullScreen()) {
- err = noErr;
- switch (::GetEventKind(event))
- {
- case kEventWindowClose:
- pushEvent(new GHOST_Event(getMilliSeconds(), GHOST_kEventWindowClose, window) );
- break;
- case kEventWindowActivated:
- m_windowManager->setActiveWindow(window);
- window->loadCursor(window->getCursorVisibility(), window->getCursorShape());
- pushEvent(new GHOST_Event(getMilliSeconds(), GHOST_kEventWindowActivate, window) );
- break;
- case kEventWindowDeactivated:
- m_windowManager->setWindowInactive(window);
- pushEvent(new GHOST_Event(getMilliSeconds(), GHOST_kEventWindowDeactivate, window) );
- break;
- case kEventWindowUpdate:
- //if (getFullScreen()) GHOST_PRINT("GHOST_SystemCarbon::handleWindowEvent(): full-screen update event\n");
- pushEvent(new GHOST_Event(getMilliSeconds(), GHOST_kEventWindowUpdate, window) );
- break;
- case kEventWindowBoundsChanged:
- if (!m_ignoreWindowSizedMessages)
- {
- window->updateDrawingContext();
- pushEvent(new GHOST_Event(getMilliSeconds(), GHOST_kEventWindowSize, window) );
- }
- break;
- default:
- err = eventNotHandledErr;
- break;
- }
-// }
- //else {
- //window = (GHOST_WindowCarbon*) m_windowManager->getFullScreenWindow();
- //GHOST_PRINT("GHOST_SystemCarbon::handleWindowEvent(): full-screen window event, " << window << "\n");
- //::RemoveEventFromQueue(::GetMainEventQueue(), event);
- //}
-
- return err;
-}
-
-OSStatus GHOST_SystemCarbon::handleTabletEvent(EventRef event)
-{
- GHOST_IWindow *window = m_windowManager->getActiveWindow();
- TabletPointRec tabletPointRecord;
- TabletProximityRec tabletProximityRecord;
- UInt32 anInt32;
- GHOST_TabletData& ct = ((GHOST_WindowCarbon *)window)->GetCarbonTabletData();
- OSStatus err = eventNotHandledErr;
-
- ct.Pressure = 0;
- ct.Xtilt = 0;
- ct.Ytilt = 0;
-
- // is there an embedded tablet event inside this mouse event?
- if (noErr == GetEventParameter(event, kEventParamTabletEventType, typeUInt32, NULL, sizeof(UInt32), NULL, (void *)&anInt32))
- {
- // yes there is one!
- // Embedded tablet events can either be a proximity or pointer event.
- if (anInt32 == kEventTabletPoint)
- {
- //GHOST_PRINT("Embedded pointer event!\n");
-
- // Extract the tablet Pointer Event. If there is no Tablet Pointer data
- // in this event, then this call will return an error. Just ignore the
- // error and go on. This can occur when a proximity event is embedded in
- // a mouse event and you did not check the mouse event to see which type
- // of tablet event was embedded.
- if (noErr == GetEventParameter(event, kEventParamTabletPointRec,
- typeTabletPointRec, NULL,
- sizeof(TabletPointRec),
- NULL, (void *)&tabletPointRecord))
- {
- ct.Pressure = tabletPointRecord.pressure / 65535.0f;
- ct.Xtilt = tabletPointRecord.tiltX / 32767.0f; /* can be positive or negative */
- ct.Ytilt = tabletPointRecord.tiltY / 32767.0f; /* can be positive or negative */
- }
- }
- else {
- //GHOST_PRINT("Embedded proximity event\n");
-
- // Extract the Tablet Proximity record from the event.
- if (noErr == GetEventParameter(event, kEventParamTabletProximityRec,
- typeTabletProximityRec, NULL,
- sizeof(TabletProximityRec),
- NULL, (void *)&tabletProximityRecord))
- {
- if (tabletProximityRecord.enterProximity) {
- //pointer is entering tablet area proximity
-
- switch (tabletProximityRecord.pointerType)
- {
- case 1: /* stylus */
- ct.Active = GHOST_kTabletModeStylus;
- break;
- case 2: /* puck, not supported so far */
- ct.Active = GHOST_kTabletModeNone;
- break;
- case 3: /* eraser */
- ct.Active = GHOST_kTabletModeEraser;
- break;
- default:
- ct.Active = GHOST_kTabletModeNone;
- break;
- }
- }
- else {
- // pointer is leaving - return to mouse
- ct.Active = GHOST_kTabletModeNone;
- }
- }
- }
- err = noErr;
- }
- return err;
-}
-
-OSStatus GHOST_SystemCarbon::handleMouseEvent(EventRef event)
-{
- OSStatus err = eventNotHandledErr;
- GHOST_IWindow *window = m_windowManager->getActiveWindow();
- UInt32 kind = ::GetEventKind(event);
-
- switch (kind)
- {
- case kEventMouseDown:
- case kEventMouseUp:
- // Handle Mac application responsibilities
- if ((kind == kEventMouseDown) && handleMouseDown(event)) {
- err = noErr;
- }
- else {
- GHOST_TEventType type = (kind == kEventMouseDown) ? GHOST_kEventButtonDown : GHOST_kEventButtonUp;
- EventMouseButton button;
-
- /* Window still gets mouse up after command-H */
- if (m_windowManager->getActiveWindow()) {
- // handle any tablet events that may have come with the mouse event (optional)
- handleTabletEvent(event);
-
- ::GetEventParameter(event, kEventParamMouseButton, typeMouseButton, NULL, sizeof(button), NULL, &button);
- pushEvent(new GHOST_EventButton(getMilliSeconds(), type, window, convertButton(button)));
- err = noErr;
- }
- }
- break;
-
- case kEventMouseMoved:
- case kEventMouseDragged:
- {
- Point mousePos;
-
- if (window) {
- //handle any tablet events that may have come with the mouse event (optional)
- handleTabletEvent(event);
-
- ::GetEventParameter(event, kEventParamMouseLocation, typeQDPoint, NULL, sizeof(Point), NULL, &mousePos);
- pushEvent(new GHOST_EventCursor(getMilliSeconds(), GHOST_kEventCursorMove, window, mousePos.h, mousePos.v));
- err = noErr;
- }
- break;
- }
- case kEventMouseWheelMoved:
- {
- OSStatus status;
- //UInt32 modifiers;
- EventMouseWheelAxis axis;
- SInt32 delta;
- //status = ::GetEventParameter(event, kEventParamKeyModifiers, typeUInt32, NULL, sizeof(modifiers), NULL, &modifiers);
- //GHOST_ASSERT(status == noErr, "GHOST_SystemCarbon::handleMouseEvent(): GetEventParameter() failed");
- status = ::GetEventParameter(event, kEventParamMouseWheelAxis, typeMouseWheelAxis, NULL, sizeof(axis), NULL, &axis);
- GHOST_ASSERT(status == noErr, "GHOST_SystemCarbon::handleMouseEvent(): GetEventParameter() failed");
- if (axis == kEventMouseWheelAxisY)
- {
- status = ::GetEventParameter(event, kEventParamMouseWheelDelta, typeLongInteger, NULL, sizeof(delta), NULL, &delta);
- GHOST_ASSERT(status == noErr, "GHOST_SystemCarbon::handleMouseEvent(): GetEventParameter() failed");
- /*
- * Limit mouse wheel delta to plus and minus one.
- */
- delta = delta > 0 ? 1 : -1;
- pushEvent(new GHOST_EventWheel(getMilliSeconds(), window, delta));
- err = noErr;
- }
- }
- break;
- }
-
- return err;
-}
-
-
-OSStatus GHOST_SystemCarbon::handleKeyEvent(EventRef event)
-{
- OSStatus err = eventNotHandledErr;
- GHOST_IWindow *window = m_windowManager->getActiveWindow();
- UInt32 kind = ::GetEventKind(event);
- UInt32 modifiers;
- UInt32 rawCode;
- GHOST_TKey key;
- unsigned char ascii;
-
- /* Can happen, very rarely - seems to only be when command-H makes
- * the window go away and we still get an HKey up.
- */
- if (!window) {
- //::GetEventParameter(event, kEventParamKeyCode, typeUInt32, NULL, sizeof(UInt32), NULL, &rawCode);
- //key = convertKey(rawCode);
- return err;
- }
-
- err = noErr;
- switch (kind) {
- case kEventRawKeyDown:
- case kEventRawKeyRepeat:
- case kEventRawKeyUp:
- ::GetEventParameter(event, kEventParamKeyCode, typeUInt32, NULL, sizeof(UInt32), NULL, &rawCode);
- ::GetEventParameter(event, kEventParamKeyMacCharCodes, typeChar, NULL, sizeof(char), NULL, &ascii);
-
- key = convertKey(rawCode);
- ascii = convertRomanToLatin(ascii);
-
- // if (key!=GHOST_kKeyUnknown) {
- GHOST_TEventType type;
- if (kind == kEventRawKeyDown) {
- type = GHOST_kEventKeyDown;
- }
- else if (kind == kEventRawKeyRepeat) {
- type = GHOST_kEventKeyDown; /* XXX, fixme */
- }
- else {
- type = GHOST_kEventKeyUp;
- }
- pushEvent(new GHOST_EventKey(getMilliSeconds(), type, window, key, ascii, NULL) );
-// }
- break;
-
- case kEventRawKeyModifiersChanged:
- /* ugh */
- ::GetEventParameter(event, kEventParamKeyModifiers, typeUInt32, NULL, sizeof(UInt32), NULL, &modifiers);
- if ((modifiers & shiftKey) != (m_modifierMask & shiftKey)) {
- pushEvent(new GHOST_EventKey(getMilliSeconds(), (modifiers & shiftKey) ? GHOST_kEventKeyDown : GHOST_kEventKeyUp, window, GHOST_kKeyLeftShift) );
- }
- if ((modifiers & controlKey) != (m_modifierMask & controlKey)) {
- pushEvent(new GHOST_EventKey(getMilliSeconds(), (modifiers & controlKey) ? GHOST_kEventKeyDown : GHOST_kEventKeyUp, window, GHOST_kKeyLeftControl) );
- }
- if ((modifiers & optionKey) != (m_modifierMask & optionKey)) {
- pushEvent(new GHOST_EventKey(getMilliSeconds(), (modifiers & optionKey) ? GHOST_kEventKeyDown : GHOST_kEventKeyUp, window, GHOST_kKeyLeftAlt) );
- }
- if ((modifiers & cmdKey) != (m_modifierMask & cmdKey)) {
- pushEvent(new GHOST_EventKey(getMilliSeconds(), (modifiers & cmdKey) ? GHOST_kEventKeyDown : GHOST_kEventKeyUp, window, GHOST_kKeyOS) );
- }
-
- m_modifierMask = modifiers;
- break;
-
- default:
- err = eventNotHandledErr;
- break;
- }
-
- return err;
-}
-
-
-bool GHOST_SystemCarbon::handleMouseDown(EventRef event)
-{
- WindowPtr window;
- short part;
- BitMap screenBits;
- bool handled = true;
- GHOST_WindowCarbon *ghostWindow;
- Point mousePos = {0, 0};
-
- ::GetEventParameter(event, kEventParamMouseLocation, typeQDPoint, NULL, sizeof(Point), NULL, &mousePos);
-
- part = ::FindWindow(mousePos, &window);
- ghostWindow = (GHOST_WindowCarbon *) ::GetWRefCon(window);
-
- switch (part) {
- case inMenuBar:
- handleMenuCommand(::MenuSelect(mousePos));
- break;
-
- case inDrag:
- /*
- * The DragWindow() routine creates a lot of kEventWindowBoundsChanged
- * events. By setting m_ignoreWindowSizedMessages these are suppressed.
- * \see GHOST_SystemCarbon::handleWindowEvent(EventRef event)
- */
- /* even worse: scale window also generates a load of events, and nothing
- * is handled (read: client's event proc called) until you release mouse (ton) */
-
- GHOST_ASSERT(validWindow(ghostWindow), "GHOST_SystemCarbon::handleMouseDown: invalid window");
- m_ignoreWindowSizedMessages = true;
- ::DragWindow(window, mousePos, &GetQDGlobalsScreenBits(&screenBits)->bounds);
- m_ignoreWindowSizedMessages = false;
-
- pushEvent(new GHOST_Event(getMilliSeconds(), GHOST_kEventWindowMove, ghostWindow) );
-
- break;
-
- case inContent:
- if (window != ::FrontWindow()) {
- ::SelectWindow(window);
- /*
- * We add a mouse down event on the newly actived window
- */
- //GHOST_PRINT("GHOST_SystemCarbon::handleMouseDown(): adding mouse down event, " << ghostWindow << "\n");
- EventMouseButton button;
- ::GetEventParameter(event, kEventParamMouseButton, typeMouseButton, NULL, sizeof(button), NULL, &button);
- pushEvent(new GHOST_EventButton(getMilliSeconds(), GHOST_kEventButtonDown, ghostWindow, convertButton(button)));
- }
- else {
- handled = false;
- }
- break;
-
- case inGoAway:
- GHOST_ASSERT(ghostWindow, "GHOST_SystemCarbon::handleMouseEvent: ghostWindow==0");
- if (::TrackGoAway(window, mousePos))
- {
- // todo: add option-close, because it's in the HIG
- // if (event.modifiers & optionKey) {
- // Close the clean documents, others will be confirmed one by one.
- //}
- // else {
- pushEvent(new GHOST_Event(getMilliSeconds(), GHOST_kEventWindowClose, ghostWindow));
- //}
- }
- break;
-
- case inGrow:
- GHOST_ASSERT(ghostWindow, "GHOST_SystemCarbon::handleMouseEvent: ghostWindow==0");
- ::ResizeWindow(window, mousePos, NULL, NULL);
- break;
-
- case inZoomIn:
- case inZoomOut:
- GHOST_ASSERT(ghostWindow, "GHOST_SystemCarbon::handleMouseEvent: ghostWindow==0");
- if (::TrackBox(window, mousePos, part)) {
- int macState;
-
- macState = ghostWindow->getMac_windowState();
- if (macState == 0)
- ::ZoomWindow(window, part, true);
- else
- if (macState == 2) { // always ok
- ::ZoomWindow(window, part, true);
- ghostWindow->setMac_windowState(1);
- }
- else { // need to force size again
- // GHOST_TUns32 scr_x,scr_y; /*unused*/
- Rect outAvailableRect;
-
- ghostWindow->setMac_windowState(2);
- ::GetAvailableWindowPositioningBounds(GetMainDevice(), &outAvailableRect);
-
- //this->getMainDisplayDimensions(scr_x,scr_y);
- ::SizeWindow(window, outAvailableRect.right - outAvailableRect.left, outAvailableRect.bottom - outAvailableRect.top - 1, false);
- ::MoveWindow(window, outAvailableRect.left, outAvailableRect.top, true);
- }
-
- }
- break;
-
- default:
- handled = false;
- break;
- }
-
- return handled;
-}
-
-
-bool GHOST_SystemCarbon::handleMenuCommand(GHOST_TInt32 menuResult)
-{
- short menuID;
- short menuItem;
- UInt32 command;
- bool handled;
- OSErr err;
-
- menuID = HiWord(menuResult);
- menuItem = LoWord(menuResult);
-
- err = ::GetMenuItemCommandID(::GetMenuHandle(menuID), menuItem, &command);
-
- handled = false;
-
- if (err || command == 0) {
- }
- else {
- switch (command) {
- }
- }
-
- ::HiliteMenu(0);
- return handled;
-}
-
-
-OSStatus GHOST_SystemCarbon::sEventHandlerProc(EventHandlerCallRef handler, EventRef event, void *userData)
-{
- GHOST_SystemCarbon *sys = (GHOST_SystemCarbon *) userData;
- OSStatus err = eventNotHandledErr;
- GHOST_IWindow *window;
-#ifdef WITH_INPUT_NDOF
- GHOST_TEventNDOFData data;
-#endif
- UInt32 kind;
-
- switch (::GetEventClass(event))
- {
- case kEventClassAppleEvent:
- EventRecord eventrec;
- if (ConvertEventRefToEventRecord(event, &eventrec)) {
- err = AEProcessAppleEvent(&eventrec);
- }
- break;
- case kEventClassMouse:
- err = sys->handleMouseEvent(event);
- break;
- case kEventClassWindow:
- err = sys->handleWindowEvent(event);
- break;
- case kEventClassKeyboard:
- err = sys->handleKeyEvent(event);
- break;
- case kEventClassBlender:
-#ifdef WITH_INPUT_NDOF
- window = sys->m_windowManager->getActiveWindow();
- sys->m_ndofManager->GHOST_NDOFGetDatas(data);
- kind = ::GetEventKind(event);
-
- switch (kind)
- {
- case 1:
- sys->m_eventManager->pushEvent(new GHOST_EventNDOF(sys->getMilliSeconds(), GHOST_kEventNDOFMotion, window, data));
- // printf("motion\n");
- break;
- case 2:
- sys->m_eventManager->pushEvent(new GHOST_EventNDOF(sys->getMilliSeconds(), GHOST_kEventNDOFButton, window, data));
-// printf("button\n");
- break;
- }
-#endif
- err = noErr;
- break;
- default:
- ;
- break;
- }
-
- return err;
-}
-
-GHOST_TUns8 *GHOST_SystemCarbon::getClipboard(bool selection) const
-{
- PasteboardRef inPasteboard;
- PasteboardItemID itemID;
- CFDataRef flavorData;
- OSStatus err = noErr;
- GHOST_TUns8 *temp_buff;
- CFRange range;
- OSStatus syncFlags;
-
- err = PasteboardCreate(kPasteboardClipboard, &inPasteboard);
- if (err != noErr) { return NULL; }
-
- syncFlags = PasteboardSynchronize(inPasteboard);
- /* as we always get in a new string, we can safely ignore sync flags if not an error*/
- if (syncFlags < 0) { return NULL; }
-
-
- err = PasteboardGetItemIdentifier(inPasteboard, 1, &itemID);
- if (err != noErr) { return NULL; }
-
- err = PasteboardCopyItemFlavorData(inPasteboard, itemID, CFSTR("public.utf8-plain-text"), &flavorData);
- if (err != noErr) { return NULL; }
-
- range = CFRangeMake(0, CFDataGetLength(flavorData));
-
- temp_buff = (GHOST_TUns8 *) malloc(range.length + 1);
-
- CFDataGetBytes(flavorData, range, (UInt8 *)temp_buff);
-
- temp_buff[range.length] = '\0';
-
- if (temp_buff) {
- return temp_buff;
- }
- else {
- return NULL;
- }
-}
-
-void GHOST_SystemCarbon::putClipboard(GHOST_TInt8 *buffer, bool selection) const
-{
- if (selection) {return; } // for copying the selection, used on X11
-
- PasteboardRef inPasteboard;
- CFDataRef textData = NULL;
- OSStatus err = noErr; /*For error checking*/
- OSStatus syncFlags;
-
- err = PasteboardCreate(kPasteboardClipboard, &inPasteboard);
- if (err != noErr) { return; }
-
- syncFlags = PasteboardSynchronize(inPasteboard);
- /* as we always put in a new string, we can safely ignore sync flags */
- if (syncFlags < 0) { return; }
-
- err = PasteboardClear(inPasteboard);
- if (err != noErr) { return; }
-
- textData = CFDataCreate(kCFAllocatorDefault, (UInt8 *)buffer, strlen(buffer));
-
- if (textData) {
- err = PasteboardPutItemFlavor(inPasteboard, (PasteboardItemID)1, CFSTR("public.utf8-plain-text"), textData, 0);
- if (err != noErr) {
- if (textData) { CFRelease(textData); }
- return;
- }
- }
-
- if (textData) {
- CFRelease(textData);
- }
-}
diff --git a/intern/ghost/intern/GHOST_SystemCarbon.h b/intern/ghost/intern/GHOST_SystemCarbon.h
deleted file mode 100644
index 9faf5423205..00000000000
--- a/intern/ghost/intern/GHOST_SystemCarbon.h
+++ /dev/null
@@ -1,298 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
- * All rights reserved.
- *
- * The Original Code is: all of this file.
- *
- * Contributor(s): none yet.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file ghost/intern/GHOST_SystemCarbon.h
- * \ingroup GHOST
- * Declaration of GHOST_SystemCarbon class.
- */
-
-#ifndef __GHOST_SYSTEMCARBON_H__
-#define __GHOST_SYSTEMCARBON_H__
-
-#ifndef __APPLE__
-#error Apple OSX only!
-#endif // __APPLE__
-
-#define __CARBONSOUND__
-#include <Carbon/Carbon.h>
-
-#include "GHOST_System.h"
-
-class GHOST_EventCursor;
-class GHOST_EventKey;
-class GHOST_EventWindow;
-
-/**
- * OSX/Carbon Implementation of GHOST_System class.
- * \see GHOST_System.
- * \author Maarten Gribnau
- * \date May 21, 2001
- */
-class GHOST_SystemCarbon : public GHOST_System {
-public:
- /**
- * Constructor.
- */
- GHOST_SystemCarbon();
-
- /**
- * Destructor.
- */
- ~GHOST_SystemCarbon();
-
- /***************************************************************************************
- ** Time(r) functionality
- ***************************************************************************************/
-
- /**
- * Returns the system time.
- * Returns the number of milliseconds since the start of the system process.
- * Based on ANSI clock() routine.
- * \return The number of milliseconds.
- */
- virtual GHOST_TUns64 getMilliSeconds() const;
-
- /***************************************************************************************
- ** Display/window management functionality
- ***************************************************************************************/
-
- /**
- * Returns the number of displays on this system.
- * \return The number of displays.
- */
- virtual GHOST_TUns8 getNumDisplays() const;
-
- /**
- * Returns the dimensions of the main display on this system.
- * \return The dimension of the main display.
- */
- virtual void getMainDisplayDimensions(GHOST_TUns32& width, GHOST_TUns32& height) const;
-
- /**
- * Returns the combine dimensions of all monitors.
- * \return The dimension of the workspace.
- */
- virtual void getAllDisplayDimensions(GHOST_TUns32& width, GHOST_TUns32& height) const;
-
- /**
- * Create a new window.
- * The new window is added to the list of windows managed.
- * Never explicitly delete the window, use disposeWindow() instead.
- * \param title The name of the window (displayed in the title bar of the window if the OS supports it).
- * \param left The coordinate of the left edge of the window.
- * \param top The coordinate of the top edge of the window.
- * \param width The width the window.
- * \param height The height the window.
- * \param state The state of the window when opened.
- * \param type The type of drawing context installed in this window.
- * \param parentWindow Parent (embedder) window
- * \return The new window (or 0 if creation failed).
- */
- virtual GHOST_IWindow *createWindow(
- const STR_String& title,
- GHOST_TInt32 left,
- GHOST_TInt32 top,
- GHOST_TUns32 width,
- GHOST_TUns32 height,
- GHOST_TWindowState state,
- GHOST_TDrawingContextType type,
- const bool stereoVisual,
- const bool exclusive = false,
- const GHOST_TUns16 numOfAASamples = 0,
- const GHOST_TEmbedderWindowID parentWindow = 0
- );
-
- virtual GHOST_TSuccess beginFullScreen(
- const GHOST_DisplaySetting& setting,
- GHOST_IWindow **window,
- const bool stereoVisual
- );
-
- virtual GHOST_TSuccess endFullScreen(void);
-
- /***************************************************************************************
- ** Event management functionality
- ***************************************************************************************/
-
- /**
- * Gets events from the system and stores them in the queue.
- * \param waitForEvent Flag to wait for an event (or return immediately).
- * \return Indication of the presence of events.
- */
- virtual bool processEvents(bool waitForEvent);
-
- /***************************************************************************************
- ** Cursor management functionality
- ***************************************************************************************/
-
- /**
- * Returns the current location of the cursor (location in screen coordinates)
- * \param x The x-coordinate of the cursor.
- * \param y The y-coordinate of the cursor.
- * \return Indication of success.
- */
- virtual GHOST_TSuccess getCursorPosition(GHOST_TInt32& x, GHOST_TInt32& y) const;
-
- /**
- * Updates the location of the cursor (location in screen coordinates).
- * \param x The x-coordinate of the cursor.
- * \param y The y-coordinate of the cursor.
- * \return Indication of success.
- */
- virtual GHOST_TSuccess setCursorPosition(GHOST_TInt32 x, GHOST_TInt32 y);
-
- /***************************************************************************************
- ** Access to mouse button and keyboard states.
- ***************************************************************************************/
-
- /**
- * Returns the state of all modifier keys.
- * \param keys The state of all modifier keys (true == pressed).
- * \return Indication of success.
- */
- virtual GHOST_TSuccess getModifierKeys(GHOST_ModifierKeys& keys) const;
-
- /**
- * Returns the state of the mouse buttons (ouside the message queue).
- * \param buttons The state of the buttons.
- * \return Indication of success.
- */
- virtual GHOST_TSuccess getButtons(GHOST_Buttons& buttons) const;
-
- /**
- * Returns Clipboard data
- * \param selection Indicate which buffer to return
- * \return Returns the selected buffer
- */
- virtual GHOST_TUns8 *getClipboard(bool selection) const;
-
- /**
- * Puts buffer to system clipboard
- * \param buffer The buffer to be copied
- * \param selection Indicates which buffer to copy too, only used on X11
- */
- virtual void putClipboard(GHOST_TInt8 *buffer, bool selection) const;
-
- /**
- * \see GHOST_ISystem
- */
- int toggleConsole(int action) {
- return 0;
- }
-
-protected:
- /**
- * Initializes the system.
- * For now, it justs registers the window class (WNDCLASS).
- * \return A success value.
- */
- virtual GHOST_TSuccess init();
-
- /**
- * Closes the system down.
- * \return A success value.
- */
- virtual GHOST_TSuccess exit();
-
-
- /**
- * Handles a tablet event.
- * \param event A Mac event.
- * \return Indication whether the event was handled.
- */
- OSStatus handleTabletEvent(EventRef event);
- /**
- * Handles a mouse event.
- * \param event A Mac event.
- * \return Indication whether the event was handled.
- */
- OSStatus handleMouseEvent(EventRef event);
-
- /**
- * Handles a key event.
- * \param event A Mac event.
- * \return Indication whether the event was handled.
- */
- OSStatus handleKeyEvent(EventRef event);
-
- /**
- * Handles a window event.
- * \param event A Mac event.
- * \return Indication whether the event was handled.
- */
- OSStatus handleWindowEvent(EventRef event);
-
- /**
- * Handles all basic Mac application stuff for a mouse down event.
- * \param event A Mac event.
- * \return Indication whether the event was handled.
- */
- bool handleMouseDown(EventRef event);
-
- /**
- * Handles a Mac menu command.
- * \param menuResult A Mac menu/item identifier.
- * \return Indication whether the event was handled.
- */
- bool handleMenuCommand(GHOST_TInt32 menuResult);
-
- /* callback for blender generated events */
- // static OSStatus blendEventHandlerProc(EventHandlerCallRef handler, EventRef event, void* userData);
-
-
- /**
- * Callback for Carbon when it has events.
- */
- static OSStatus sEventHandlerProc(EventHandlerCallRef handler, EventRef event, void *userData);
-
- /** Apple Event Handlers */
- static OSErr sAEHandlerLaunch(const AppleEvent *event, AppleEvent *reply, SInt32 refCon);
- static OSErr sAEHandlerOpenDocs(const AppleEvent *event, AppleEvent *reply, SInt32 refCon);
- static OSErr sAEHandlerPrintDocs(const AppleEvent *event, AppleEvent *reply, SInt32 refCon);
- static OSErr sAEHandlerQuit(const AppleEvent *event, AppleEvent *reply, SInt32 refCon);
-
- /**
- * Callback for Mac Timer tasks that expire.
- * \param tmTask Pointer to the timer task that expired.
- */
- //static void s_timerCallback(TMTaskPtr tmTask);
-
- /** Event handler reference. */
- EventHandlerRef m_handler;
-
- /** Start time at initialization. */
- GHOST_TUns64 m_start_time;
-
- /** State of the modifiers. */
- UInt32 m_modifierMask;
-
- /** Ignores window size messages (when window is dragged). */
- bool m_ignoreWindowSizedMessages;
-};
-
-#endif // __GHOST_SYSTEMCARBON_H__
-
diff --git a/intern/ghost/intern/GHOST_SystemPathsCarbon.cpp b/intern/ghost/intern/GHOST_SystemPathsCarbon.cpp
deleted file mode 100644
index 7d43392a79c..00000000000
--- a/intern/ghost/intern/GHOST_SystemPathsCarbon.cpp
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * The Original Code is Copyright (C) 2009 Blender Foundation.
- * All rights reserved.
- *
- *
- * Contributor(s): Damien Plisson 2010
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file ghost/intern/GHOST_SystemPathsCarbon.cpp
- * \ingroup GHOST
- */
-
-
-#include <Carbon/Carbon.h>
-#include <ApplicationServices/ApplicationServices.h>
-#include "GHOST_SystemPathsCarbon.h"
-
-
-/***/
-
-GHOST_SystemPathsCarbon::GHOST_SystemPathsCarbon()
-{
-}
-
-GHOST_SystemPathsCarbon::~GHOST_SystemPathsCarbon()
-{
-}
-
-const GHOST_TUns8 *GHOST_SystemPathsCarbon::getSystemDir(int, const char *versionstr) const
-{
- static char systemPath[1024];
-
- snprintf(systemPath, sizeof(systemPath), "/Library/Application Support/Blender/%s", versionstr);
-
- return (GHOST_TUns8*)systemPath;
-}
-
-const GHOST_TUns8 *GHOST_SystemPathsCarbon::getUserDir(int, const char *versionstr) const
-{
- static char usrPath[1024];
- char *env = getenv("HOME");
-
- if (env) {
- snprintf(usrPath, sizeof(usrPath), "%s/Library/Application Support/Blender/%s", env, versionstr);
- return (GHOST_TUns8*)usrPath;
- }
- else
- return NULL;
-}
-
-const GHOST_TUns8 *GHOST_SystemPathsCarbon::getBinaryDir() const
-{
- CFURLRef bundleURL;
- CFStringRef pathStr;
- static char path[256];
- CFBundleRef mainBundle = CFBundleGetMainBundle();
-
- bundleURL = CFBundleCopyBundleURL(mainBundle);
- pathStr = CFURLCopyFileSystemPath(bundleURL, kCFURLPOSIXPathStyle);
- CFStringGetCString(pathStr, path, 255, kCFStringEncodingASCII);
- CFRelease(pathStr);
- CFRelease(bundleURL);
- return (GHOST_TUns8 *)path;
-}
-
-void GHOST_SystemPathsCarbon::addToSystemRecentFiles(const char *filename) const
-{
- /* XXXXX TODO: Implementation for Carbon if possible */
-
-}
diff --git a/intern/ghost/intern/GHOST_SystemPathsCarbon.h b/intern/ghost/intern/GHOST_SystemPathsCarbon.h
deleted file mode 100644
index 9d9a3a22564..00000000000
--- a/intern/ghost/intern/GHOST_SystemPathsCarbon.h
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * The Original Code is Copyright (C) 2010 Blender Foundation.
- * All rights reserved.
- *
- *
- * Contributor(s): Damien Plisson 2010
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file ghost/intern/GHOST_SystemPathsCarbon.h
- * \ingroup GHOST
- */
-
-
-#ifndef __GHOST_SYSTEMPATHSCARBON_H__
-#define __GHOST_SYSTEMPATHSCARBON_H__
-
-#ifndef __APPLE__
-#error Apple OSX only!
-#endif // __APPLE__
-
-#include <Carbon/Carbon.h>
-
-#include "GHOST_SystemPaths.h"
-
-/**
- * OSX/Carbon Implementation of GHOST_SystemPaths class.
- * \see GHOST_System.
- * \author Andrea Weikert
- * \date Aug 1, 2010
- */
-class GHOST_SystemPathsCarbon : public GHOST_SystemPaths {
-public:
- /**
- * Constructor.
- */
- GHOST_SystemPathsCarbon();
-
- /**
- * Destructor.
- */
- ~GHOST_SystemPathsCarbon();
-
- /**
- * Determine the base dir in which shared resources are located. It will first try to use
- * "unpack and run" path, then look for properly installed path, including versioning.
- * \return Unsigned char string pointing to system dir (eg /usr/share/blender/).
- */
- virtual const GHOST_TUns8 *getSystemDir(int version, const char *versionstr) const;
-
- /**
- * Determine the base dir in which user configuration is stored, including versioning.
- * If needed, it will create the base directory.
- * \return Unsigned char string pointing to user dir (eg ~/.blender/).
- */
- virtual const GHOST_TUns8 *getUserDir(int version, const char *versionstr) const;
-
- /**
- * Determine the directory of the current binary
- * \return Unsigned char string pointing to the binary dir
- */
- virtual const GHOST_TUns8 *getBinaryDir() const;
-
- /**
- * Add the file to the operating system most recently used files
- */
- void addToSystemRecentFiles(const char *filename) const;
-};
-
-#endif // __GHOST_SYSTEMPATHSCARBON_H__
diff --git a/intern/ghost/intern/GHOST_WindowCarbon.cpp b/intern/ghost/intern/GHOST_WindowCarbon.cpp
deleted file mode 100644
index 36d45b4790c..00000000000
--- a/intern/ghost/intern/GHOST_WindowCarbon.cpp
+++ /dev/null
@@ -1,751 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
- * All rights reserved.
- *
- * The Original Code is: all of this file.
- *
- * Contributor(s): none yet.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file ghost/intern/GHOST_WindowCarbon.cpp
- * \ingroup GHOST
- */
-
-
-/**
- * Copyright (C) 2001 NaN Technologies B.V.
- * \author Maarten Gribnau
- * \date May 10, 2001
- */
-
-#include "GHOST_WindowCarbon.h"
-#include "GHOST_Debug.h"
-
-AGLContext GHOST_WindowCarbon::s_firstaglCtx = NULL;
-#ifdef GHOST_DRAW_CARBON_GUTTER
-const GHOST_TInt32 GHOST_WindowCarbon::s_sizeRectSize = 16;
-#endif //GHOST_DRAW_CARBON_GUTTER
-
-static const GLint sPreferredFormatWindow[10] = {
- AGL_RGBA,
- AGL_DOUBLEBUFFER,
- AGL_ACCELERATED,
- AGL_DEPTH_SIZE, 32,
- AGL_NONE,
-};
-
-static const GLint sPreferredFormatFullScreen[11] = {
- AGL_RGBA,
- AGL_DOUBLEBUFFER,
- AGL_ACCELERATED,
- AGL_FULLSCREEN,
- AGL_DEPTH_SIZE, 32,
- AGL_NONE,
-};
-
-
-
-WindowRef ugly_hack = NULL;
-
-const EventTypeSpec kWEvents[] = {
- { kEventClassWindow, kEventWindowZoom }, /* for new zoom behaviour */
-};
-
-static OSStatus myWEventHandlerProc(EventHandlerCallRef handler, EventRef event, void *userData)
-{
- WindowRef mywindow;
- GHOST_WindowCarbon *ghost_window;
- OSStatus err;
- int theState;
-
- if (::GetEventKind(event) == kEventWindowZoom) {
- err = ::GetEventParameter(event, kEventParamDirectObject, typeWindowRef, NULL, sizeof(mywindow), NULL, &mywindow);
- ghost_window = (GHOST_WindowCarbon *) GetWRefCon(mywindow);
- theState = ghost_window->getMac_windowState();
- if (theState == 1)
- ghost_window->setMac_windowState(2);
- else if (theState == 2)
- ghost_window->setMac_windowState(1);
-
- }
- return eventNotHandledErr;
-}
-
-GHOST_WindowCarbon::GHOST_WindowCarbon(
- const STR_String& title,
- GHOST_TInt32 left,
- GHOST_TInt32 top,
- GHOST_TUns32 width,
- GHOST_TUns32 height,
- GHOST_TWindowState state,
- GHOST_TDrawingContextType type,
- const bool stereoVisual,
- const GHOST_TUns16 numOfAASamples
- ) :
- GHOST_Window(width, height, state, GHOST_kDrawingContextTypeNone),
- m_windowRef(0),
- m_grafPtr(0),
- m_aglCtx(0),
- m_customCursor(0),
- m_fullScreenDirty(false)
-{
- Str255 title255;
- OSStatus err;
-
- //fprintf(stderr," main screen top %i left %i height %i width %i\n", top, left, height, width);
-
- if (state >= GHOST_kWindowState8Normal) {
- if (state == GHOST_kWindowState8Normal) state = GHOST_kWindowStateNormal;
- else if (state == GHOST_kWindowState8Maximized) state = GHOST_kWindowStateMaximized;
- else if (state == GHOST_kWindowState8Minimized) state = GHOST_kWindowStateMinimized;
- else if (state == GHOST_kWindowState8FullScreen) state = GHOST_kWindowStateFullScreen;
-
- // state = state - 8; this was the simple version of above code, doesnt work in gcc 4.0
-
- setMac_windowState(1);
- }
- else
- setMac_windowState(0);
-
- if (state != GHOST_kWindowStateFullScreen) {
- Rect bnds = { top, left, top + height, left + width };
- // Boolean visible = (state == GHOST_kWindowStateNormal) || (state == GHOST_kWindowStateMaximized); /*unused*/
- gen2mac(title, title255);
-
- err = ::CreateNewWindow(kDocumentWindowClass,
- kWindowStandardDocumentAttributes + kWindowLiveResizeAttribute,
- &bnds,
- &m_windowRef);
-
- if (err != noErr) {
- fprintf(stderr, " error creating window %i \n", (int)err);
- }
- else {
-
- ::SetWRefCon(m_windowRef, (SInt32) this);
- setTitle(title);
- err = InstallWindowEventHandler(m_windowRef, myWEventHandlerProc, GetEventTypeCount(kWEvents), kWEvents, NULL, NULL);
- if (err != noErr) {
- fprintf(stderr, " error creating handler %i \n", (int)err);
- }
- else {
- // ::TransitionWindow (m_windowRef,kWindowZoomTransitionEffect,kWindowShowTransitionAction,NULL);
- ::ShowWindow(m_windowRef);
- ::MoveWindow(m_windowRef, left, top, true);
-
- }
- }
- if (m_windowRef) {
- m_grafPtr = ::GetWindowPort(m_windowRef);
- setDrawingContextType(type);
- updateDrawingContext();
- activateDrawingContext();
- }
- if (ugly_hack == NULL) {
- ugly_hack = m_windowRef;
- // when started from commandline, window remains in the back... also for play anim
- ProcessSerialNumber psn;
- GetCurrentProcess(&psn);
- SetFrontProcess(&psn);
- }
- }
- else {
-#if 0
- Rect bnds = { top, left, top + height, left + width };
- gen2mac("", title255);
- m_windowRef = ::NewCWindow(
- nil, // Storage
- &bnds, // Bounding rectangle of the window
- title255, // Title of the window
- 0, // Window initially visible
- plainDBox, // procID
- (WindowRef) - 1L, // Put window before all other windows
- 0, // Window has minimize box
- (SInt32) this); // Store a pointer to the class in the refCon
-#endif
- //GHOST_PRINT("GHOST_WindowCarbon::GHOST_WindowCarbon(): creating full-screen OpenGL context\n");
- setDrawingContextType(GHOST_kDrawingContextTypeOpenGL);
- installDrawingContext(GHOST_kDrawingContextTypeOpenGL);
- updateDrawingContext();
- activateDrawingContext();
-
- m_tablet.Active = GHOST_kTabletModeNone;
- }
-}
-
-
-GHOST_WindowCarbon::~GHOST_WindowCarbon()
-{
- if (m_customCursor) delete m_customCursor;
-
- if (ugly_hack == m_windowRef) ugly_hack = NULL;
-
- // printf("GHOST_WindowCarbon::~GHOST_WindowCarbon(): removing drawing context\n");
- if (ugly_hack == NULL) setDrawingContextType(GHOST_kDrawingContextTypeNone);
- if (m_windowRef) {
- ::DisposeWindow(m_windowRef);
- m_windowRef = 0;
- }
-}
-
-bool GHOST_WindowCarbon::getValid() const
-{
- bool valid;
- if (!m_fullScreen) {
- valid = (m_windowRef != 0) && (m_grafPtr != 0) && ::IsValidWindowPtr(m_windowRef);
- }
- else {
- valid = true;
- }
- return valid;
-}
-
-
-void GHOST_WindowCarbon::setTitle(const STR_String& title)
-{
- GHOST_ASSERT(getValid(), "GHOST_WindowCarbon::setTitle(): window invalid");
- Str255 title255;
- gen2mac(title, title255);
- ::SetWTitle(m_windowRef, title255);
-}
-
-
-void GHOST_WindowCarbon::getTitle(STR_String& title) const
-{
- GHOST_ASSERT(getValid(), "GHOST_WindowCarbon::getTitle(): window invalid");
- Str255 title255;
- ::GetWTitle(m_windowRef, title255);
- mac2gen(title255, title);
-}
-
-
-void GHOST_WindowCarbon::getWindowBounds(GHOST_Rect& bounds) const
-{
- OSStatus success;
- Rect rect;
- GHOST_ASSERT(getValid(), "GHOST_WindowCarbon::getWindowBounds(): window invalid");
- success = ::GetWindowBounds(m_windowRef, kWindowStructureRgn, &rect);
- bounds.m_b = rect.bottom;
- bounds.m_l = rect.left;
- bounds.m_r = rect.right;
- bounds.m_t = rect.top;
-}
-
-
-void GHOST_WindowCarbon::getClientBounds(GHOST_Rect& bounds) const
-{
- Rect rect;
- GHOST_ASSERT(getValid(), "GHOST_WindowCarbon::getClientBounds(): window invalid");
- //::GetPortBounds(m_grafPtr, &rect);
- ::GetWindowBounds(m_windowRef, kWindowContentRgn, &rect);
-
- bounds.m_b = rect.bottom;
- bounds.m_l = rect.left;
- bounds.m_r = rect.right;
- bounds.m_t = rect.top;
-
- // Subtract gutter height from bottom
-#ifdef GHOST_DRAW_CARBON_GUTTER
- if ((bounds.m_b - bounds.m_t) > s_sizeRectSize)
- {
- bounds.m_b -= s_sizeRectSize;
- }
- else {
- bounds.m_t = bounds.m_b;
- }
-#endif //GHOST_DRAW_CARBON_GUTTER
-}
-
-
-GHOST_TSuccess GHOST_WindowCarbon::setClientWidth(GHOST_TUns32 width)
-{
- GHOST_ASSERT(getValid(), "GHOST_WindowCarbon::setClientWidth(): window invalid");
- GHOST_Rect cBnds, wBnds;
- getClientBounds(cBnds);
- if (((GHOST_TUns32)cBnds.getWidth()) != width) {
- ::SizeWindow(m_windowRef, width, cBnds.getHeight(), true);
- }
- return GHOST_kSuccess;
-}
-
-
-GHOST_TSuccess GHOST_WindowCarbon::setClientHeight(GHOST_TUns32 height)
-{
- GHOST_ASSERT(getValid(), "GHOST_WindowCarbon::setClientHeight(): window invalid");
- GHOST_Rect cBnds, wBnds;
- getClientBounds(cBnds);
-#ifdef GHOST_DRAW_CARBON_GUTTER
- if (((GHOST_TUns32)cBnds.getHeight()) != height + s_sizeRectSize) {
- ::SizeWindow(m_windowRef, cBnds.getWidth(), height + s_sizeRectSize, true);
- }
-#else //GHOST_DRAW_CARBON_GUTTER
- if (((GHOST_TUns32)cBnds.getHeight()) != height) {
- ::SizeWindow(m_windowRef, cBnds.getWidth(), height, true);
- }
-#endif //GHOST_DRAW_CARBON_GUTTER
- return GHOST_kSuccess;
-}
-
-
-GHOST_TSuccess GHOST_WindowCarbon::setClientSize(GHOST_TUns32 width, GHOST_TUns32 height)
-{
- GHOST_ASSERT(getValid(), "GHOST_WindowCarbon::setClientSize(): window invalid");
- GHOST_Rect cBnds, wBnds;
- getClientBounds(cBnds);
-#ifdef GHOST_DRAW_CARBON_GUTTER
- if ((((GHOST_TUns32)cBnds.getWidth()) != width) ||
- (((GHOST_TUns32)cBnds.getHeight()) != height + s_sizeRectSize))
- {
- ::SizeWindow(m_windowRef, width, height + s_sizeRectSize, true);
- }
-#else //GHOST_DRAW_CARBON_GUTTER
- if ((((GHOST_TUns32)cBnds.getWidth()) != width) ||
- (((GHOST_TUns32)cBnds.getHeight()) != height)) {
- ::SizeWindow(m_windowRef, width, height, true);
- }
-#endif //GHOST_DRAW_CARBON_GUTTER
- return GHOST_kSuccess;
-}
-
-
-GHOST_TWindowState GHOST_WindowCarbon::getState() const
-{
- GHOST_ASSERT(getValid(), "GHOST_WindowCarbon::getState(): window invalid");
- GHOST_TWindowState state;
- if (::IsWindowVisible(m_windowRef) == false) {
- state = GHOST_kWindowStateMinimized;
- }
- else if (::IsWindowInStandardState(m_windowRef, nil, nil)) {
- state = GHOST_kWindowStateMaximized;
- }
- else {
- state = GHOST_kWindowStateNormal;
- }
- return state;
-}
-
-
-void GHOST_WindowCarbon::screenToClient(GHOST_TInt32 inX, GHOST_TInt32 inY, GHOST_TInt32& outX, GHOST_TInt32& outY) const
-{
- GHOST_ASSERT(getValid(), "GHOST_WindowCarbon::screenToClient(): window invalid");
- Point point;
- point.h = inX;
- point.v = inY;
- GrafPtr oldPort;
- ::GetPort(&oldPort);
- ::SetPort(m_grafPtr);
- ::GlobalToLocal(&point);
- ::SetPort(oldPort);
- outX = point.h;
- outY = point.v;
-}
-
-
-void GHOST_WindowCarbon::clientToScreen(GHOST_TInt32 inX, GHOST_TInt32 inY, GHOST_TInt32& outX, GHOST_TInt32& outY) const
-{
- GHOST_ASSERT(getValid(), "GHOST_WindowCarbon::clientToScreen(): window invalid");
- Point point;
- point.h = inX;
- point.v = inY;
- GrafPtr oldPort;
- ::GetPort(&oldPort);
- ::SetPort(m_grafPtr);
- ::LocalToGlobal(&point);
- ::SetPort(oldPort);
- outX = point.h;
- outY = point.v;
-}
-
-
-GHOST_TSuccess GHOST_WindowCarbon::setState(GHOST_TWindowState state)
-{
- GHOST_ASSERT(getValid(), "GHOST_WindowCarbon::setState(): window invalid");
- switch (state) {
- case GHOST_kWindowStateMinimized:
- ::HideWindow(m_windowRef);
- break;
- case GHOST_kWindowStateModified:
- SetWindowModified(m_windowRef, 1);
- break;
- case GHOST_kWindowStateUnModified:
- SetWindowModified(m_windowRef, 0);
- break;
- case GHOST_kWindowStateMaximized:
- case GHOST_kWindowStateNormal:
- default:
- ::ShowWindow(m_windowRef);
- break;
- }
- return GHOST_kSuccess;
-}
-
-
-GHOST_TSuccess GHOST_WindowCarbon::setOrder(GHOST_TWindowOrder order)
-{
- GHOST_ASSERT(getValid(), "GHOST_WindowCarbon::setOrder(): window invalid");
- if (order == GHOST_kWindowOrderTop) {
- //::BringToFront(m_windowRef); is wrong, front window should be active for input too
- ::SelectWindow(m_windowRef);
- }
- else {
- /* doesnt work if you do this with a mouseclick */
- ::SendBehind(m_windowRef, nil);
- }
- return GHOST_kSuccess;
-}
-
-/*#define WAIT_FOR_VSYNC 1*/
-#ifdef WAIT_FOR_VSYNC
-#include <OpenGL/OpenGL.h>
-#endif
-
-GHOST_TSuccess GHOST_WindowCarbon::swapBuffers()
-{
-#ifdef WAIT_FOR_VSYNC
-/* wait for vsync, to avoid tearing artifacts */
- long VBL = 1;
- CGLSetParameter(CGLGetCurrentContext(), kCGLCPSwapInterval, &VBL);
-#endif
-
- GHOST_TSuccess succeeded = GHOST_kSuccess;
- if (m_drawingContextType == GHOST_kDrawingContextTypeOpenGL) {
- if (m_aglCtx) {
- ::aglSwapBuffers(m_aglCtx);
- }
- else {
- succeeded = GHOST_kFailure;
- }
- }
- return succeeded;
-}
-
-GHOST_TSuccess GHOST_WindowCarbon::updateDrawingContext()
-{
- GHOST_TSuccess succeeded = GHOST_kSuccess;
- if (m_drawingContextType == GHOST_kDrawingContextTypeOpenGL) {
- if (m_aglCtx) {
- ::aglUpdateContext(m_aglCtx);
- }
- else {
- succeeded = GHOST_kFailure;
- }
- }
- return succeeded;
-}
-
-GHOST_TSuccess GHOST_WindowCarbon::activateDrawingContext()
-{
- GHOST_TSuccess succeeded = GHOST_kSuccess;
- if (m_drawingContextType == GHOST_kDrawingContextTypeOpenGL) {
- if (m_aglCtx) {
- ::aglSetCurrentContext(m_aglCtx);
-#ifdef GHOST_DRAW_CARBON_GUTTER
- // Restrict drawing to non-gutter area
- ::aglEnable(m_aglCtx, AGL_BUFFER_RECT);
- GHOST_Rect bnds;
- getClientBounds(bnds);
- GLint b[4] =
- {
- bnds.m_l,
- bnds.m_t + s_sizeRectSize,
- bnds.m_r - bnds.m_l,
- bnds.m_b - bnds.m_t
- };
- GLboolean result = ::aglSetInteger(m_aglCtx, AGL_BUFFER_RECT, b);
-#endif //GHOST_DRAW_CARBON_GUTTER
- }
- else {
- succeeded = GHOST_kFailure;
- }
- }
- return succeeded;
-}
-
-
-GHOST_TSuccess GHOST_WindowCarbon::installDrawingContext(GHOST_TDrawingContextType type)
-{
- GHOST_TSuccess success = GHOST_kFailure;
- switch (type) {
- case GHOST_kDrawingContextTypeOpenGL:
- {
- if (!getValid()) break;
-
- AGLPixelFormat pixelFormat;
- if (!m_fullScreen) {
- pixelFormat = ::aglChoosePixelFormat(0, 0, sPreferredFormatWindow);
- m_aglCtx = ::aglCreateContext(pixelFormat, s_firstaglCtx);
- if (!m_aglCtx) break;
- if (!s_firstaglCtx) s_firstaglCtx = m_aglCtx;
- success = ::aglSetDrawable(m_aglCtx, m_grafPtr) == GL_TRUE ? GHOST_kSuccess : GHOST_kFailure;
- }
- else {
- //GHOST_PRINT("GHOST_WindowCarbon::installDrawingContext(): init full-screen OpenGL\n");
- GDHandle device = ::GetMainDevice(); pixelFormat = ::aglChoosePixelFormat(&device, 1, sPreferredFormatFullScreen);
- m_aglCtx = ::aglCreateContext(pixelFormat, 0);
- if (!m_aglCtx) break;
- if (!s_firstaglCtx) s_firstaglCtx = m_aglCtx;
- //GHOST_PRINT("GHOST_WindowCarbon::installDrawingContext(): created OpenGL context\n");
- //::CGGetActiveDisplayList(0, NULL, &m_numDisplays)
- success = ::aglSetFullScreen(m_aglCtx, m_fullScreenWidth, m_fullScreenHeight, 75, 0) == GL_TRUE ? GHOST_kSuccess : GHOST_kFailure;
-#if 0
- if (success == GHOST_kSuccess) {
- GHOST_PRINT("GHOST_WindowCarbon::installDrawingContext(): init full-screen OpenGL succeeded\n");
- }
- else {
- GHOST_PRINT("GHOST_WindowCarbon::installDrawingContext(): init full-screen OpenGL failed\n");
- }
-#endif
- }
- ::aglDestroyPixelFormat(pixelFormat);
- }
- break;
-
- case GHOST_kDrawingContextTypeNone:
- success = GHOST_kSuccess;
- break;
-
- default:
- break;
- }
- return success;
-}
-
-
-GHOST_TSuccess GHOST_WindowCarbon::removeDrawingContext()
-{
- GHOST_TSuccess success = GHOST_kFailure;
- switch (m_drawingContextType) {
- case GHOST_kDrawingContextTypeOpenGL:
- if (m_aglCtx) {
- aglSetCurrentContext(NULL);
- aglSetDrawable(m_aglCtx, NULL);
- //aglDestroyContext(m_aglCtx);
- if (s_firstaglCtx == m_aglCtx) s_firstaglCtx = NULL;
- success = ::aglDestroyContext(m_aglCtx) == GL_TRUE ? GHOST_kSuccess : GHOST_kFailure;
- m_aglCtx = 0;
- }
- break;
- case GHOST_kDrawingContextTypeNone:
- success = GHOST_kSuccess;
- break;
- default:
- break;
- }
- return success;
-}
-
-
-GHOST_TSuccess GHOST_WindowCarbon::invalidate()
-{
- GHOST_ASSERT(getValid(), "GHOST_WindowCarbon::invalidate(): window invalid");
- if (!m_fullScreen) {
- Rect rect;
- ::GetPortBounds(m_grafPtr, &rect);
- ::InvalWindowRect(m_windowRef, &rect);
- }
- else {
- //EventRef event;
- //OSStatus status = ::CreateEvent(NULL, kEventClassWindow, kEventWindowUpdate, 0, 0, &event);
- //GHOST_PRINT("GHOST_WindowCarbon::invalidate(): created event " << status << " \n");
- //status = ::SetEventParameter(event, kEventParamDirectObject, typeWindowRef, sizeof(WindowRef), this);
- //GHOST_PRINT("GHOST_WindowCarbon::invalidate(): set event parameter " << status << " \n");
- //status = ::PostEventToQueue(::GetMainEventQueue(), event, kEventPriorityStandard);
- //status = ::SendEventToEventTarget(event, ::GetApplicationEventTarget());
- //GHOST_PRINT("GHOST_WindowCarbon::invalidate(): added event to queue " << status << " \n");
- m_fullScreenDirty = true;
- }
- return GHOST_kSuccess;
-}
-
-
-void GHOST_WindowCarbon::gen2mac(const STR_String& in, Str255 out) const
-{
- STR_String tempStr = in;
- int num = tempStr.Length();
- if (num > 255) num = 255;
- ::memcpy(out + 1, tempStr.Ptr(), num);
- out[0] = num;
-}
-
-
-void GHOST_WindowCarbon::mac2gen(const Str255 in, STR_String& out) const
-{
- char tmp[256];
- ::memcpy(tmp, in + 1, in[0]);
- tmp[in[0]] = '\0';
- out = tmp;
-}
-
-void GHOST_WindowCarbon::loadCursor(bool visible, GHOST_TStandardCursor cursor) const
-{
- static bool systemCursorVisible = true;
-
- if (visible != systemCursorVisible) {
- if (visible) {
- ::ShowCursor();
- systemCursorVisible = true;
- }
- else {
- ::HideCursor();
- systemCursorVisible = false;
- }
- }
-
- if (cursor == GHOST_kStandardCursorCustom && m_customCursor) {
- ::SetCursor(m_customCursor);
- }
- else {
- int carbon_cursor;
-
-#define GCMAP(ghostCursor, carbonCursor) case ghostCursor: carbon_cursor = carbonCursor; break
- switch (cursor) {
- default:
- GCMAP(GHOST_kStandardCursorDefault, kThemeArrowCursor);
- GCMAP(GHOST_kStandardCursorRightArrow, kThemeAliasArrowCursor);
- GCMAP(GHOST_kStandardCursorLeftArrow, kThemeArrowCursor);
- GCMAP(GHOST_kStandardCursorInfo, kThemeArrowCursor);
- GCMAP(GHOST_kStandardCursorDestroy, kThemeArrowCursor);
- GCMAP(GHOST_kStandardCursorHelp, kThemeArrowCursor);
- GCMAP(GHOST_kStandardCursorCycle, kThemeArrowCursor);
- GCMAP(GHOST_kStandardCursorSpray, kThemeArrowCursor);
- GCMAP(GHOST_kStandardCursorWait, kThemeWatchCursor);
- GCMAP(GHOST_kStandardCursorText, kThemeIBeamCursor);
- GCMAP(GHOST_kStandardCursorCrosshair, kThemeCrossCursor);
- GCMAP(GHOST_kStandardCursorUpDown, kThemeClosedHandCursor);
- GCMAP(GHOST_kStandardCursorLeftRight, kThemeClosedHandCursor);
- GCMAP(GHOST_kStandardCursorTopSide, kThemeArrowCursor);
- GCMAP(GHOST_kStandardCursorBottomSide, kThemeArrowCursor);
- GCMAP(GHOST_kStandardCursorLeftSide, kThemeResizeLeftCursor);
- GCMAP(GHOST_kStandardCursorRightSide, kThemeResizeRightCursor);
- GCMAP(GHOST_kStandardCursorTopLeftCorner, kThemeArrowCursor);
- GCMAP(GHOST_kStandardCursorTopRightCorner, kThemeArrowCursor);
- GCMAP(GHOST_kStandardCursorBottomRightCorner, kThemeArrowCursor);
- GCMAP(GHOST_kStandardCursorBottomLeftCorner, kThemeArrowCursor);
- GCMAP(GHOST_kStandardCursorCopy, kThemeCopyArrowCursor);
- };
-#undef GCMAP
-
- ::SetThemeCursor(carbon_cursor);
- }
-}
-
-
-bool GHOST_WindowCarbon::getFullScreenDirty()
-{
- return m_fullScreen && m_fullScreenDirty;
-}
-
-
-GHOST_TSuccess GHOST_WindowCarbon::setWindowCursorVisibility(bool visible)
-{
- if (::FrontWindow() == m_windowRef) {
- loadCursor(visible, getCursorShape());
- }
-
- return GHOST_kSuccess;
-}
-
-GHOST_TSuccess GHOST_WindowCarbon::setWindowCursorShape(GHOST_TStandardCursor shape)
-{
- if (m_customCursor) {
- delete m_customCursor;
- m_customCursor = 0;
- }
-
- if (::FrontWindow() == m_windowRef) {
- loadCursor(getCursorVisibility(), shape);
- }
-
- return GHOST_kSuccess;
-}
-
-#if 0 /* UNUSED */
-/** Reverse the bits in a GHOST_TUns8 */
-static GHOST_TUns8 uns8ReverseBits(GHOST_TUns8 ch)
-{
- ch = ((ch >> 1) & 0x55) | ((ch << 1) & 0xAA);
- ch = ((ch >> 2) & 0x33) | ((ch << 2) & 0xCC);
- ch = ((ch >> 4) & 0x0F) | ((ch << 4) & 0xF0);
- return ch;
-}
-#endif
-
-
-/** Reverse the bits in a GHOST_TUns16 */
-static GHOST_TUns16 uns16ReverseBits(GHOST_TUns16 shrt)
-{
- shrt = ((shrt >> 1) & 0x5555) | ((shrt << 1) & 0xAAAA);
- shrt = ((shrt >> 2) & 0x3333) | ((shrt << 2) & 0xCCCC);
- shrt = ((shrt >> 4) & 0x0F0F) | ((shrt << 4) & 0xF0F0);
- shrt = ((shrt >> 8) & 0x00FF) | ((shrt << 8) & 0xFF00);
- return shrt;
-}
-
-GHOST_TSuccess GHOST_WindowCarbon::setWindowCustomCursorShape(GHOST_TUns8 *bitmap, GHOST_TUns8 *mask,
- int sizex, int sizey, int hotX, int hotY, int fg_color, int bg_color)
-{
- int y;
-
- if (m_customCursor) {
- delete m_customCursor;
- m_customCursor = 0;
- }
-
- m_customCursor = new Cursor;
- if (!m_customCursor) return GHOST_kFailure;
-
- for (y = 0; y < 16; y++) {
-#if !defined(__LITTLE_ENDIAN__)
- m_customCursor->data[y] = uns16ReverseBits((bitmap[2 * y] << 0) | (bitmap[2 * y + 1] << 8));
- m_customCursor->mask[y] = uns16ReverseBits((mask[2 * y] << 0) | (mask[2 * y + 1] << 8));
-#else
- m_customCursor->data[y] = uns16ReverseBits((bitmap[2 * y + 1] << 0) | (bitmap[2 * y] << 8));
- m_customCursor->mask[y] = uns16ReverseBits((mask[2 * y + 1] << 0) | (mask[2 * y] << 8));
-#endif
-
- }
-
- m_customCursor->hotSpot.h = hotX;
- m_customCursor->hotSpot.v = hotY;
-
- if (::FrontWindow() == m_windowRef) {
- loadCursor(getCursorVisibility(), GHOST_kStandardCursorCustom);
- }
-
- return GHOST_kSuccess;
-}
-
-GHOST_TSuccess GHOST_WindowCarbon::setWindowCustomCursorShape(GHOST_TUns8 bitmap[16][2],
- GHOST_TUns8 mask[16][2], int hotX, int hotY)
-{
- return setWindowCustomCursorShape((GHOST_TUns8 *)bitmap, (GHOST_TUns8 *) mask, 16, 16, hotX, hotY, 0, 1);
-}
-
-
-void GHOST_WindowCarbon::setMac_windowState(short value)
-{
- mac_windowState = value;
-}
-
-short GHOST_WindowCarbon::getMac_windowState()
-{
- return mac_windowState;
-}
diff --git a/intern/ghost/intern/GHOST_WindowCarbon.h b/intern/ghost/intern/GHOST_WindowCarbon.h
deleted file mode 100644
index 16f305e93c5..00000000000
--- a/intern/ghost/intern/GHOST_WindowCarbon.h
+++ /dev/null
@@ -1,321 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
- * All rights reserved.
- *
- * The Original Code is: all of this file.
- *
- * Contributor(s): none yet.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file ghost/intern/GHOST_WindowCarbon.h
- * \ingroup GHOST
- * Declaration of GHOST_WindowCarbon class.
- */
-
-#ifndef __GHOST_WINDOWCARBON_H__
-#define __GHOST_WINDOWCARBON_H__
-
-#ifndef __APPLE__
-#error Apple OSX only!
-#endif // __APPLE__
-
-#include "GHOST_Window.h"
-#include "STR_String.h"
-
-#define __CARBONSOUND__
-#include <Carbon/Carbon.h>
-
-#include <AGL/agl.h>
-
-
-/**
- * Window on Mac OSX/Carbon.
- * Carbon windows have a size widget in the lower right corner of the window.
- * To force it to be visible, the height of the client rectangle is reduced so
- * that applications do not draw in that area. GHOST will manage that area
- * which is called the gutter.
- * When OpenGL contexts are active, GHOST will use AGL_BUFFER_RECT to prevent
- * OpenGL drawing outside the reduced client rectangle.
- * \author Maarten Gribnau
- * \date May 23, 2001
- */
-class GHOST_WindowCarbon : public GHOST_Window {
-public:
- /**
- * Constructor.
- * Creates a new window and opens it.
- * To check if the window was created properly, use the getValid() method.
- * \param title The text shown in the title bar of the window.
- * \param left The coordinate of the left edge of the window.
- * \param top The coordinate of the top edge of the window.
- * \param width The width the window.
- * \param height The height the window.
- * \param state The state the window is initially opened with.
- * \param type The type of drawing context installed in this window.
- * \param stereoVisual Stereo visual for quad buffered stereo.
- */
- GHOST_WindowCarbon(
- const STR_String& title,
- GHOST_TInt32 left,
- GHOST_TInt32 top,
- GHOST_TUns32 width,
- GHOST_TUns32 height,
- GHOST_TWindowState state,
- GHOST_TDrawingContextType type = GHOST_kDrawingContextTypeNone,
- const bool stereoVisual = false,
- const GHOST_TUns16 numOfAASamples = 0
- );
-
- /**
- * Destructor.
- * Closes the window and disposes resources allocated.
- */
- virtual ~GHOST_WindowCarbon();
-
- /**
- * Returns indication as to whether the window is valid.
- * \return The validity of the window.
- */
- virtual bool getValid() const;
-
- /**
- * Sets the title displayed in the title bar.
- * \param title The title to display in the title bar.
- */
- virtual void setTitle(const STR_String& title);
-
- /**
- * Returns the title displayed in the title bar.
- * \param title The title displayed in the title bar.
- */
- virtual void getTitle(STR_String& title) const;
-
- /**
- * Returns the window rectangle dimensions.
- * The dimensions are given in screen coordinates that are relative to the upper-left corner of the screen.
- * \param bounds The bounding rectangle of the window.
- */
- virtual void getWindowBounds(GHOST_Rect& bounds) const;
-
- /**
- * Returns the client rectangle dimensions.
- * The left and top members of the rectangle are always zero.
- * \param bounds The bounding rectangle of the cleient area of the window.
- */
- virtual void getClientBounds(GHOST_Rect& bounds) const;
-
- /**
- * Resizes client rectangle width.
- * \param width The new width of the client area of the window.
- */
- virtual GHOST_TSuccess setClientWidth(GHOST_TUns32 width);
-
- /**
- * Resizes client rectangle height.
- * \param height The new height of the client area of the window.
- */
- virtual GHOST_TSuccess setClientHeight(GHOST_TUns32 height);
-
- /**
- * Resizes client rectangle.
- * \param width The new width of the client area of the window.
- * \param height The new height of the client area of the window.
- */
- virtual GHOST_TSuccess setClientSize(GHOST_TUns32 width, GHOST_TUns32 height);
-
- /**
- * Returns the state of the window (normal, minimized, maximized).
- * \return The state of the window.
- */
- virtual GHOST_TWindowState getState() const;
-
- /**
- * Converts a point in screen coordinates to client rectangle coordinates
- * \param inX The x-coordinate on the screen.
- * \param inY The y-coordinate on the screen.
- * \param outX The x-coordinate in the client rectangle.
- * \param outY The y-coordinate in the client rectangle.
- */
- virtual void screenToClient(GHOST_TInt32 inX, GHOST_TInt32 inY, GHOST_TInt32& outX, GHOST_TInt32& outY) const;
-
- /**
- * Converts a point in screen coordinates to client rectangle coordinates
- * \param inX The x-coordinate in the client rectangle.
- * \param inY The y-coordinate in the client rectangle.
- * \param outX The x-coordinate on the screen.
- * \param outY The y-coordinate on the screen.
- */
- virtual void clientToScreen(GHOST_TInt32 inX, GHOST_TInt32 inY, GHOST_TInt32& outX, GHOST_TInt32& outY) const;
-
- /**
- * Sets the state of the window (normal, minimized, maximized).
- * \param state The state of the window.
- * \return Indication of success.
- */
- virtual GHOST_TSuccess setState(GHOST_TWindowState state);
-
- /**
- * Sets the order of the window (bottom, top).
- * \param order The order of the window.
- * \return Indication of success.
- */
- virtual GHOST_TSuccess setOrder(GHOST_TWindowOrder order);
-
- /**
- * Swaps front and back buffers of a window.
- * \return A boolean success indicator.
- */
- virtual GHOST_TSuccess swapBuffers();
-
- /**
- * Updates the drawing context of this window. Needed
- * whenever the window is changed.
- * \return Indication of success.
- */
- GHOST_TSuccess updateDrawingContext();
-
- /**
- * Activates the drawing context of this window.
- * \return A boolean success indicator.
- */
- virtual GHOST_TSuccess activateDrawingContext();
-
- virtual void loadCursor(bool visible, GHOST_TStandardCursor cursor) const;
-
- /**
- * Returns the dirty state of the window when in full-screen mode.
- * \return Whether it is dirty.
- */
- virtual bool getFullScreenDirty();
-
- /* accessor for fullscreen window */
- virtual void setMac_windowState(short value);
- virtual short getMac_windowState();
-
-
- const GHOST_TabletData *GetTabletData()
- {
- return &m_tablet;
- }
-
- GHOST_TabletData& GetCarbonTabletData()
- {
- return m_tablet;
- }
-
- GHOST_TSuccess beginFullScreen() const {return GHOST_kFailure;}
-
- GHOST_TSuccess endFullScreen() const {return GHOST_kFailure;}
-
-protected:
- /**
- * Tries to install a rendering context in this window.
- * \param type The type of rendering context installed.
- * \return Indication as to whether installation has succeeded.
- */
- virtual GHOST_TSuccess installDrawingContext(GHOST_TDrawingContextType type);
-
- /**
- * Removes the current drawing context.
- * \return Indication as to whether removal has succeeded.
- */
- virtual GHOST_TSuccess removeDrawingContext();
-
- /**
- * Invalidates the contents of this window.
- * \return Indication of success.
- */
- virtual GHOST_TSuccess invalidate();
-
- /**
- * Sets the cursor visibility on the window using
- * native window system calls.
- */
- virtual GHOST_TSuccess setWindowCursorVisibility(bool visible);
-
- /**
- * Sets the cursor shape on the window using
- * native window system calls.
- */
- virtual GHOST_TSuccess setWindowCursorShape(GHOST_TStandardCursor shape);
-
- /**
- * Sets the cursor shape on the window using
- * native window system calls.
- */
- virtual GHOST_TSuccess setWindowCustomCursorShape(GHOST_TUns8 *bitmap, GHOST_TUns8 *mask,
- int sizex, int sizey, int hotX, int hotY, int fg_color, int bg_color);
-
- virtual GHOST_TSuccess setWindowCustomCursorShape(GHOST_TUns8 bitmap[16][2], GHOST_TUns8 mask[16][2], int hotX, int hotY);
-
- /**
- * Converts a string object to a Mac Pascal string.
- * \param in The string object to be converted.
- * \param out The converted string.
- */
- virtual void gen2mac(const STR_String& in, Str255 out) const;
-
- /**
- * Converts a Mac Pascal string to a string object.
- * \param in The string to be converted.
- * \param out The converted string object.
- */
- virtual void mac2gen(const Str255 in, STR_String& out) const;
-
- WindowRef m_windowRef;
- CGrafPtr m_grafPtr;
- AGLContext m_aglCtx;
-
- /** The first created OpenGL context (for sharing display lists) */
- static AGLContext s_firstaglCtx;
-
- Cursor *m_customCursor;
-
- GHOST_TabletData m_tablet;
-
- /** When running in full-screen this tells whether to refresh the window. */
- bool m_fullScreenDirty;
-
- /** specific MacOs X full screen window setting as we use partially system mechanism
- * values : 0 not maximizable default
- * 1 normal state
- * 2 maximized state
- *
- * this will be reworked when rebuilding GHOST carbon to use new OS X apis
- * in order to be unified with GHOST fullscreen/maximised settings
- *
- * (lukep)
- **/
-
- short mac_windowState;
-
-
- /**
- * The width/height of the size rectangle in the lower right corner of a
- * Mac/Carbon window. This is also the height of the gutter area.
- */
-#ifdef GHOST_DRAW_CARBON_GUTTER
- static const GHOST_TInt32 s_sizeRectSize;
-#endif // GHOST_DRAW_CARBON_GUTTER
-};
-
-#endif // __GHOST_WINDOWCARBON_H__
-