Apply it manually because MSW doesn't do it automatically for us and also adjust the font size in wxMemoryDC as the base class version only does it for the device contexts associated with a window, but we also need to do it when using a wxMemoryDC for a bitmap using scale factor different from that of the main display. As the result of these changes, contents drawn on wxMemoryDC, both directly via its own methods, or via wxGraphicsContext (using either GDI+ or Direct2D) created from it, it appears the same as in wxWindowDC (e.g. wxPaintDC) created for a window using the same scale. Closes #22130. Closes #22234.
47 lines
1.5 KiB
C++
47 lines
1.5 KiB
C++
/////////////////////////////////////////////////////////////////////////////
|
|
// Name: wx/msw/dcmemory.h
|
|
// Purpose: wxMemoryDC class
|
|
// Author: Julian Smart
|
|
// Modified by:
|
|
// Created: 01/02/97
|
|
// Copyright: (c) Julian Smart
|
|
// Licence: wxWindows licence
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
#ifndef _WX_DCMEMORY_H_
|
|
#define _WX_DCMEMORY_H_
|
|
|
|
#include "wx/dcmemory.h"
|
|
#include "wx/msw/dc.h"
|
|
|
|
class WXDLLIMPEXP_CORE wxMemoryDCImpl: public wxMSWDCImpl
|
|
{
|
|
public:
|
|
wxMemoryDCImpl( wxMemoryDC *owner );
|
|
wxMemoryDCImpl( wxMemoryDC *owner, wxBitmap& bitmap );
|
|
wxMemoryDCImpl( wxMemoryDC *owner, wxDC *dc ); // Create compatible DC
|
|
|
|
// override some base class virtuals
|
|
virtual void SetFont(const wxFont& font) wxOVERRIDE;
|
|
|
|
virtual void DoDrawRectangle(wxCoord x, wxCoord y, wxCoord width, wxCoord height) wxOVERRIDE;
|
|
virtual void DoGetSize(int* width, int* height) const wxOVERRIDE;
|
|
virtual void DoSelect(const wxBitmap& bitmap) wxOVERRIDE;
|
|
|
|
virtual wxBitmap DoGetAsBitmap(const wxRect* subrect) const wxOVERRIDE
|
|
{ return subrect == NULL ? GetSelectedBitmap() : GetSelectedBitmap().GetSubBitmapOfHDC(*subrect, GetHDC() );}
|
|
|
|
protected:
|
|
// create DC compatible with the given one or screen if dc == NULL
|
|
bool CreateCompatible(wxDC *dc);
|
|
|
|
// initialize the newly created DC
|
|
void Init();
|
|
|
|
wxDECLARE_CLASS(wxMemoryDCImpl);
|
|
wxDECLARE_NO_COPY_CLASS(wxMemoryDCImpl);
|
|
};
|
|
|
|
#endif
|
|
// _WX_DCMEMORY_H_
|