/////////////////////////////////////////////////////////////////////////////
// Name: wx/dcclient.h
// Purpose: wxClientDC base header
// Author: Julian Smart
// Copyright: (c) Julian Smart
// Licence: wxWindows Licence
/////////////////////////////////////////////////////////////////////////////
#ifndef _WX_DCCLIENT_H_BASE_
#define _WX_DCCLIENT_H_BASE_
#include "wx/dc.h"
//-----------------------------------------------------------------------------
// wxWindowDC
//-----------------------------------------------------------------------------
class WXDLLIMPEXP_CORE wxWindowDC : public wxDC
{
public:
wxWindowDC(wxWindow *win);
protected:
wxWindowDC(wxDCImpl *impl) : wxDC(impl) { }
private:
wxDECLARE_ABSTRACT_CLASS(wxWindowDC);
};
//-----------------------------------------------------------------------------
// wxClientDC
//-----------------------------------------------------------------------------
class WXDLLIMPEXP_CORE wxClientDC : public wxWindowDC
{
public:
wxClientDC(wxWindow *win);
static bool CanBeUsedForDrawing(const wxWindow* window);
protected:
wxClientDC(wxDCImpl *impl) : wxWindowDC(impl) { }
private:
wxDECLARE_ABSTRACT_CLASS(wxClientDC);
};
//-----------------------------------------------------------------------------
// wxPaintDC
//-----------------------------------------------------------------------------
class WXDLLIMPEXP_CORE wxPaintDC : public wxClientDC
{
public:
wxPaintDC(wxWindow *win);
protected:
wxPaintDC(wxDCImpl *impl) : wxClientDC(impl) { }
private:
wxDECLARE_ABSTRACT_CLASS(wxPaintDC);
};
//-----------------------------------------------------------------------------
// wxInfoDC
//-----------------------------------------------------------------------------
// A very limited wxDC-like class which can be only used to query the device
// context, but not to draw anything on it: it doesn't inherit from wxDC but
// can be implicitly converted to wxReadOnlyDC and makes all of its functions
// available.
class WXDLLIMPEXP_CORE wxInfoDC
{
public:
explicit wxInfoDC(wxWindow* win) : m_dcClient(win) { }
// Implicit conversions to wxReadOnlyDC allow passing objects of this class
// to the functions taking this type.
operator wxReadOnlyDC&() { return m_dcClient; }
operator const wxReadOnlyDC&() const { return m_dcClient; }
wxReadOnlyDC* operator&() { return &m_dcClient; }
const wxReadOnlyDC* operator&() const { return &m_dcClient; }
// wxReadOnlyDC re-exposed here.
wxWindow* GetWindow() const { return m_dcClient.GetWindow(); }
bool IsOk() const { return m_dcClient.IsOk(); }
bool CanDrawBitmap() const { return m_dcClient.CanDrawBitmap(); }
bool CanGetTextExtent() const { return m_dcClient.CanGetTextExtent(); }
void GetSize(int *width, int *height) const { m_dcClient.GetSize(width, height); }
wxSize GetSize() const { return m_dcClient.GetSize(); }
void GetSizeMM(int* width, int* height) const { m_dcClient.GetSizeMM(width, height); }
wxSize GetSizeMM() const { return m_dcClient.GetSizeMM(); }
int GetDepth() const { return m_dcClient.GetDepth(); }
wxSize GetPPI() const { return m_dcClient.GetPPI(); }
int GetResolution() const { return m_dcClient.GetResolution(); }
double GetContentScaleFactor() const { return m_dcClient.GetContentScaleFactor(); }
wxSize FromDIP(const wxSize& sz) const { return m_dcClient.FromDIP(sz); }
wxPoint FromDIP(const wxPoint& pt) const { return m_dcClient.FromDIP(pt); }
int FromDIP(int d) const { return m_dcClient.FromDIP(d); }
wxSize ToDIP(const wxSize & sz) const { return m_dcClient.ToDIP(sz); }
wxPoint ToDIP(const wxPoint & pt) const { return m_dcClient.ToDIP(pt); }
int ToDIP(int d) const { return m_dcClient.ToDIP(d); }
void SetLayoutDirection(wxLayoutDirection dir)
{ m_dcClient.SetLayoutDirection( dir ); }
wxLayoutDirection GetLayoutDirection() const
{ return m_dcClient.GetLayoutDirection(); }
void SetFont(const wxFont& font) { m_dcClient.SetFont(font); }
const wxFont& GetFont() const { return m_dcClient.GetFont(); }
wxCoord GetCharHeight() const { return m_dcClient.GetCharHeight(); }
wxCoord GetCharWidth() const { return m_dcClient.GetCharWidth(); }
wxFontMetrics GetFontMetrics() const { return m_dcClient.GetFontMetrics(); }
void GetTextExtent(const wxString& string,
wxCoord *x, wxCoord *y,
wxCoord *descent = nullptr,
wxCoord *externalLeading = nullptr,
const wxFont *theFont = nullptr) const
{ return m_dcClient.GetTextExtent(string, x, y, descent, externalLeading, theFont); }
wxSize GetTextExtent(const wxString& string) const
{
return m_dcClient.GetTextExtent(string);
}
void GetMultiLineTextExtent(const wxString& string,
wxCoord *width,
wxCoord *height,
wxCoord *heightLine = nullptr,
const wxFont *font = nullptr) const
{ return m_dcClient.GetMultiLineTextExtent(string, width, height, heightLine, font); }
wxSize GetMultiLineTextExtent(const wxString& string) const
{
return m_dcClient.GetMultiLineTextExtent(string);
}
bool GetPartialTextExtents(const wxString& text, wxArrayInt& widths) const
{ return m_dcClient.GetPartialTextExtents(text, widths); }
wxCoord DeviceToLogicalX(wxCoord x) const
{ return m_dcClient.DeviceToLogicalX(x); }
wxCoord DeviceToLogicalY(wxCoord y) const
{ return m_dcClient.DeviceToLogicalY(y); }
wxCoord DeviceToLogicalXRel(wxCoord x) const
{ return m_dcClient.DeviceToLogicalXRel(x); }
wxCoord DeviceToLogicalYRel(wxCoord y) const
{ return m_dcClient.DeviceToLogicalYRel(y); }
wxPoint DeviceToLogical(const wxPoint& pt) const
{ return m_dcClient.DeviceToLogical(pt.x, pt.y); }
wxPoint DeviceToLogical(wxCoord x, wxCoord y) const
{ return m_dcClient.DeviceToLogical(x, y); }
wxSize DeviceToLogicalRel(const wxSize& dim) const
{ return m_dcClient.DeviceToLogicalRel(dim.x, dim.y); }
wxSize DeviceToLogicalRel(int x, int y) const
{ return m_dcClient.DeviceToLogicalRel(x, y); }
wxCoord LogicalToDeviceX(wxCoord x) const
{ return m_dcClient.LogicalToDeviceX(x); }
wxCoord LogicalToDeviceY(wxCoord y) const
{ return m_dcClient.LogicalToDeviceY(y); }
wxCoord LogicalToDeviceXRel(wxCoord x) const
{ return m_dcClient.LogicalToDeviceXRel(x); }
wxCoord LogicalToDeviceYRel(wxCoord y) const
{ return m_dcClient.LogicalToDeviceYRel(y); }
wxPoint LogicalToDevice(const wxPoint& pt) const
{ return m_dcClient.LogicalToDevice(pt.x, pt.y); }
wxPoint LogicalToDevice(wxCoord x, wxCoord y) const
{ return m_dcClient.LogicalToDevice(x, y); }
wxSize LogicalToDeviceRel(const wxSize& dim) const
{ return m_dcClient.LogicalToDeviceRel(dim.x, dim.y); }
wxSize LogicalToDeviceRel(int x, int y) const
{ return m_dcClient.LogicalToDeviceRel(x, y); }
void SetMapMode(wxMappingMode mode)
{ m_dcClient.SetMapMode(mode); }
wxMappingMode GetMapMode() const
{ return m_dcClient.GetMapMode(); }
void SetUserScale(double x, double y)
{ m_dcClient.SetUserScale(x,y); }
void GetUserScale(double *x, double *y) const
{ m_dcClient.GetUserScale( x, y ); }
void SetLogicalScale(double x, double y)
{ m_dcClient.SetLogicalScale( x, y ); }
void GetLogicalScale(double *x, double *y) const
{ m_dcClient.GetLogicalScale( x, y ); }
void SetLogicalOrigin(wxCoord x, wxCoord y)
{ m_dcClient.SetLogicalOrigin(x,y); }
void GetLogicalOrigin(wxCoord *x, wxCoord *y) const
{ m_dcClient.GetLogicalOrigin(x, y); }
wxPoint GetLogicalOrigin() const
{ return m_dcClient.GetLogicalOrigin(); }
void SetDeviceOrigin(wxCoord x, wxCoord y)
{ m_dcClient.SetDeviceOrigin( x, y); }
void GetDeviceOrigin(wxCoord *x, wxCoord *y) const
{ m_dcClient.GetDeviceOrigin(x, y); }
wxPoint GetDeviceOrigin() const
{ return m_dcClient.GetDeviceOrigin(); }
void SetAxisOrientation(bool xLeftRight, bool yBottomUp)
{ m_dcClient.SetAxisOrientation(xLeftRight, yBottomUp); }
#if wxUSE_DC_TRANSFORM_MATRIX
bool CanUseTransformMatrix() const
{ return m_dcClient.CanUseTransformMatrix(); }
bool SetTransformMatrix(const wxAffineMatrix2D &matrix)
{ return m_dcClient.SetTransformMatrix(matrix); }
wxAffineMatrix2D GetTransformMatrix() const
{ return m_dcClient.GetTransformMatrix(); }
void ResetTransformMatrix()
{ m_dcClient.ResetTransformMatrix(); }
#endif // wxUSE_DC_TRANSFORM_MATRIX
// mostly internal
void SetDeviceLocalOrigin( wxCoord x, wxCoord y )
{ m_dcClient.SetDeviceLocalOrigin( x, y ); }
private:
wxClientDC m_dcClient;
};
// Define this to indicate that wxInfoDC is available to allow application code
// to fall back to using wxClientDC if it isn't.
#define wxHAS_INFO_DC
#endif // _WX_DCCLIENT_H_BASE_