Add wxGraphicsContext::GetWindow()
This method allows to retrieve the window this context is associated with, if any. Add "wxWindow*" argument to wxGraphicsContext ctor and provide the window pointer to it when available, i.e. when creating the context from a wxWindow directly or from wxWindowDC, which is also associated with a window, in platform-specific code. No real changes yet.
This commit is contained in:
@@ -128,6 +128,7 @@ All (GUI):
|
||||
- Add wxGrid::SetCornerLabelValue() (Pavel Kalugin).
|
||||
- Add strikethrough support for fonts defined in XRC.
|
||||
- Add wxDisplay::GetPPI().
|
||||
- Add wxGraphicsContext::GetWindow().
|
||||
|
||||
wxGTK:
|
||||
|
||||
|
@@ -452,7 +452,7 @@ private:
|
||||
class WXDLLIMPEXP_CORE wxGraphicsContext : public wxGraphicsObject
|
||||
{
|
||||
public:
|
||||
wxGraphicsContext(wxGraphicsRenderer* renderer);
|
||||
wxGraphicsContext(wxGraphicsRenderer* renderer, wxWindow* window = NULL);
|
||||
|
||||
virtual ~wxGraphicsContext();
|
||||
|
||||
@@ -490,6 +490,9 @@ public:
|
||||
// create a context that can be used for measuring texts only, no drawing allowed
|
||||
static wxGraphicsContext * Create();
|
||||
|
||||
// Return the window this context is associated with, if any.
|
||||
wxWindow* GetWindow() const { return m_window; }
|
||||
|
||||
// begin a new document (relevant only for printing / pdf etc) if there is a progress dialog, message will be shown
|
||||
virtual bool StartDoc( const wxString& message );
|
||||
|
||||
@@ -788,6 +791,12 @@ protected:
|
||||
wxDouble angle,
|
||||
const wxGraphicsBrush& backgroundBrush);
|
||||
|
||||
private:
|
||||
// The associated window, if any, i.e. if one was passed directly to
|
||||
// Create() or the associated window of the wxDC this context was created
|
||||
// from.
|
||||
wxWindow* const m_window;
|
||||
|
||||
wxDECLARE_NO_COPY_CLASS(wxGraphicsContext);
|
||||
wxDECLARE_ABSTRACT_CLASS(wxGraphicsContext);
|
||||
};
|
||||
|
@@ -1095,6 +1095,19 @@ public:
|
||||
*/
|
||||
virtual void GetDPI( wxDouble* dpiX, wxDouble* dpiY);
|
||||
|
||||
/**
|
||||
Returns the associated window if any.
|
||||
|
||||
If this context was created using Create() overload taking wxWindow or
|
||||
wxWindowDC, this method returns the corresponding window. Otherwise
|
||||
returns @NULL.
|
||||
|
||||
@return A possibly @NULL window pointer.
|
||||
|
||||
@since 3.1.2
|
||||
*/
|
||||
wxWindow* GetWindow() const;
|
||||
|
||||
/** @}
|
||||
*/
|
||||
|
||||
|
@@ -565,12 +565,14 @@ void * wxGraphicsBitmap::GetNativeBitmap() const
|
||||
wxIMPLEMENT_ABSTRACT_CLASS(wxGraphicsContext, wxObject);
|
||||
|
||||
|
||||
wxGraphicsContext::wxGraphicsContext(wxGraphicsRenderer* renderer) :
|
||||
wxGraphicsObject(renderer),
|
||||
wxGraphicsContext::wxGraphicsContext(wxGraphicsRenderer* renderer,
|
||||
wxWindow* window)
|
||||
: wxGraphicsObject(renderer),
|
||||
m_antialias(wxANTIALIAS_DEFAULT),
|
||||
m_composition(wxCOMPOSITION_OVER),
|
||||
m_interpolation(wxINTERPOLATION_DEFAULT),
|
||||
m_enableOffset(false)
|
||||
m_enableOffset(false),
|
||||
m_window(window)
|
||||
{
|
||||
}
|
||||
|
||||
|
@@ -1830,7 +1830,7 @@ wxCairoContext::wxCairoContext( wxGraphicsRenderer* renderer, const wxPrinterDC&
|
||||
#endif
|
||||
|
||||
wxCairoContext::wxCairoContext( wxGraphicsRenderer* renderer, const wxWindowDC& dc )
|
||||
: wxGraphicsContext(renderer)
|
||||
: wxGraphicsContext(renderer, dc.GetWindow())
|
||||
{
|
||||
int width, height;
|
||||
dc.GetSize( &width, &height );
|
||||
@@ -2244,7 +2244,7 @@ wxCairoContext::wxCairoContext( wxGraphicsRenderer* renderer, cairo_t *context )
|
||||
}
|
||||
|
||||
wxCairoContext::wxCairoContext( wxGraphicsRenderer* renderer, wxWindow *window)
|
||||
: wxGraphicsContext(renderer)
|
||||
: wxGraphicsContext(renderer, window)
|
||||
#ifdef __WXMSW__
|
||||
, m_mswWindowHDC(GetHwndOf(window))
|
||||
#endif
|
||||
|
@@ -358,7 +358,7 @@ class wxGDIPlusContext : public wxGraphicsContext
|
||||
public:
|
||||
wxGDIPlusContext( wxGraphicsRenderer* renderer, const wxDC& dc );
|
||||
wxGDIPlusContext( wxGraphicsRenderer* renderer, HDC hdc, wxDouble width, wxDouble height );
|
||||
wxGDIPlusContext( wxGraphicsRenderer* renderer, HWND hwnd );
|
||||
wxGDIPlusContext( wxGraphicsRenderer* renderer, HWND hwnd, wxWindow* window = NULL);
|
||||
wxGDIPlusContext( wxGraphicsRenderer* renderer, Graphics* gr);
|
||||
wxGDIPlusContext(wxGraphicsRenderer* renderer);
|
||||
|
||||
@@ -1647,7 +1647,7 @@ wxGDIPlusContext::wxGDIPlusContext( wxGraphicsRenderer* renderer, HDC hdc, wxDou
|
||||
}
|
||||
|
||||
wxGDIPlusContext::wxGDIPlusContext( wxGraphicsRenderer* renderer, const wxDC& dc )
|
||||
: wxGraphicsContext(renderer)
|
||||
: wxGraphicsContext(renderer, dc.GetWindow())
|
||||
{
|
||||
wxMSWDCImpl *msw = wxDynamicCast( dc.GetImpl() , wxMSWDCImpl );
|
||||
HDC hdc = (HDC) msw->GetHDC();
|
||||
@@ -1656,8 +1656,10 @@ wxGDIPlusContext::wxGDIPlusContext( wxGraphicsRenderer* renderer, const wxDC& dc
|
||||
Init(new Graphics(hdc), sz.x, sz.y);
|
||||
}
|
||||
|
||||
wxGDIPlusContext::wxGDIPlusContext( wxGraphicsRenderer* renderer, HWND hwnd )
|
||||
: wxGraphicsContext(renderer)
|
||||
wxGDIPlusContext::wxGDIPlusContext( wxGraphicsRenderer* renderer,
|
||||
HWND hwnd,
|
||||
wxWindow* window )
|
||||
: wxGraphicsContext(renderer, window)
|
||||
{
|
||||
RECT rect = wxGetWindowRect(hwnd);
|
||||
Init(new Graphics(hwnd), rect.right - rect.left, rect.bottom - rect.top);
|
||||
@@ -2492,7 +2494,7 @@ wxGraphicsContext * wxGDIPlusRenderer::CreateContextFromNativeHDC(WXHDC dc)
|
||||
wxGraphicsContext * wxGDIPlusRenderer::CreateContext( wxWindow* window )
|
||||
{
|
||||
ENSURE_LOADED_OR_RETURN(NULL);
|
||||
return new wxGDIPlusContext(this, (HWND) window->GetHWND() );
|
||||
return new wxGDIPlusContext(this, (HWND) window->GetHWND(), window );
|
||||
}
|
||||
|
||||
// Path
|
||||
|
@@ -3400,9 +3400,19 @@ public:
|
||||
class wxD2DContext : public wxGraphicsContext, wxD2DResourceManager
|
||||
{
|
||||
public:
|
||||
wxD2DContext(wxGraphicsRenderer* renderer, ID2D1Factory* direct2dFactory, HWND hwnd);
|
||||
// Create the context for the given HWND, which may be associated (if it's
|
||||
// non-null) with the given wxWindow.
|
||||
wxD2DContext(wxGraphicsRenderer* renderer,
|
||||
ID2D1Factory* direct2dFactory,
|
||||
HWND hwnd,
|
||||
wxWindow* window = NULL);
|
||||
|
||||
wxD2DContext(wxGraphicsRenderer* renderer, ID2D1Factory* direct2dFactory, HDC hdc, const wxSize& dcSize,
|
||||
// Create the context for the given HDC which may be associated (if it's
|
||||
// non-null) with the given wxDC.
|
||||
wxD2DContext(wxGraphicsRenderer* renderer,
|
||||
ID2D1Factory* direct2dFactory,
|
||||
HDC hdc,
|
||||
const wxDC* dc = NULL,
|
||||
D2D1_ALPHA_MODE alphaMode = D2D1_ALPHA_MODE_IGNORE);
|
||||
|
||||
#if wxUSE_IMAGE
|
||||
@@ -3550,8 +3560,11 @@ private:
|
||||
// wxD2DContext implementation
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
wxD2DContext::wxD2DContext(wxGraphicsRenderer* renderer, ID2D1Factory* direct2dFactory, HWND hwnd) :
|
||||
wxGraphicsContext(renderer), m_direct2dFactory(direct2dFactory),
|
||||
wxD2DContext::wxD2DContext(wxGraphicsRenderer* renderer,
|
||||
ID2D1Factory* direct2dFactory,
|
||||
HWND hwnd,
|
||||
wxWindow* window) :
|
||||
wxGraphicsContext(renderer, window), m_direct2dFactory(direct2dFactory),
|
||||
#if wxD2D_DEVICE_CONTEXT_SUPPORTED
|
||||
m_renderTargetHolder(new wxD2DDeviceContextResourceHolder(direct2dFactory, hwnd))
|
||||
#else
|
||||
@@ -3564,13 +3577,21 @@ wxD2DContext::wxD2DContext(wxGraphicsRenderer* renderer, ID2D1Factory* direct2dF
|
||||
Init();
|
||||
}
|
||||
|
||||
wxD2DContext::wxD2DContext(wxGraphicsRenderer* renderer, ID2D1Factory* direct2dFactory, HDC hdc,
|
||||
const wxSize& dcSize, D2D1_ALPHA_MODE alphaMode) :
|
||||
wxGraphicsContext(renderer), m_direct2dFactory(direct2dFactory),
|
||||
wxD2DContext::wxD2DContext(wxGraphicsRenderer* renderer,
|
||||
ID2D1Factory* direct2dFactory,
|
||||
HDC hdc,
|
||||
const wxDC* dc,
|
||||
D2D1_ALPHA_MODE alphaMode) :
|
||||
wxGraphicsContext(renderer, dc->GetWindow()), m_direct2dFactory(direct2dFactory),
|
||||
m_renderTargetHolder(new wxD2DDCRenderTargetResourceHolder(direct2dFactory, hdc, alphaMode))
|
||||
{
|
||||
m_width = dcSize.GetWidth();
|
||||
m_height = dcSize.GetHeight();
|
||||
if ( dc )
|
||||
{
|
||||
const wxSize dcSize = dc->GetSize();
|
||||
m_width = dcSize.GetWidth();
|
||||
m_height = dcSize.GetHeight();
|
||||
}
|
||||
|
||||
Init();
|
||||
}
|
||||
|
||||
@@ -4531,7 +4552,7 @@ wxD2DRenderer::~wxD2DRenderer()
|
||||
|
||||
wxGraphicsContext* wxD2DRenderer::CreateContext(const wxWindowDC& dc)
|
||||
{
|
||||
return new wxD2DContext(this, m_direct2dFactory, dc.GetHDC(), dc.GetSize());
|
||||
return new wxD2DContext(this, m_direct2dFactory, dc.GetHDC(), &dc);
|
||||
}
|
||||
|
||||
wxGraphicsContext* wxD2DRenderer::CreateContext(const wxMemoryDC& dc)
|
||||
@@ -4539,7 +4560,7 @@ wxGraphicsContext* wxD2DRenderer::CreateContext(const wxMemoryDC& dc)
|
||||
wxBitmap bmp = dc.GetSelectedBitmap();
|
||||
wxASSERT_MSG( bmp.IsOk(), wxS("Should select a bitmap before creating wxGraphicsContext") );
|
||||
|
||||
return new wxD2DContext(this, m_direct2dFactory, dc.GetHDC(), dc.GetSize(),
|
||||
return new wxD2DContext(this, m_direct2dFactory, dc.GetHDC(), &dc,
|
||||
bmp.HasAlpha() ? D2D1_ALPHA_MODE_PREMULTIPLIED : D2D1_ALPHA_MODE_IGNORE);
|
||||
}
|
||||
|
||||
@@ -4571,12 +4592,12 @@ wxGraphicsContext* wxD2DRenderer::CreateContextFromNativeWindow(void* window)
|
||||
|
||||
wxGraphicsContext* wxD2DRenderer::CreateContextFromNativeHDC(WXHDC dc)
|
||||
{
|
||||
return new wxD2DContext(this, m_direct2dFactory, (HDC)dc, wxSize(0, 0));
|
||||
return new wxD2DContext(this, m_direct2dFactory, (HDC)dc);
|
||||
}
|
||||
|
||||
wxGraphicsContext* wxD2DRenderer::CreateContext(wxWindow* window)
|
||||
{
|
||||
return new wxD2DContext(this, m_direct2dFactory, (HWND)window->GetHWND());
|
||||
return new wxD2DContext(this, m_direct2dFactory, (HWND)window->GetHWND(), window);
|
||||
}
|
||||
|
||||
#if wxUSE_IMAGE
|
||||
|
@@ -1303,7 +1303,11 @@ bool wxMacCoreGraphicsPathData::Contains( wxDouble x, wxDouble y, wxPolygonFillM
|
||||
class WXDLLEXPORT wxMacCoreGraphicsContext : public wxGraphicsContext
|
||||
{
|
||||
public:
|
||||
wxMacCoreGraphicsContext( wxGraphicsRenderer* renderer, CGContextRef cgcontext, wxDouble width = 0, wxDouble height = 0 );
|
||||
wxMacCoreGraphicsContext( wxGraphicsRenderer* renderer,
|
||||
CGContextRef cgcontext,
|
||||
wxDouble width = 0,
|
||||
wxDouble height = 0,
|
||||
wxWindow* window = NULL );
|
||||
|
||||
wxMacCoreGraphicsContext( wxGraphicsRenderer* renderer, wxWindow* window );
|
||||
|
||||
@@ -1509,7 +1513,12 @@ void wxMacCoreGraphicsContext::Init()
|
||||
m_interpolation = wxINTERPOLATION_DEFAULT;
|
||||
}
|
||||
|
||||
wxMacCoreGraphicsContext::wxMacCoreGraphicsContext( wxGraphicsRenderer* renderer, CGContextRef cgcontext, wxDouble width, wxDouble height ) : wxGraphicsContext(renderer)
|
||||
wxMacCoreGraphicsContext::wxMacCoreGraphicsContext( wxGraphicsRenderer* renderer,
|
||||
CGContextRef cgcontext,
|
||||
wxDouble width,
|
||||
wxDouble height,
|
||||
wxWindow* window )
|
||||
: wxGraphicsContext(renderer, window)
|
||||
{
|
||||
Init();
|
||||
SetNativeContext(cgcontext);
|
||||
@@ -1518,7 +1527,9 @@ wxMacCoreGraphicsContext::wxMacCoreGraphicsContext( wxGraphicsRenderer* renderer
|
||||
m_initTransform = m_cgContext ? CGContextGetCTM(m_cgContext) : CGAffineTransformIdentity;
|
||||
}
|
||||
|
||||
wxMacCoreGraphicsContext::wxMacCoreGraphicsContext( wxGraphicsRenderer* renderer, wxWindow* window ): wxGraphicsContext(renderer)
|
||||
wxMacCoreGraphicsContext::wxMacCoreGraphicsContext( wxGraphicsRenderer* renderer,
|
||||
wxWindow* window )
|
||||
: wxGraphicsContext(renderer, window)
|
||||
{
|
||||
Init();
|
||||
|
||||
@@ -2694,26 +2705,18 @@ wxGraphicsRenderer* wxGraphicsRenderer::GetDefaultRenderer()
|
||||
|
||||
wxGraphicsContext * wxMacCoreGraphicsRenderer::CreateContext( const wxWindowDC& dc )
|
||||
{
|
||||
const wxDCImpl* impl = dc.GetImpl();
|
||||
wxWindowDCImpl *win_impl = wxDynamicCast( impl, wxWindowDCImpl );
|
||||
if (win_impl)
|
||||
{
|
||||
int w, h;
|
||||
win_impl->GetSize( &w, &h );
|
||||
CGContextRef cgctx = 0;
|
||||
wxWindow* const win = dc.GetWindow();
|
||||
wxCHECK_MSG( win, NULL, "Invalid wxWindowDC" );
|
||||
|
||||
wxASSERT_MSG(win_impl->GetWindow(), "Invalid wxWindow in wxMacCoreGraphicsRenderer::CreateContext");
|
||||
if (win_impl->GetWindow())
|
||||
cgctx = (CGContextRef)(win_impl->GetWindow()->MacGetCGContextRef());
|
||||
const wxSize sz = win->GetSize();
|
||||
|
||||
// having a cgctx being NULL is fine (will be created on demand)
|
||||
// this is the case for all wxWindowDCs except wxPaintDC
|
||||
wxMacCoreGraphicsContext *context =
|
||||
new wxMacCoreGraphicsContext( this, cgctx, (wxDouble) w, (wxDouble) h );
|
||||
context->EnableOffset(dc.GetContentScaleFactor() < 2);
|
||||
return context;
|
||||
}
|
||||
return NULL;
|
||||
// having a cgctx being NULL is fine (will be created on demand)
|
||||
// this is the case for all wxWindowDCs except wxPaintDC
|
||||
CGContextRef cgctx = (CGContextRef)(win->MacGetCGContextRef());
|
||||
wxMacCoreGraphicsContext *context =
|
||||
new wxMacCoreGraphicsContext( this, cgctx, sz.x, sz.y, win );
|
||||
context->EnableOffset(dc.GetContentScaleFactor() < 2);
|
||||
return context;
|
||||
}
|
||||
|
||||
wxGraphicsContext * wxMacCoreGraphicsRenderer::CreateContext( const wxMemoryDC& dc )
|
||||
|
Reference in New Issue
Block a user