Revision: 23873
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=23873
Author:   damien78
Date:     2009-10-15 22:09:50 +0200 (Thu, 15 Oct 2009)

Log Message:
-----------
Cocoa : 
- implemented custom cursor handling

Modified Paths:
--------------
    trunk/blender/intern/ghost/intern/GHOST_WindowCocoa.mm

Modified: trunk/blender/intern/ghost/intern/GHOST_WindowCocoa.mm
===================================================================
--- trunk/blender/intern/ghost/intern/GHOST_WindowCocoa.mm      2009-10-15 
19:38:45 UTC (rev 23872)
+++ trunk/blender/intern/ghost/intern/GHOST_WindowCocoa.mm      2009-10-15 
20:09:50 UTC (rev 23873)
@@ -932,8 +932,7 @@
        return GHOST_kSuccess;
 }
 
-#if 0
-/** Reverse the bits in a GHOST_TUns8 */
+/** Reverse the bits in a GHOST_TUns8
 static GHOST_TUns8 uns8ReverseBits(GHOST_TUns8 ch)
 {
        ch= ((ch>>1)&0x55) | ((ch<<1)&0xAA);
@@ -941,7 +940,7 @@
        ch= ((ch>>4)&0x0F) | ((ch<<4)&0xF0);
        return ch;
 }
-#endif
+*/
 
 
 /** Reverse the bits in a GHOST_TUns16 */
@@ -957,43 +956,68 @@
 GHOST_TSuccess GHOST_WindowCocoa::setWindowCustomCursorShape(GHOST_TUns8 
*bitmap, GHOST_TUns8 *mask,
                                        int sizex, int sizey, int hotX, int 
hotY, int fg_color, int bg_color)
 {
-       int y;
+       int y,nbUns16;
        NSPoint hotSpotPoint;
+       NSBitmapImageRep *cursorImageRep;
        NSImage *cursorImage;
+       NSSize imSize;
+       GHOST_TUns16 *cursorBitmap;
        
+       
+       NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+       
        if (m_customCursor) {
                [m_customCursor release];
                m_customCursor = nil;
        }
-       /*TODO: implement this (but unused inproject at present)
-       cursorImage = [[NSImage alloc] initWithData:bitmap];
        
-       for (y=0; y<16; y++) {
+
+       cursorImageRep = [[NSBitmapImageRep alloc] initWithBitmapDataPlanes:nil
+                                                                               
                                         pixelsWide:sizex
+                                                                               
                                         pixelsHigh:sizey
+                                                                               
                                  bitsPerSample:1 
+                                                                               
                                samplesPerPixel:2
+                                                                               
                                           hasAlpha:YES
+                                                                               
                                           isPlanar:YES
+                                                                               
                                 colorSpaceName:NSDeviceBlackColorSpace
+                                                                               
                                        bytesPerRow:(sizex/8 + (sizex%8 >0 
?1:0))
+                                                                               
                                   bitsPerPixel:1];
+       
+       
+       cursorBitmap = (GHOST_TUns16*)[cursorImageRep bitmapData];
+       nbUns16 = [cursorImageRep bytesPerPlane]/2;
+       
+       for (y=0; y<nbUns16; 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));
+               cursorBitmap[y] = uns16ReverseBits((bitmap[2*y]<<0) | 
(bitmap[2*y+1]<<8));
+               cursorBitmap[nbUns16+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));
+               cursorBitmap[y] = uns16ReverseBits((bitmap[2*y+1]<<0) | 
(bitmap[2*y]<<8));
+               cursorBitmap[nbUns16+y] = uns16ReverseBits((mask[2*y+1]<<0) | 
(mask[2*y]<<8));
 #endif
-                       
+               
        }
        
        
+       imSize.width = sizex;
+       imSize.height= sizey;
+       cursorImage = [[NSImage alloc] initWithSize:imSize];
+       [cursorImage addRepresentation:cursorImageRep];
+       
        hotSpotPoint.x = hotX;
        hotSpotPoint.y = hotY;
        
+       //foreground and background color parameter is not handled for now 
(10.6)
        m_customCursor = [[NSCursor alloc] initWithImage:cursorImage
-                                                                
foregroundColorHint:<#(NSColor *)fg#>
-                                                                
backgroundColorHint:<#(NSColor *)bg#>
                                                                                
         hotSpot:hotSpotPoint];
        
+       [cursorImageRep release];
        [cursorImage release];
        
        if ([m_window isVisible]) {
                loadCursor(getCursorVisibility(), GHOST_kStandardCursorCustom);
        }
-       */
+       [pool drain];
        return GHOST_kSuccess;
 }
 
@@ -1002,36 +1026,3 @@
 {
        return setWindowCustomCursorShape((GHOST_TUns8*)bitmap, (GHOST_TUns8*) 
mask, 16, 16, hotX, hotY, 0, 1);
 }
-
-#pragma mark Old carbon stuff to remove
-
-#if 0
-void GHOST_WindowCocoa::setMac_windowState(short value)
-{
-       mac_windowState = value;
-}
-
-short GHOST_WindowCocoa::getMac_windowState()
-{
-       return mac_windowState;
-}
-
-void GHOST_WindowCocoa::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_WindowCocoa::mac2gen(const Str255 in, STR_String& out) const
-{
-       char tmp[256];
-       ::memcpy(tmp, in+1, in[0]);
-       tmp[in[0]] = '\0';
-       out = tmp;
-}
-
-#endif
\ No newline at end of file


_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to