]> git.saurik.com Git - wxWidgets.git/commitdiff
wxCocoa: Added preliminary Blit support
authorDavid Elliott <dfe@tgwbd.org>
Tue, 22 Jul 2003 17:40:52 +0000 (17:40 +0000)
committerDavid Elliott <dfe@tgwbd.org>
Tue, 22 Jul 2003 17:40:52 +0000 (17:40 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@22241 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/cocoa/dc.h
include/wx/cocoa/dcmemory.h
src/cocoa/dc.mm
src/cocoa/dcmemory.mm

index dd4b3fdbe57ff0553fbdb9ca21bca83baf8112fa..f7f46012ceb74604e437944768ff895aabbcb11a 100644 (file)
@@ -56,6 +56,10 @@ protected:
     void CocoaApplyTransformations();
     float m_cocoaHeight;
     bool m_cocoaFlipped;
     void CocoaApplyTransformations();
     float m_cocoaHeight;
     bool m_cocoaFlipped;
+// Blitting
+    virtual bool CocoaDoBlitOnFocusedDC(wxCoord xdest, wxCoord ydest,
+        wxCoord width, wxCoord height, wxCoord xsrc, wxCoord ysrc,
+        int logicalFunc, bool useMask, wxCoord xsrcMask, wxCoord ysrcMask);
 //-------------------------------------------------------------------------
 // Implementation
 //-------------------------------------------------------------------------
 //-------------------------------------------------------------------------
 // Implementation
 //-------------------------------------------------------------------------
index d6ca56d8643c3986ca2083e6d186c976475eb20f..a81f980166733e5fa9eac7fa67167c4f1243ed15 100644 (file)
@@ -29,6 +29,10 @@ protected:
 // DC stack
     virtual bool CocoaLockFocus();
     virtual bool CocoaUnlockFocus();
 // DC stack
     virtual bool CocoaLockFocus();
     virtual bool CocoaUnlockFocus();
+// Blitting
+    virtual bool CocoaDoBlitOnFocusedDC(wxCoord xdest, wxCoord ydest,
+        wxCoord width, wxCoord height, wxCoord xsrc, wxCoord ysrc,
+        int logicalFunc, bool useMask, wxCoord xsrcMask, wxCoord ysrcMask);
 };
 
 #endif // __WX_COCOA_DCMEMORY_H__
 };
 
 #endif // __WX_COCOA_DCMEMORY_H__
index 2d230c92b34fa3e54def77019c85bae12305d6ad..6d887caf95367e6c00ed4963c6c37400ecc79946 100644 (file)
@@ -447,6 +447,16 @@ void wxDC::DoCrossHair(wxCoord x, wxCoord y)
 
 
 bool wxDC::DoBlit(wxCoord xdest, wxCoord ydest, wxCoord width, wxCoord height, wxDC *source, wxCoord xsrc, wxCoord ysrc, int rop, bool useMask , wxCoord xsrcMask, wxCoord ysrcMask)
 
 
 bool wxDC::DoBlit(wxCoord xdest, wxCoord ydest, wxCoord width, wxCoord height, wxDC *source, wxCoord xsrc, wxCoord ysrc, int rop, bool useMask , wxCoord xsrcMask, wxCoord ysrcMask)
+{
+    if(!CocoaTakeFocus()) return false;
+    if(!source) return false;
+    return source->CocoaDoBlitOnFocusedDC(xdest,ydest,width,height,
+        xsrc, ysrc, rop, useMask, xsrcMask, ysrcMask);
+}
+
+bool wxDC::CocoaDoBlitOnFocusedDC(wxCoord xdest, wxCoord ydest,
+    wxCoord width, wxCoord height, wxCoord xsrc, wxCoord ysrc,
+    int logicalFunc, bool useMask, wxCoord xsrcMask, wxCoord ysrcMask)
 {
     return false;
 }
 {
     return false;
 }
index e097fea9a56e1fdb35a08ecd01b4bd6a758073e3..02efda166f9bf671a621eeb1acd3cca930a61847 100644 (file)
 /////////////////////////////////////////////////////////////////////////////
 
 #include "wx/dcmemory.h"
 /////////////////////////////////////////////////////////////////////////////
 
 #include "wx/dcmemory.h"
+#include "wx/log.h"
 
 #import <AppKit/NSImage.h>
 
 #import <AppKit/NSImage.h>
+#import <AppKit/NSAffineTransform.h>
+#import <AppKit/NSGraphicsContext.h>
 
 //-----------------------------------------------------------------------------
 // wxMemoryDC
 
 //-----------------------------------------------------------------------------
 // wxMemoryDC
@@ -77,3 +80,41 @@ void wxMemoryDC::DoGetSize( int *width, int *height ) const
         *height = m_selectedBitmap.GetHeight();
 }
 
         *height = m_selectedBitmap.GetHeight();
 }
 
+bool wxMemoryDC::CocoaDoBlitOnFocusedDC(wxCoord xdest, wxCoord ydest,
+    wxCoord width, wxCoord height, wxCoord xsrc, wxCoord ysrc,
+    int logicalFunc, bool useMask, wxCoord xsrcMask, wxCoord ysrcMask)
+{
+    if(!m_selectedBitmap.Ok())
+        return false;
+
+    NSAffineTransform *transform = [NSAffineTransform transform];
+    [transform translateXBy:xdest yBy:ydest];
+
+    NSAffineTransform *flipTransform = [NSAffineTransform transform];
+    /*  x' = 1x + 0y + 0
+        y' = 0x + -1y + window's height
+    */
+    NSAffineTransformStruct matrix = {
+        1,  0
+    ,   0, -1
+    ,   0, height
+    };
+    [flipTransform setTransformStruct: matrix];
+
+    NSGraphicsContext *context = [NSGraphicsContext currentContext];
+    [context saveGraphicsState];
+    [transform concat];
+    [flipTransform concat];
+
+    wxLogDebug("[m_cocoaNSImage isFlipped]=%d", [m_cocoaNSImage isFlipped]);
+    [m_cocoaNSImage drawAtPoint: NSMakePoint(0,0)
+        fromRect: NSMakeRect(xsrc,
+            m_selectedBitmap.GetHeight()-height-ysrc,
+            width, height)
+        operation: NSCompositeCopy // FIXME: raster ops
+        fraction: 1.0];
+        
+    [context restoreGraphicsState];
+    return false;
+}
+