[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [23665] trunk/blender: Cocoa port : First pure Cocoa version !

Damien Plisson damien.plisson at yahoo.fr
Tue Oct 6 18:56:22 CEST 2009


Revision: 23665
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=23665
Author:   damien78
Date:     2009-10-06 18:56:22 +0200 (Tue, 06 Oct 2009)

Log Message:
-----------
Cocoa port : First pure Cocoa version !
(Mostly for very early testers)

Cocoa uses coordinates with y=0 at bottom : updated wm_window.c and wm_event_system.c for COCOA build to avoid double conversions in response to mouse move events and GHOST_getCursorPosition

Known limitations:
No fullscreen support
Font issue in preference panel
libSDL uses some Carbon functions

Modified Paths:
--------------
    trunk/blender/intern/ghost/intern/GHOST_SystemCocoa.h
    trunk/blender/intern/ghost/intern/GHOST_SystemCocoa.mm
    trunk/blender/intern/ghost/intern/GHOST_WindowCocoa.h
    trunk/blender/intern/ghost/intern/GHOST_WindowCocoa.mm
    trunk/blender/source/blender/windowmanager/intern/wm_event_system.c
    trunk/blender/source/blender/windowmanager/intern/wm_window.c

Modified: trunk/blender/intern/ghost/intern/GHOST_SystemCocoa.h
===================================================================
--- trunk/blender/intern/ghost/intern/GHOST_SystemCocoa.h	2009-10-06 15:31:25 UTC (rev 23664)
+++ trunk/blender/intern/ghost/intern/GHOST_SystemCocoa.h	2009-10-06 16:56:22 UTC (rev 23665)
@@ -46,6 +46,7 @@
 class GHOST_EventCursor;
 class GHOST_EventKey;
 class GHOST_EventWindow;
+class GHOST_WindowCocoa;
 
 
 class GHOST_SystemCocoa : public GHOST_System {
@@ -191,6 +192,13 @@
 	 */
 	virtual void putClipboard(GHOST_TInt8 *buffer, bool selection) const;
 
+	/**
+     * Handles a window event. Called by GHOST_WindowCocoa window delegate
+     * @param eventPtr	An NSEvent pointer (casted to void* to enable compilation in standard C++)
+     * @return Indication whether the event was handled. 
+     */
+    GHOST_TSuccess handleWindowEvent(GHOST_TEventType eventType, GHOST_WindowCocoa* window);
+	
 protected:
 	/**
 	 * Initializes the system.
@@ -220,13 +228,6 @@
      */
     GHOST_TSuccess handleKeyEvent(void *eventPtr);
 
-   /**
-     * Handles a window event.
-     * @param eventPtr	An NSEvent pointer (casted to void* to enable compilation in standard C++)
-     * @return Indication whether the event was handled. 
-     */
-    GHOST_TSuccess handleWindowEvent(void *eventPtr);
-
     /**
      * Handles all basic Mac application stuff for a mouse down event.
      * @param eventPtr	An NSEvent pointer (casted to void* to enable compilation in standard C++)
@@ -250,10 +251,7 @@
      * @param tmTask Pointer to the timer task that expired.
      */
     //static void s_timerCallback(TMTaskPtr tmTask);
-    
-	/** Cocoa autoReleasePool (void*) used for enablign standard C++ compilation */
-	void* m_autoReleasePool;
-	
+    	
     /** Event handler reference. */
     //EventHandlerRef m_handler;
 	

Modified: trunk/blender/intern/ghost/intern/GHOST_SystemCocoa.mm
===================================================================
--- trunk/blender/intern/ghost/intern/GHOST_SystemCocoa.mm	2009-10-06 15:31:25 UTC (rev 23664)
+++ trunk/blender/intern/ghost/intern/GHOST_SystemCocoa.mm	2009-10-06 16:56:22 UTC (rev 23665)
@@ -89,7 +89,157 @@
 	
 };*/
 
-static GHOST_TButtonMask convertButton(EventMouseButton button)
+/* Keycodes from Carbon include file */
+/*  
+ *  Summary:
+ *    Virtual keycodes
+ *  
+ *  Discussion:
+ *    These constants are the virtual keycodes defined originally in
+ *    Inside Mac Volume V, pg. V-191. They identify physical keys on a
+ *    keyboard. Those constants with "ANSI" in the name are labeled
+ *    according to the key position on an ANSI-standard US keyboard.
+ *    For example, kVK_ANSI_A indicates the virtual keycode for the key
+ *    with the letter 'A' in the US keyboard layout. Other keyboard
+ *    layouts may have the 'A' key label on a different physical key;
+ *    in this case, pressing 'A' will generate a different virtual
+ *    keycode.
+ */
+enum {
+	kVK_ANSI_A                    = 0x00,
+	kVK_ANSI_S                    = 0x01,
+	kVK_ANSI_D                    = 0x02,
+	kVK_ANSI_F                    = 0x03,
+	kVK_ANSI_H                    = 0x04,
+	kVK_ANSI_G                    = 0x05,
+	kVK_ANSI_Z                    = 0x06,
+	kVK_ANSI_X                    = 0x07,
+	kVK_ANSI_C                    = 0x08,
+	kVK_ANSI_V                    = 0x09,
+	kVK_ANSI_B                    = 0x0B,
+	kVK_ANSI_Q                    = 0x0C,
+	kVK_ANSI_W                    = 0x0D,
+	kVK_ANSI_E                    = 0x0E,
+	kVK_ANSI_R                    = 0x0F,
+	kVK_ANSI_Y                    = 0x10,
+	kVK_ANSI_T                    = 0x11,
+	kVK_ANSI_1                    = 0x12,
+	kVK_ANSI_2                    = 0x13,
+	kVK_ANSI_3                    = 0x14,
+	kVK_ANSI_4                    = 0x15,
+	kVK_ANSI_6                    = 0x16,
+	kVK_ANSI_5                    = 0x17,
+	kVK_ANSI_Equal                = 0x18,
+	kVK_ANSI_9                    = 0x19,
+	kVK_ANSI_7                    = 0x1A,
+	kVK_ANSI_Minus                = 0x1B,
+	kVK_ANSI_8                    = 0x1C,
+	kVK_ANSI_0                    = 0x1D,
+	kVK_ANSI_RightBracket         = 0x1E,
+	kVK_ANSI_O                    = 0x1F,
+	kVK_ANSI_U                    = 0x20,
+	kVK_ANSI_LeftBracket          = 0x21,
+	kVK_ANSI_I                    = 0x22,
+	kVK_ANSI_P                    = 0x23,
+	kVK_ANSI_L                    = 0x25,
+	kVK_ANSI_J                    = 0x26,
+	kVK_ANSI_Quote                = 0x27,
+	kVK_ANSI_K                    = 0x28,
+	kVK_ANSI_Semicolon            = 0x29,
+	kVK_ANSI_Backslash            = 0x2A,
+	kVK_ANSI_Comma                = 0x2B,
+	kVK_ANSI_Slash                = 0x2C,
+	kVK_ANSI_N                    = 0x2D,
+	kVK_ANSI_M                    = 0x2E,
+	kVK_ANSI_Period               = 0x2F,
+	kVK_ANSI_Grave                = 0x32,
+	kVK_ANSI_KeypadDecimal        = 0x41,
+	kVK_ANSI_KeypadMultiply       = 0x43,
+	kVK_ANSI_KeypadPlus           = 0x45,
+	kVK_ANSI_KeypadClear          = 0x47,
+	kVK_ANSI_KeypadDivide         = 0x4B,
+	kVK_ANSI_KeypadEnter          = 0x4C,
+	kVK_ANSI_KeypadMinus          = 0x4E,
+	kVK_ANSI_KeypadEquals         = 0x51,
+	kVK_ANSI_Keypad0              = 0x52,
+	kVK_ANSI_Keypad1              = 0x53,
+	kVK_ANSI_Keypad2              = 0x54,
+	kVK_ANSI_Keypad3              = 0x55,
+	kVK_ANSI_Keypad4              = 0x56,
+	kVK_ANSI_Keypad5              = 0x57,
+	kVK_ANSI_Keypad6              = 0x58,
+	kVK_ANSI_Keypad7              = 0x59,
+	kVK_ANSI_Keypad8              = 0x5B,
+	kVK_ANSI_Keypad9              = 0x5C
+};
+
+/* keycodes for keys that are independent of keyboard layout*/
+enum {
+	kVK_Return                    = 0x24,
+	kVK_Tab                       = 0x30,
+	kVK_Space                     = 0x31,
+	kVK_Delete                    = 0x33,
+	kVK_Escape                    = 0x35,
+	kVK_Command                   = 0x37,
+	kVK_Shift                     = 0x38,
+	kVK_CapsLock                  = 0x39,
+	kVK_Option                    = 0x3A,
+	kVK_Control                   = 0x3B,
+	kVK_RightShift                = 0x3C,
+	kVK_RightOption               = 0x3D,
+	kVK_RightControl              = 0x3E,
+	kVK_Function                  = 0x3F,
+	kVK_F17                       = 0x40,
+	kVK_VolumeUp                  = 0x48,
+	kVK_VolumeDown                = 0x49,
+	kVK_Mute                      = 0x4A,
+	kVK_F18                       = 0x4F,
+	kVK_F19                       = 0x50,
+	kVK_F20                       = 0x5A,
+	kVK_F5                        = 0x60,
+	kVK_F6                        = 0x61,
+	kVK_F7                        = 0x62,
+	kVK_F3                        = 0x63,
+	kVK_F8                        = 0x64,
+	kVK_F9                        = 0x65,
+	kVK_F11                       = 0x67,
+	kVK_F13                       = 0x69,
+	kVK_F16                       = 0x6A,
+	kVK_F14                       = 0x6B,
+	kVK_F10                       = 0x6D,
+	kVK_F12                       = 0x6F,
+	kVK_F15                       = 0x71,
+	kVK_Help                      = 0x72,
+	kVK_Home                      = 0x73,
+	kVK_PageUp                    = 0x74,
+	kVK_ForwardDelete             = 0x75,
+	kVK_F4                        = 0x76,
+	kVK_End                       = 0x77,
+	kVK_F2                        = 0x78,
+	kVK_PageDown                  = 0x79,
+	kVK_F1                        = 0x7A,
+	kVK_LeftArrow                 = 0x7B,
+	kVK_RightArrow                = 0x7C,
+	kVK_DownArrow                 = 0x7D,
+	kVK_UpArrow                   = 0x7E
+};
+
+/* ISO keyboards only*/
+enum {
+	kVK_ISO_Section               = 0x0A
+};
+
+/* JIS keyboards only*/
+enum {
+	kVK_JIS_Yen                   = 0x5D,
+	kVK_JIS_Underscore            = 0x5E,
+	kVK_JIS_KeypadComma           = 0x5F,
+	kVK_JIS_Eisu                  = 0x66,
+	kVK_JIS_Kana                  = 0x68
+};
+
+
+static GHOST_TButtonMask convertButton(int button)
 {
 	switch (button) {
 		case 0:
@@ -474,8 +624,6 @@
 
 GHOST_SystemCocoa::~GHOST_SystemCocoa()
 {
-	NSAutoreleasePool* pool = (NSAutoreleasePool *)m_autoReleasePool;
-	[pool drain];
 }
 
 
@@ -492,16 +640,18 @@
 			SetFrontProcess(&psn);
 		}*/
 		
-		m_autoReleasePool = [[NSAutoreleasePool alloc] init];
+		NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
 		if (NSApp == nil) {
 			[NSApplication sharedApplication];
 			
 			if ([NSApp mainMenu] == nil) {
 				NSMenu *mainMenubar = [[NSMenu alloc] init];
 				NSMenuItem *menuItem;
+				NSMenu *windowMenu;
+				NSMenu *appMenu;
 				
 				//Create the application menu
-				NSMenu *appMenu = [[NSMenu alloc] initWithTitle:@"Blender"];
+				appMenu = [[NSMenu alloc] initWithTitle:@"Blender"];
 				
 				[appMenu addItemWithTitle:@"About Blender" action:@selector(orderFrontStandardAboutPanel:) keyEquivalent:@""];
 				[appMenu addItem:[NSMenuItem separatorItem]];
@@ -525,7 +675,7 @@
 				[appMenu release];
 				
 				//Create the window menu
-				NSMenu *windowMenu = [[NSMenu alloc] initWithTitle:@"Window"];
+				windowMenu = [[NSMenu alloc] initWithTitle:@"Window"];
 				
 				menuItem = [windowMenu addItemWithTitle:@"Minimize" action:@selector(performMiniaturize:) keyEquivalent:@"m"];
 				[menuItem setKeyEquivalentModifierMask:NSCommandKeyMask];
@@ -549,8 +699,9 @@
 			[appDelegate setSystemCocoa:this];
 			[NSApp setDelegate:appDelegate];
 		}
+				
+		[pool drain];
 		
-		
 		/*
          * 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.
@@ -597,12 +748,18 @@
 {
 	//Note that OS X supports monitor hot plug
 	// We do not support multiple monitors at the moment
-	return [[NSScreen screens] count];
+	NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+
+	GHOST_TUns8 count = [[NSScreen screens] count];
+
+	[pool drain];
+	return count;
 }
 
 
 void GHOST_SystemCocoa::getMainDisplayDimensions(GHOST_TUns32& width, GHOST_TUns32& height) const
 {
+	NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
 	//Get visible frame, that is frame excluding dock and top menu bar
 	NSRect frame = [[NSScreen mainScreen] visibleFrame];
 	
@@ -612,6 +769,8 @@
 	
 	width = contentRect.size.width;
 	height = contentRect.size.height;
+
+	[pool drain];
 }
 
 
@@ -627,7 +786,8 @@
 	const GHOST_TEmbedderWindowID parentWindow
 )
 {
-    GHOST_IWindow* window = 0;
+    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+	GHOST_IWindow* window = 0;
 	
 	//Get the available rect for including window contents

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list