From: Robin Dunn Date: Sat, 28 Jul 2012 19:31:03 +0000 (+0000) Subject: Adding wxDC::GetHandle for wxOSX-cocoa and wxOSX-carbon X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/9eefb5c14a2ca47fd6042f0c41ce8efde6746b3d?ds=inline Adding wxDC::GetHandle for wxOSX-cocoa and wxOSX-carbon git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@72224 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/include/wx/dc.h b/include/wx/dc.h index b519785afa..9c6748a920 100644 --- a/include/wx/dc.h +++ b/include/wx/dc.h @@ -283,6 +283,8 @@ public: return NULL; } + virtual void* GetHandle() const = 0; + // query dimension, colour deps, resolution virtual void DoGetSize(int *width, int *height) const = 0; @@ -787,6 +789,9 @@ public: wxWindow *GetWindow() const { return m_pimpl->GetWindow(); } + void *GetHandle() const + { return m_pimpl->GetHandle(); } + bool IsOk() const { return m_pimpl && m_pimpl->IsOk(); } diff --git a/include/wx/dcgraph.h b/include/wx/dcgraph.h index 9f6c178fd3..d010b63ae4 100644 --- a/include/wx/dcgraph.h +++ b/include/wx/dcgraph.h @@ -109,6 +109,8 @@ public: wxGraphicsContext* GetGraphicsContext() const { return m_graphicContext; } virtual void SetGraphicsContext( wxGraphicsContext* ctx ); + virtual void* GetHandle() const; + // the true implementations virtual bool DoFloodFill(wxCoord x, wxCoord y, const wxColour& col, wxFloodFillStyle style = wxFLOOD_SURFACE); diff --git a/include/wx/dcmirror.h b/include/wx/dcmirror.h index 98858240b6..ee6d5c1b8a 100644 --- a/include/wx/dcmirror.h +++ b/include/wx/dcmirror.h @@ -66,6 +66,9 @@ public: virtual void SetLogicalFunction(wxRasterOperationMode function) { m_dc.SetLogicalFunction(function); } + virtual void* GetHandle() const + { return m_dc.GetHandle(); } + protected: // returns x and y if not mirroring or y and x if mirroring wxCoord GetX(wxCoord x, wxCoord y) const { return m_mirror ? y : x; } diff --git a/include/wx/dcsvg.h b/include/wx/dcsvg.h index cf492e7938..cae6308db4 100644 --- a/include/wx/dcsvg.h +++ b/include/wx/dcsvg.h @@ -96,6 +96,8 @@ public: virtual void SetFont(const wxFont& font); virtual void SetPen(const wxPen& pen); + virtual void* GetHandle() const { return NULL; } + private: virtual bool DoGetPixel(wxCoord, wxCoord, wxColour *) const { diff --git a/include/wx/generic/dcpsg.h b/include/wx/generic/dcpsg.h index afda6f2922..65e36cbce8 100644 --- a/include/wx/generic/dcpsg.h +++ b/include/wx/generic/dcpsg.h @@ -94,6 +94,8 @@ public: virtual int GetResolution() const; virtual wxRect GetPaperRect() const; + virtual void* GetHandle() const { return NULL; } + protected: bool DoFloodFill(wxCoord x1, wxCoord y1, const wxColour &col, wxFloodFillStyle style = wxFLOOD_SURFACE); diff --git a/interface/wx/dc.h b/interface/wx/dc.h index e8e54c4526..54b0053602 100644 --- a/interface/wx/dc.h +++ b/interface/wx/dc.h @@ -1535,6 +1535,22 @@ public: //@} + /** + Returns a value that can be used as a handle to the native drawing + context, if this wxDC has something that could be thought of in that + way. (Not all of them do.) + + For example, on Windows the return value is an HDC, on OSX it is a + CGContextRef and on wxGTK it will be a GdkDrawable. If the DC is a + wxGCDC then the return value will be the value returned from + wxGraphicsContext::GetNativeContext. A value of NULL is returned if + the DC does not have anything that fits the handle concept. + + @since 2.9.5 + */ + void* GetHandle() const; + + void SetLogicalScale(double x, double y); void GetLogicalScale(double *x, double *y) const; void SetLogicalOrigin(wxCoord x, wxCoord y); diff --git a/src/common/dcgraph.cpp b/src/common/dcgraph.cpp index 3b49dce031..5f79c36eb7 100644 --- a/src/common/dcgraph.cpp +++ b/src/common/dcgraph.cpp @@ -433,6 +433,16 @@ void wxGCDCImpl::ComputeScaleAndOrigin() } } +void* wxGCDCImpl::GetHandle() const +{ + void* cgctx = NULL; + wxGraphicsContext* gc = GetGraphicsContext(); + if (gc) { + cgctx = gc->GetNativeContext(); + } + return cgctx; +} + void wxGCDCImpl::SetPalette( const wxPalette& WXUNUSED(palette) ) {