Cocoa / Mac:
- 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)
This commit is contained in:
@@ -372,133 +372,6 @@ static GHOST_TKey convertKey(int rawCode, unichar recvChar)
|
|||||||
return GHOST_kKeyUnknown;
|
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
|
#define FIRSTFILEBUFLG 512
|
||||||
static bool g_hasFirstFile = false;
|
static bool g_hasFirstFile = false;
|
||||||
@@ -1255,8 +1128,10 @@ GHOST_TSuccess GHOST_SystemCocoa::handleKeyEvent(void *eventPtr)
|
|||||||
GHOST_IWindow* window = m_windowManager->getActiveWindow();
|
GHOST_IWindow* window = m_windowManager->getActiveWindow();
|
||||||
unsigned int modifiers;
|
unsigned int modifiers;
|
||||||
NSString *characters;
|
NSString *characters;
|
||||||
|
NSData *convertedCharacters;
|
||||||
GHOST_TKey keyCode;
|
GHOST_TKey keyCode;
|
||||||
unsigned char ascii;
|
unsigned char ascii;
|
||||||
|
NSString* charsIgnoringModifiers;
|
||||||
|
|
||||||
/* Can happen, very rarely - seems to only be when command-H makes
|
/* Can happen, very rarely - seems to only be when command-H makes
|
||||||
* the window go away and we still get an HKey up.
|
* 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]) {
|
switch ([event type]) {
|
||||||
case NSKeyDown:
|
case NSKeyDown:
|
||||||
case NSKeyUp:
|
case NSKeyUp:
|
||||||
characters = [event characters];
|
charsIgnoringModifiers = [event charactersIgnoringModifiers];
|
||||||
if ([characters length]) { //Check for dead keys
|
if ([charsIgnoringModifiers length]>0)
|
||||||
keyCode = convertKey([event keyCode],
|
keyCode = convertKey([event keyCode],
|
||||||
[[event charactersIgnoringModifiers] characterAtIndex:0]);
|
[charsIgnoringModifiers characterAtIndex:0]);
|
||||||
ascii= convertRomanToLatin((char)[characters characterAtIndex:0]);
|
else
|
||||||
} else {
|
|
||||||
keyCode = convertKey([event keyCode],0);
|
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))
|
if ((keyCode == GHOST_kKeyQ) && (m_modifierMask & NSCommandKeyMask))
|
||||||
break; //Cmd-Q is directly handled by Cocoa
|
break; //Cmd-Q is directly handled by Cocoa
|
||||||
|
@@ -43,16 +43,6 @@
|
|||||||
#include "GHOST_Debug.h"
|
#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
|
#pragma mark Cocoa window delegate object
|
||||||
/* live resize ugly patch
|
/* live resize ugly patch
|
||||||
extern "C" {
|
extern "C" {
|
||||||
@@ -191,9 +181,12 @@ GHOST_WindowCocoa::GHOST_WindowCocoa(
|
|||||||
GHOST_TDrawingContextType type,
|
GHOST_TDrawingContextType type,
|
||||||
const bool stereoVisual
|
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)
|
m_customCursor(0)
|
||||||
{
|
{
|
||||||
|
NSOpenGLPixelFormatAttribute pixelFormatAttrsWindow[40];
|
||||||
|
int i;
|
||||||
|
|
||||||
m_systemCocoa = systemCocoa;
|
m_systemCocoa = systemCocoa;
|
||||||
m_fullScreen = false;
|
m_fullScreen = false;
|
||||||
|
|
||||||
@@ -224,7 +217,21 @@ GHOST_WindowCocoa::GHOST_WindowCocoa(
|
|||||||
|
|
||||||
setTitle(title);
|
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
|
//Creates the OpenGL View inside the window
|
||||||
NSOpenGLPixelFormat *pixelFormat =
|
NSOpenGLPixelFormat *pixelFormat =
|
||||||
[[NSOpenGLPixelFormat alloc] initWithAttributes:pixelFormatAttrsWindow];
|
[[NSOpenGLPixelFormat alloc] initWithAttributes:pixelFormatAttrsWindow];
|
||||||
|
@@ -173,7 +173,6 @@ IF(WITH_INSTALL)
|
|||||||
ADD_CUSTOM_COMMAND(
|
ADD_CUSTOM_COMMAND(
|
||||||
TARGET blender POST_BUILD MAIN_DEPENDENCY blender
|
TARGET blender POST_BUILD MAIN_DEPENDENCY blender
|
||||||
COMMAND find ${TARGETDIR} -name .svn -prune -exec rm -rf {} "\;"
|
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
|
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 .DS_Store -prune -exec rm -rf {} "\;"
|
||||||
COMMAND find ${TARGETDIR}/blender.app -name .svn -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)
|
ENDIF(APPLE)
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user