Cocoa / Mac:
authorDamien Plisson <damien.plisson@yahoo.fr>
Mon, 26 Oct 2009 08:43:24 +0000 (08:43 +0000)
committerDamien Plisson <damien.plisson@yahoo.fr>
Mon, 26 Oct 2009 08:43:24 +0000 (08:43 +0000)
- use Cocoa function to convert keys character value to isoLatin-1 encoding instead of the translation table. Works better with international keyboards

- enable stereo GL option

- fix source/creator CMake file to remove unneeded folders in the app bundle (the __MACOSX stuff). (Thx jensverwiebe)

intern/ghost/intern/GHOST_SystemCocoa.mm
intern/ghost/intern/GHOST_WindowCocoa.mm
source/creator/CMakeLists.txt

index 20b190cc41f48da25b86c210691a5b8d11c5b871..03a617ebdd7bcb742a772c46e2eb24fe200101c2 100644 (file)
@@ -372,133 +372,6 @@ static GHOST_TKey convertKey(int rawCode, unichar recvChar)
        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;
-       }
-
-}
 
 #define FIRSTFILEBUFLG 512
 static bool g_hasFirstFile = false;
@@ -1255,8 +1128,10 @@ GHOST_TSuccess GHOST_SystemCocoa::handleKeyEvent(void *eventPtr)
        GHOST_IWindow* window = m_windowManager->getActiveWindow();
        unsigned int modifiers;
        NSString *characters;
+       NSData *convertedCharacters;
        GHOST_TKey keyCode;
        unsigned char ascii;
+       NSString* charsIgnoringModifiers;
 
        /* Can happen, very rarely - seems to only be when command-H makes
         * the window go away and we still get an HKey up. 
@@ -1269,16 +1144,25 @@ GHOST_TSuccess GHOST_SystemCocoa::handleKeyEvent(void *eventPtr)
        switch ([event type]) {
                case NSKeyDown:
                case NSKeyUp:
-                       characters = [event characters];
-                       if ([characters length]) { //Check for dead keys
+                       charsIgnoringModifiers = [event charactersIgnoringModifiers];
+                       if ([charsIgnoringModifiers length]>0)
                                keyCode = convertKey([event keyCode],
-                                                                        [[event charactersIgnoringModifiers] characterAtIndex:0]);
-                               ascii= convertRomanToLatin((char)[characters characterAtIndex:0]);
-                       } else {
+                                                                        [charsIgnoringModifiers characterAtIndex:0]);
+                       else
                                keyCode = convertKey([event keyCode],0);
-                               ascii= 0;
+
+                               
+                       characters = [event characters];
+                       if ([characters length]>0) { //Check for dead keys
+                               //Convert characters to iso latin 1 encoding
+                               convertedCharacters = [characters dataUsingEncoding:NSISOLatin1StringEncoding];
+                               if ([convertedCharacters length]>0)
+                                       ascii =((char*)[convertedCharacters bytes])[0];
+                               else
+                                       ascii = 0; //Character not available in iso latin 1 encoding
                        }
-                       
+                       else
+                               ascii= 0;
                        
                        if ((keyCode == GHOST_kKeyQ) && (m_modifierMask & NSCommandKeyMask))
                                break; //Cmd-Q is directly handled by Cocoa
index 0090d8e10385a219fa3c360516c39007ebc46abf..42d7de3f2df05dfcd70571f995f6885fe4069786 100644 (file)
 #include "GHOST_Debug.h"
 
 
-// Pixel Format Attributes for the windowed NSOpenGLContext
-static NSOpenGLPixelFormatAttribute pixelFormatAttrsWindow[] =
-{
-       NSOpenGLPFADoubleBuffer,
-       NSOpenGLPFAAccelerated,
-       //NSOpenGLPFAAllowOfflineRenderers,   // Removed to allow 10.4 builds, and 2 GPUs rendering is not used anyway
-       NSOpenGLPFADepthSize, (NSOpenGLPixelFormatAttribute) 32,
-       (NSOpenGLPixelFormatAttribute) 0
-};
-
 #pragma mark Cocoa window delegate object
 /* live resize ugly patch
 extern "C" {
@@ -191,9 +181,12 @@ GHOST_WindowCocoa::GHOST_WindowCocoa(
        GHOST_TDrawingContextType type,
        const bool stereoVisual
 ) :
-       GHOST_Window(title, left, top, width, height, state, GHOST_kDrawingContextTypeNone),
+       GHOST_Window(title, left, top, width, height, state, type,stereoVisual),
        m_customCursor(0)
 {
+       NSOpenGLPixelFormatAttribute pixelFormatAttrsWindow[40];
+       int i;
+       
        m_systemCocoa = systemCocoa;
        m_fullScreen = false;
        
@@ -224,7 +217,21 @@ GHOST_WindowCocoa::GHOST_WindowCocoa(
        
        setTitle(title);
        
-                       
+       
+       // Pixel Format Attributes for the windowed NSOpenGLContext
+       i=0;
+       pixelFormatAttrsWindow[i++] = NSOpenGLPFADoubleBuffer;
+       pixelFormatAttrsWindow[i++] = NSOpenGLPFAAccelerated;
+       //pixelFormatAttrsWindow[i++] = NSOpenGLPFAAllowOfflineRenderers,;   // Removed to allow 10.4 builds, and 2 GPUs rendering is not used anyway
+       
+       pixelFormatAttrsWindow[i++] = NSOpenGLPFADepthSize;
+       pixelFormatAttrsWindow[i++] = (NSOpenGLPixelFormatAttribute) 32;
+       
+       if (stereoVisual) pixelFormatAttrsWindow[i++] = NSOpenGLPFAStereo;
+       
+       pixelFormatAttrsWindow[i] = (NSOpenGLPixelFormatAttribute) 0;
+       
+
        //Creates the OpenGL View inside the window
        NSOpenGLPixelFormat *pixelFormat =
        [[NSOpenGLPixelFormat alloc] initWithAttributes:pixelFormatAttrsWindow];
index 57a1f8e00a5756481e5b4c73a65f32e533ddf43d..fa59324c5dc9279c479a8814a2fa21dd9806b3ba 100644 (file)
@@ -173,7 +173,6 @@ IF(WITH_INSTALL)
                ADD_CUSTOM_COMMAND(
                        TARGET blender POST_BUILD MAIN_DEPENDENCY blender
                        COMMAND find ${TARGETDIR} -name .svn -prune -exec rm -rf {} "\;"
-                       COMMAND find ${TARGETDIR} -name __MACOSX -prune -exec rm -rf {} "\;"
                )
     
     
@@ -244,6 +243,7 @@ IF(WITH_INSTALL)
                        TARGET blender POST_BUILD MAIN_DEPENDENCY blender    
                        COMMAND find ${TARGETDIR}/blender.app -name .DS_Store -prune -exec rm -rf {} "\;"
                        COMMAND find ${TARGETDIR}/blender.app -name .svn -prune -exec rm -rf {} "\;"
+                       COMMAND find ${TARGETDIR}/blender.app -name __MACOSX -prune -exec rm -rf {} "\;"
                )
        ENDIF(APPLE)