X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/1011fbebdba72e821a901a43d15fc2955b14101f..60ee01727442e8b364825cd965a3e06c21f07833:/src/msw/graphics.cpp?ds=sidebyside diff --git a/src/msw/graphics.cpp b/src/msw/graphics.cpp index 7ffc36e55c..e794e83348 100644 --- a/src/msw/graphics.cpp +++ b/src/msw/graphics.cpp @@ -279,7 +279,7 @@ private : class wxGDIPlusContext : public wxGraphicsContext { public: - wxGDIPlusContext( wxGraphicsRenderer* renderer, HDC hdc ); + wxGDIPlusContext( wxGraphicsRenderer* renderer, HDC hdc , wxDouble width, wxDouble height ); wxGDIPlusContext( wxGraphicsRenderer* renderer, HWND hwnd ); wxGDIPlusContext( wxGraphicsRenderer* renderer, Graphics* gr); wxGDIPlusContext(); @@ -328,6 +328,7 @@ public: wxDouble *descent, wxDouble *externalLeading ) const; virtual void GetPartialTextExtents(const wxString& text, wxArrayDouble& widths) const; virtual bool ShouldOffset() const; + virtual void GetSize( wxDouble* width, wxDouble *height ); private: void Init(); @@ -338,13 +339,16 @@ private: GraphicsState m_state1; GraphicsState m_state2; + wxDouble m_width; + wxDouble m_height; + DECLARE_DYNAMIC_CLASS_NO_COPY(wxGDIPlusContext) }; class WXDLLIMPEXP_CORE wxGDIPlusMeasuringContext : public wxGDIPlusContext { public: - wxGDIPlusMeasuringContext( wxGraphicsRenderer* renderer ) : wxGDIPlusContext( renderer , m_hdc = GetDC(NULL) ) + wxGDIPlusMeasuringContext( wxGraphicsRenderer* renderer ) : wxGDIPlusContext( renderer , m_hdc = GetDC(NULL), 1000, 1000 ) { } wxGDIPlusMeasuringContext() @@ -1021,11 +1025,13 @@ public : bool m_offset; } ; -wxGDIPlusContext::wxGDIPlusContext( wxGraphicsRenderer* renderer, HDC hdc ) +wxGDIPlusContext::wxGDIPlusContext( wxGraphicsRenderer* renderer, HDC hdc, wxDouble width, wxDouble height ) : wxGraphicsContext(renderer) { Init(); m_context = new Graphics( hdc); + m_width = width; + m_height = height; SetDefaults(); } @@ -1034,6 +1040,9 @@ wxGDIPlusContext::wxGDIPlusContext( wxGraphicsRenderer* renderer, HWND hwnd ) { Init(); m_context = new Graphics( hwnd); + RECT rect = wxGetWindowRect(hwnd); + m_width = rect.right - rect.left; + m_height = rect.bottom - rect.top; SetDefaults(); } @@ -1055,6 +1064,8 @@ void wxGDIPlusContext::Init() m_context = NULL; m_state1 = 0; m_state2= 0; + m_height = 0; + m_width = 0; } void wxGDIPlusContext::SetDefaults() @@ -1389,6 +1400,12 @@ wxGraphicsMatrix wxGDIPlusContext::GetTransform() const m_context->GetTransform((Matrix*) matrix.GetNativeMatrix()); return matrix; } + +void wxGDIPlusContext::GetSize( wxDouble* width, wxDouble *height ) +{ + *width = m_width; + *height = m_height; +} //----------------------------------------------------------------------------- // wxGDIPlusRenderer declaration //----------------------------------------------------------------------------- @@ -1534,21 +1551,24 @@ wxGraphicsContext * wxGDIPlusRenderer::CreateContext( const wxWindowDC& dc) { ENSURE_LOADED_OR_RETURN(NULL); wxMSWDCImpl *msw = wxDynamicCast( dc.GetImpl() , wxMSWDCImpl ); - return new wxGDIPlusContext(this,(HDC) msw->GetHDC()); + wxSize sz = dc.GetSize(); + return new wxGDIPlusContext(this,(HDC) msw->GetHDC(), sz.x, sz.y); } wxGraphicsContext * wxGDIPlusRenderer::CreateContext( const wxPrinterDC& dc) { ENSURE_LOADED_OR_RETURN(NULL); wxMSWDCImpl *msw = wxDynamicCast( dc.GetImpl() , wxMSWDCImpl ); - return new wxGDIPlusContext(this,(HDC) msw->GetHDC()); + wxSize sz = dc.GetSize(); + return new wxGDIPlusContext(this,(HDC) msw->GetHDC(), sz.x, sz.y); } wxGraphicsContext * wxGDIPlusRenderer::CreateContext( const wxMemoryDC& dc) { ENSURE_LOADED_OR_RETURN(NULL); wxMSWDCImpl *msw = wxDynamicCast( dc.GetImpl() , wxMSWDCImpl ); - return new wxGDIPlusContext(this,(HDC) msw->GetHDC()); + wxSize sz = dc.GetSize(); + return new wxGDIPlusContext(this,(HDC) msw->GetHDC(), sz.x, sz.y); } wxGraphicsContext * wxGDIPlusRenderer::CreateMeasuringContext()