]> git.saurik.com Git - wxWidgets.git/commitdiff
Enable access to the native bitmap object wrapped by wxGraphicsBitmap
authorRobin Dunn <robin@alldunn.com>
Fri, 11 May 2012 22:06:50 +0000 (22:06 +0000)
committerRobin Dunn <robin@alldunn.com>
Fri, 11 May 2012 22:06:50 +0000 (22:06 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@71416 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/graphics.h
include/wx/private/graphics.h
interface/wx/graphics.h
src/common/graphcmn.cpp
src/generic/graphicc.cpp
src/msw/graphics.cpp
src/osx/carbon/graphics.cpp

index ad0206e2d30fd6129924078f65ee960a29b48ae2..0e534a6e61ebaf603c0c084cb30fc9efb3f3a238 100644 (file)
@@ -107,6 +107,7 @@ class WXDLLIMPEXP_FWD_CORE wxGraphicsBitmap;
 //
 
 class WXDLLIMPEXP_FWD_CORE wxGraphicsObjectRefData;
+class WXDLLIMPEXP_FWD_CORE wxGraphicsBitmapData;
 class WXDLLIMPEXP_FWD_CORE wxGraphicsMatrixData;
 class WXDLLIMPEXP_FWD_CORE wxGraphicsPathData;
 
@@ -174,6 +175,13 @@ public:
 #if wxUSE_IMAGE
     wxImage ConvertToImage() const;
 #endif // wxUSE_IMAGE
+    
+    void* GetNativeBitmap() const;
+
+    const wxGraphicsBitmapData* GetBitmapData() const
+    { return (const wxGraphicsBitmapData*) GetRefData(); }
+    wxGraphicsBitmapData* GetBitmapData()
+    { return (wxGraphicsBitmapData*) GetRefData(); }
 
 private:
     DECLARE_DYNAMIC_CLASS(wxGraphicsBitmap)
index 8fb65d019705f0b1af5f4b5e18113efae6d3e091..4fbab116534bbac25595e9370c3c18af1a367ba8 100644 (file)
@@ -28,6 +28,18 @@ class WXDLLIMPEXP_CORE wxGraphicsObjectRefData : public wxObjectRefData
     wxGraphicsRenderer* m_renderer;
 } ;
 
