implement wxDC::GetContentScaleFactor() for GTK3
This commit is contained in:
@@ -19,6 +19,7 @@ class wxGTKCairoDCImpl: public wxGCDCImpl
|
|||||||
public:
|
public:
|
||||||
wxGTKCairoDCImpl(wxDC* owner);
|
wxGTKCairoDCImpl(wxDC* owner);
|
||||||
wxGTKCairoDCImpl(wxDC* owner, int);
|
wxGTKCairoDCImpl(wxDC* owner, int);
|
||||||
|
wxGTKCairoDCImpl(wxDC* owner, double scaleFactor);
|
||||||
wxGTKCairoDCImpl(wxDC* owner, wxWindow* window);
|
wxGTKCairoDCImpl(wxDC* owner, wxWindow* window);
|
||||||
|
|
||||||
virtual void DoDrawBitmap(const wxBitmap& bitmap, int x, int y, bool useMask) wxOVERRIDE;
|
virtual void DoDrawBitmap(const wxBitmap& bitmap, int x, int y, bool useMask) wxOVERRIDE;
|
||||||
@@ -103,7 +104,7 @@ class WXDLLIMPEXP_CORE wxGTKCairoDC: public wxDC
|
|||||||
{
|
{
|
||||||
typedef wxDC base_type;
|
typedef wxDC base_type;
|
||||||
public:
|
public:
|
||||||
wxGTKCairoDC(cairo_t* cr);
|
wxGTKCairoDC(cairo_t* cr, wxWindow* window);
|
||||||
|
|
||||||
wxDECLARE_NO_COPY_CLASS(wxGTKCairoDC);
|
wxDECLARE_NO_COPY_CLASS(wxGTKCairoDC);
|
||||||
};
|
};
|
||||||
|
@@ -2492,17 +2492,19 @@ wxDC *wxDataViewCustomRenderer::GetDC()
|
|||||||
{
|
{
|
||||||
if (m_dc == NULL)
|
if (m_dc == NULL)
|
||||||
{
|
{
|
||||||
|
wxDataViewCtrl* ctrl = NULL;
|
||||||
|
wxDataViewColumn* column = GetOwner();
|
||||||
|
if (column)
|
||||||
|
ctrl = column->GetOwner();
|
||||||
#ifdef __WXGTK3__
|
#ifdef __WXGTK3__
|
||||||
wxASSERT(m_renderParams);
|
wxASSERT(m_renderParams);
|
||||||
cairo_t* cr = m_renderParams->cr;
|
cairo_t* cr = m_renderParams->cr;
|
||||||
wxASSERT(cr && cairo_status(cr) == 0);
|
wxASSERT(cr && cairo_status(cr) == 0);
|
||||||
m_dc = new wxGTKCairoDC(cr);
|
m_dc = new wxGTKCairoDC(cr, ctrl);
|
||||||
#else
|
#else
|
||||||
if (GetOwner() == NULL)
|
if (ctrl == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
if (GetOwner()->GetOwner() == NULL)
|
m_dc = new wxDataViewCtrlDC(ctrl);
|
||||||
return NULL;
|
|
||||||
m_dc = new wxDataViewCtrlDC( GetOwner()->GetOwner() );
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -34,6 +34,14 @@ wxGTKCairoDCImpl::wxGTKCairoDCImpl(wxDC* owner, int)
|
|||||||
m_height = 0;
|
m_height = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wxGTKCairoDCImpl::wxGTKCairoDCImpl(wxDC* owner, double scaleFactor)
|
||||||
|
: base_type(owner, 0)
|
||||||
|
{
|
||||||
|
m_width = 0;
|
||||||
|
m_height = 0;
|
||||||
|
m_contentScaleFactor = scaleFactor;
|
||||||
|
}
|
||||||
|
|
||||||
wxGTKCairoDCImpl::wxGTKCairoDCImpl(wxDC* owner, wxWindow* window)
|
wxGTKCairoDCImpl::wxGTKCairoDCImpl(wxDC* owner, wxWindow* window)
|
||||||
: base_type(owner, 0)
|
: base_type(owner, 0)
|
||||||
{
|
{
|
||||||
@@ -43,6 +51,7 @@ wxGTKCairoDCImpl::wxGTKCairoDCImpl(wxDC* owner, wxWindow* window)
|
|||||||
m_textBackgroundColour = window->GetBackgroundColour();
|
m_textBackgroundColour = window->GetBackgroundColour();
|
||||||
m_width = 0;
|
m_width = 0;
|
||||||
m_height = 0;
|
m_height = 0;
|
||||||
|
m_contentScaleFactor = window->GetContentScaleFactor();
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxGTKCairoDCImpl::DoDrawBitmap(const wxBitmap& bitmap, int x, int y, bool useMask)
|
void wxGTKCairoDCImpl::DoDrawBitmap(const wxBitmap& bitmap, int x, int y, bool useMask)
|
||||||
@@ -345,6 +354,7 @@ void wxMemoryDCImpl::Setup()
|
|||||||
{
|
{
|
||||||
m_width = int(m_bitmap.GetScaledWidth());
|
m_width = int(m_bitmap.GetScaledWidth());
|
||||||
m_height = int(m_bitmap.GetScaledHeight());
|
m_height = int(m_bitmap.GetScaledHeight());
|
||||||
|
m_contentScaleFactor = m_bitmap.GetScaleFactor();
|
||||||
cairo_t* cr = m_bitmap.CairoCreate();
|
cairo_t* cr = m_bitmap.CairoCreate();
|
||||||
gc = wxGraphicsContext::CreateFromNative(cr);
|
gc = wxGraphicsContext::CreateFromNative(cr);
|
||||||
gc->EnableOffset(true);
|
gc->EnableOffset(true);
|
||||||
@@ -353,8 +363,8 @@ void wxMemoryDCImpl::Setup()
|
|||||||
}
|
}
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
wxGTKCairoDC::wxGTKCairoDC(cairo_t* cr)
|
wxGTKCairoDC::wxGTKCairoDC(cairo_t* cr, wxWindow* window)
|
||||||
: base_type(new wxGTKCairoDCImpl(this, 0))
|
: base_type(new wxGTKCairoDCImpl(this, window->GetContentScaleFactor()))
|
||||||
{
|
{
|
||||||
cairo_reference(cr);
|
cairo_reference(cr);
|
||||||
wxGraphicsContext* gc = wxGraphicsContext::CreateFromNative(cr);
|
wxGraphicsContext* gc = wxGraphicsContext::CreateFromNative(cr);
|
||||||
|
@@ -56,7 +56,7 @@ static gboolean expose_event(GtkWidget* widget, GdkEventExpose* gdk_event, wxMin
|
|||||||
gtk_render_frame(sc, cr, 0, 0, win->m_width, win->m_height);
|
gtk_render_frame(sc, cr, 0, 0, win->m_width, win->m_height);
|
||||||
gtk_style_context_restore(sc);
|
gtk_style_context_restore(sc);
|
||||||
|
|
||||||
wxGTKCairoDC dc(cr);
|
wxGTKCairoDC dc(cr, win);
|
||||||
#else
|
#else
|
||||||
if (gdk_event->count > 0 ||
|
if (gdk_event->count > 0 ||
|
||||||
gdk_event->window != gtk_widget_get_window(widget))
|
gdk_event->window != gtk_widget_get_window(widget))
|
||||||
|
@@ -4222,7 +4222,7 @@ void wxWindowGTK::GTKSendPaintEvents(const GdkRegion* region)
|
|||||||
case wxBG_STYLE_ERASE:
|
case wxBG_STYLE_ERASE:
|
||||||
{
|
{
|
||||||
#ifdef __WXGTK3__
|
#ifdef __WXGTK3__
|
||||||
wxGTKCairoDC dc(cr);
|
wxGTKCairoDC dc(cr, static_cast<wxWindow*>(this));
|
||||||
#else
|
#else
|
||||||
wxWindowDC dc( (wxWindow*)this );
|
wxWindowDC dc( (wxWindow*)this );
|
||||||
dc.SetDeviceClippingRegion( m_updateRegion );
|
dc.SetDeviceClippingRegion( m_updateRegion );
|
||||||
|
Reference in New Issue
Block a user