This function can be used to check if drawing on wxClientDC actually works. This has to be a run-time, rather than compile-time, check because in wxGTK3 this depends on the backend being used: wxClientDC only doesn't work with Wayland, but does work with X11 (and, less importantly, Win32) backend(s). Currently the wxWindow parameter of this function is not used but it could be useful in the future and it will be simpler to allow not specifying it (by defaulting it to nullptr) than to add it later, so it seems better to have it.
110 lines
3 KiB
C++
110 lines
3 KiB
C++
/////////////////////////////////////////////////////////////////////////////
|
|
// Name: wx/msw/dcclient.h
|
|
// Purpose: wxClientDC class
|
|
// Author: Julian Smart
|
|
// Created: 01/02/97
|
|
// Copyright: (c) Julian Smart
|
|
// Licence: wxWindows licence
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
#ifndef _WX_DCCLIENT_H_
|
|
#define _WX_DCCLIENT_H_
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// headers
|
|
// ----------------------------------------------------------------------------
|
|
|
|
#include "wx/dc.h"
|
|
#include "wx/msw/dc.h"
|
|
#include "wx/dcclient.h"
|
|
|
|
class wxPaintDCInfo;
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// DC classes
|
|
// ----------------------------------------------------------------------------
|
|
|
|
class WXDLLIMPEXP_CORE wxWindowDCImpl : public wxMSWDCImpl
|
|
{
|
|
public:
|
|
// default ctor
|
|
wxWindowDCImpl( wxDC *owner );
|
|
|
|
// Create a DC corresponding to the whole window
|
|
wxWindowDCImpl( wxDC *owner, wxWindow *win );
|
|
|
|
virtual void DoGetSize(int *width, int *height) const override;
|
|
|
|
protected:
|
|
// initialize the newly created DC
|
|
void InitDC();
|
|
|
|
wxDECLARE_CLASS(wxWindowDCImpl);
|
|
wxDECLARE_NO_COPY_CLASS(wxWindowDCImpl);
|
|
};
|
|
|
|
class WXDLLIMPEXP_CORE wxClientDCImpl : public wxWindowDCImpl
|
|
{
|
|
public:
|
|
// default ctor
|
|
wxClientDCImpl( wxDC *owner );
|
|
|
|
// Create a DC corresponding to the client area of the window
|
|
wxClientDCImpl( wxDC *owner, wxWindow *win );
|
|
|
|
virtual ~wxClientDCImpl();
|
|
|
|
virtual void DoGetSize(int *width, int *height) const override;
|
|
|
|
static bool
|
|
CanBeUsedForDrawing(const wxWindow* WXUNUSED(window)) { return true; }
|
|
|
|
protected:
|
|
void InitDC();
|
|
|
|
wxDECLARE_CLASS(wxClientDCImpl);
|
|
wxDECLARE_NO_COPY_CLASS(wxClientDCImpl);
|
|
};
|
|
|
|
class WXDLLIMPEXP_CORE wxPaintDCImpl : public wxClientDCImpl
|
|
{
|
|
public:
|
|
wxPaintDCImpl( wxDC *owner );
|
|
|
|
// Create a DC corresponding for painting the window in OnPaint()
|
|
wxPaintDCImpl( wxDC *owner, wxWindow *win );
|
|
|
|
virtual ~wxPaintDCImpl();
|
|
|
|
// find the entry for this DC in the cache (keyed by the window)
|
|
static WXHDC FindDCInCache(wxWindow* win);
|
|
|
|
// This must be called by the code handling WM_PAINT to remove the DC
|
|
// cached for this window for the duration of this message processing.
|
|
static void EndPaint(wxWindow *win);
|
|
|
|
protected:
|
|
// Find the DC for this window in the cache, return nullptr if not found.
|
|
static wxPaintDCInfo *FindInCache(wxWindow* win);
|
|
|
|
wxDECLARE_CLASS(wxPaintDCImpl);
|
|
wxDECLARE_NO_COPY_CLASS(wxPaintDCImpl);
|
|
};
|
|
|
|
/*
|
|
* wxPaintDCEx
|
|
* This class is used when an application sends an HDC with the WM_PAINT
|
|
* message. It is used in HandlePaint and need not be used by an application.
|
|
*/
|
|
|
|
class WXDLLIMPEXP_CORE wxPaintDCEx : public wxPaintDC
|
|
{
|
|
public:
|
|
wxPaintDCEx(wxWindow *canvas, WXHDC dc);
|
|
|
|
wxDECLARE_CLASS(wxPaintDCEx);
|
|
wxDECLARE_NO_COPY_CLASS(wxPaintDCEx);
|
|
};
|
|
|
|
#endif
|
|
// _WX_DCCLIENT_H_
|