+class WXDLLIMPEXP_CORE wxGraphicsBitmapData : public wxGraphicsObjectRefData
+{
+public :
+    wxGraphicsBitmapData( wxGraphicsRenderer* renderer) :
+       wxGraphicsObjectRefData(renderer) {}
+
+       virtual ~wxGraphicsBitmapData() {}
+
+       // returns the native representation
+       virtual void * GetNativeBitmap() const = 0;
+} ;
+
 class WXDLLIMPEXP_CORE wxGraphicsMatrixData : public wxGraphicsObjectRefData
 {
 public :
index 912763c38f60507cf54ca32ddf7cec7caf0965aa..630662f47a30062da976248fc55ed30ebab17299 100644 (file)
@@ -296,6 +296,14 @@ public:
         @since 2.9.3
      */
     wxImage ConvertToImage() const;
+
+    /**
+        Return the pointer to the native bitmap data. (CGImageRef for Core Graphics, 
+        cairo_surface_t for Cairo, Bitmap* for GDI+.)
+
+        @since 2.9.4
+     */
+    void* GetNativeBitmap() const;
 };
 
 /**
index 33009406c435f68ba9edb0071aa210b419431585..9a75c2bf7167ca202accd9ace860a9c5a5915e95 100644 (file)
@@ -524,6 +524,11 @@ void wxGraphicsGradientStops::Add(const wxGraphicsGradientStop& stop)
     }
 }
 
+void * wxGraphicsBitmap::GetNativeBitmap() const
+{
+    return GetBitmapData()->GetNativeBitmap();
+}
+
 //-----------------------------------------------------------------------------
 // wxGraphicsContext Convenience Methods
 //-----------------------------------------------------------------------------
index 534238a96e380a5dff3b15cdb08007439b4e5ac7..04bb3432bfe287cd941c03aa18b6e1bb96bbdfaf 100644 (file)
@@ -323,7 +323,7 @@ private :
     cairo_font_weight_t m_weight;
 };
 
-class wxCairoBitmapData : public wxGraphicsObjectRefData
+class wxCairoBitmapData : public wxGraphicsBitmapData
 {
 public:
     wxCairoBitmapData( wxGraphicsRenderer* renderer, const wxBitmap& bmp );
@@ -335,6 +335,7 @@ public:
 
     virtual cairo_surface_t* GetCairoSurface() { return m_surface; }
     virtual cairo_pattern_t* GetCairoPattern() { return m_pattern; }
+    void* GetNativeBitmap() const { return (void*)m_surface; }
     virtual wxSize GetSize() { return wxSize(m_width, m_height); }
 
 #if wxUSE_IMAGE
@@ -1248,13 +1249,13 @@ void wxCairoBitmapData::InitSurface(cairo_format_t format, int stride)
 }
 
 wxCairoBitmapData::wxCairoBitmapData( wxGraphicsRenderer* renderer, cairo_surface_t* bitmap ) :
-    wxGraphicsObjectRefData( renderer )
+    wxGraphicsBitmapData( renderer )
 {
     m_surface = bitmap;
     m_pattern = cairo_pattern_create_for_surface(m_surface);
 }
 
-wxCairoBitmapData::wxCairoBitmapData( wxGraphicsRenderer* renderer, const wxBitmap& bmp ) : wxGraphicsObjectRefData( renderer )
+wxCairoBitmapData::wxCairoBitmapData( wxGraphicsRenderer* renderer, const wxBitmap& bmp ) : wxGraphicsBitmapData( renderer )
 {
     wxCHECK_RET( bmp.IsOk(), wxT("Invalid bitmap in wxCairoContext::DrawBitmap"));
 
@@ -1394,7 +1395,7 @@ inline unsigned char Unpremultiply(unsigned char alpha, unsigned char data)
 
 wxCairoBitmapData::wxCairoBitmapData(wxGraphicsRenderer* renderer,
                                      const wxImage& image)
-    : wxGraphicsObjectRefData(renderer)
+    : wxGraphicsBitmapData(renderer)
 {
     const cairo_format_t bufferFormat = image.HasAlpha()
                                             ? CAIRO_FORMAT_ARGB32
index cad53a46d03398008e35cbb3884fa68da992dfa6..dd6ff85899c3a16999d7db2d8736ebc19d992351 100644 (file)
@@ -272,7 +272,7 @@ private:
     GraphicsPath* m_brushPath;
 };
 
-class WXDLLIMPEXP_CORE wxGDIPlusBitmapData : public wxGraphicsObjectRefData
+class WXDLLIMPEXP_CORE wxGDIPlusBitmapData : public wxGraphicsBitmapData
 {
 public:
     wxGDIPlusBitmapData( wxGraphicsRenderer* renderer, Bitmap* bitmap );
@@ -280,6 +280,7 @@ public:
     ~wxGDIPlusBitmapData ();
 
     virtual Bitmap* GetGDIPlusBitmap() { return m_bitmap; }
+    void* GetNativeBitmap() const { return (void*)m_bitmap; }
 
 #if wxUSE_IMAGE
     wxImage ConvertToImage() const;
@@ -943,13 +944,13 @@ wxGDIPlusFontData::~wxGDIPlusFontData()
 //-----------------------------------------------------------------------------
 
 wxGDIPlusBitmapData::wxGDIPlusBitmapData( wxGraphicsRenderer* renderer, Bitmap* bitmap ) :
-    wxGraphicsObjectRefData( renderer ), m_bitmap( bitmap )
+    wxGraphicsBitmapData( renderer ), m_bitmap( bitmap )
 {
     m_helper = NULL;
 }
 
 wxGDIPlusBitmapData::wxGDIPlusBitmapData( wxGraphicsRenderer* renderer,
-                        const wxBitmap &bmp) : wxGraphicsObjectRefData( renderer )
+                        const wxBitmap &bmp) : wxGraphicsBitmapData( renderer )
 {
     m_bitmap = NULL;
     m_helper = NULL;
index afaec66fa4165ef791b73a499b49ba3244d51b1f..59350b04ddbe808d2c60881803865b02927030fc 100644 (file)
@@ -969,13 +969,14 @@ wxMacCoreGraphicsFontData::~wxMacCoreGraphicsFontData()
 #endif
 }
 
-class wxMacCoreGraphicsBitmapData : public wxGraphicsObjectRefData
+class wxMacCoreGraphicsBitmapData : public wxGraphicsBitmapData
 {
 public:
     wxMacCoreGraphicsBitmapData( wxGraphicsRenderer* renderer, CGImageRef bitmap, bool monochrome );
     ~wxMacCoreGraphicsBitmapData();
 
     virtual CGImageRef GetBitmap() { return m_bitmap; }
+    void* GetNativeBitmap() const { return (void*)m_bitmap; }
     bool IsMonochrome() { return m_monochrome; }
 
 #if wxUSE_IMAGE
@@ -990,7 +991,7 @@ private :
     bool m_monochrome;
 };
 
-wxMacCoreGraphicsBitmapData::wxMacCoreGraphicsBitmapData( wxGraphicsRenderer* renderer, CGImageRef bitmap, bool monochrome ) : wxGraphicsObjectRefData( renderer ),
+wxMacCoreGraphicsBitmapData::wxMacCoreGraphicsBitmapData( wxGraphicsRenderer* renderer, CGImageRef bitmap, bool monochrome ) : wxGraphicsBitmapData( renderer ),
     m_bitmap(bitmap), m_monochrome(monochrome)
 {
 }
@@ -2245,7 +2246,7 @@ void wxMacCoreGraphicsContext::DrawBitmap( const wxGraphicsBitmap &bmp, wxDouble
         return;
 
 #ifdef __WXMAC__
-    wxMacCoreGraphicsBitmapData* refdata  =static_cast<wxMacCoreGraphicsBitmapData*>(bmp.GetRefData());
+    wxMacCoreGraphicsBitmapData* refdata static_cast<wxMacCoreGraphicsBitmapData*>(bmp.GetRefData());
     CGImageRef image = refdata->GetBitmap();
     CGRect r = CGRectMake( (CGFloat) x , (CGFloat) y , (CGFloat) w , (CGFloat) h );
     if ( refdata->IsMonochrome() == 1 )