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.
164 lines
5.3 KiB
C++
164 lines
5.3 KiB
C++
/////////////////////////////////////////////////////////////////////////////
|
|
// Name: wx/gtk/dc.h
|
|
// Purpose:
|
|
// Author: Robert Roebling
|
|
// Copyright: (c) 1998 Robert Roebling
|
|
// Licence: wxWindows licence
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
#ifndef _WX_GTKDC_H_
|
|
#define _WX_GTKDC_H_
|
|
|
|
#ifdef __WXGTK3__
|
|
|
|
#include "wx/dcgraph.h"
|
|
|
|
class wxGTKCairoDCImpl: public wxGCDCImpl
|
|
{
|
|
typedef wxGCDCImpl BaseType;
|
|
public:
|
|
wxGTKCairoDCImpl(wxDC* owner);
|
|
wxGTKCairoDCImpl(wxDC* owner, wxWindow* window, wxLayoutDirection dir = wxLayout_Default, int width = 0);
|
|
|
|
virtual void DoDrawBitmap(const wxBitmap& bitmap, int x, int y, bool useMask) override;
|
|
virtual void DoDrawCheckMark(int x, int y, int width, int height) override;
|
|
virtual void DoDrawIcon(const wxIcon& icon, int x, int y) override;
|
|
virtual void DoDrawText(const wxString& text, int x, int y) override;
|
|
virtual void DoDrawRotatedText(const wxString& text, int x, int y, double angle) override;
|
|
#if wxUSE_IMAGE
|
|
virtual bool DoFloodFill(int x, int y, const wxColour& col, wxFloodFillStyle style) override;
|
|
#endif
|
|
virtual wxBitmap DoGetAsBitmap(const wxRect* subrect) const override;
|
|
virtual bool DoGetPixel(int x, int y, wxColour* col) const override;
|
|
virtual void DoGetSize(int* width, int* height) const override;
|
|
virtual bool DoStretchBlit(int xdest, int ydest, int dstWidth, int dstHeight, wxDC* source, int xsrc, int ysrc, int srcWidth, int srcHeight, wxRasterOperationMode rop, bool useMask, int xsrcMask, int ysrcMask) override;
|
|
virtual void* GetCairoContext() const override;
|
|
|
|
virtual wxSize GetPPI() const override;
|
|
virtual void SetLayoutDirection(wxLayoutDirection dir) override;
|
|
virtual wxLayoutDirection GetLayoutDirection() const override;
|
|
|
|
protected:
|
|
// Set m_size from the given (valid) GdkWindow.
|
|
void InitSize(GdkWindow* window);
|
|
void AdjustForRTL(cairo_t* cr);
|
|
|
|
wxSize m_size;
|
|
wxLayoutDirection m_layoutDir;
|
|
|
|
wxDECLARE_NO_COPY_CLASS(wxGTKCairoDCImpl);
|
|
};
|
|
//-----------------------------------------------------------------------------
|
|
|
|
class wxWindowDCImpl: public wxGTKCairoDCImpl
|
|
{
|
|
public:
|
|
wxWindowDCImpl(wxWindowDC* owner, wxWindow* window);
|
|
|
|
wxDECLARE_NO_COPY_CLASS(wxWindowDCImpl);
|
|
};
|
|
//-----------------------------------------------------------------------------
|
|
|
|
class wxClientDCImpl: public wxGTKCairoDCImpl
|
|
{
|
|
public:
|
|
wxClientDCImpl(wxClientDC* owner, wxWindow* window);
|
|
|
|
static bool CanBeUsedForDrawing(const wxWindow* window);
|
|
|
|
wxDECLARE_NO_COPY_CLASS(wxClientDCImpl);
|
|
};
|
|
//-----------------------------------------------------------------------------
|
|
|
|
class wxPaintDCImpl: public wxGTKCairoDCImpl
|
|
{
|
|
public:
|
|
wxPaintDCImpl(wxPaintDC* owner, wxWindow* window);
|
|
|
|
wxDECLARE_NO_COPY_CLASS(wxPaintDCImpl);
|
|
};
|
|
//-----------------------------------------------------------------------------
|
|
|
|
class wxScreenDCImpl: public wxGTKCairoDCImpl
|
|
{
|
|
public:
|
|
wxScreenDCImpl(wxScreenDC* owner);
|
|
|
|
virtual wxSize GetPPI() const override;
|
|
|
|
wxDECLARE_NO_COPY_CLASS(wxScreenDCImpl);
|
|
};
|
|
//-----------------------------------------------------------------------------
|
|
|
|
class wxMemoryDCImpl: public wxGTKCairoDCImpl
|
|
{
|
|
public:
|
|
wxMemoryDCImpl(wxMemoryDC* owner);
|
|
wxMemoryDCImpl(wxMemoryDC* owner, wxBitmap& bitmap);
|
|
wxMemoryDCImpl(wxMemoryDC* owner, wxDC* dc);
|
|
virtual wxBitmap DoGetAsBitmap(const wxRect* subrect) const override;
|
|
virtual void DoSelect(const wxBitmap& bitmap) override;
|
|
virtual const wxBitmap& GetSelectedBitmap() const override;
|
|
virtual wxBitmap& GetSelectedBitmap() override;
|
|
|
|
private:
|
|
void Setup();
|
|
wxBitmap m_bitmap;
|
|
|
|
wxDECLARE_NO_COPY_CLASS(wxMemoryDCImpl);
|
|
};
|
|
//-----------------------------------------------------------------------------
|
|
|
|
class WXDLLIMPEXP_CORE wxGTKCairoDC: public wxDC
|
|
{
|
|
public:
|
|
wxGTKCairoDC(cairo_t* cr, wxWindow* window, wxLayoutDirection dir = wxLayout_LeftToRight, int width = 0);
|
|
|
|
wxDECLARE_NO_COPY_CLASS(wxGTKCairoDC);
|
|
};
|
|
|
|
#else
|
|
|
|
#include "wx/dc.h"
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// wxDC
|
|
//-----------------------------------------------------------------------------
|
|
|
|
class WXDLLIMPEXP_CORE wxGTKDCImpl : public wxDCImpl
|
|
{
|
|
public:
|
|
wxGTKDCImpl( wxDC *owner );
|
|
virtual ~wxGTKDCImpl();
|
|
|
|
#if wxUSE_PALETTE
|
|
void SetColourMap( const wxPalette& palette ) { SetPalette(palette); }
|
|
#endif // wxUSE_PALETTE
|
|
|
|
// Resolution in pixels per logical inch
|
|
virtual wxSize GetPPI() const override;
|
|
|
|
virtual bool StartDoc( const wxString& WXUNUSED(message) ) override { return true; }
|
|
virtual void EndDoc() override { }
|
|
virtual void StartPage() override { }
|
|
virtual void EndPage() override { }
|
|
|
|
virtual GdkWindow* GetGDKWindow() const { return nullptr; }
|
|
virtual void* GetHandle() const override { return GetGDKWindow(); }
|
|
|
|
// base class pure virtuals implemented here
|
|
virtual void DoSetClippingRegion(wxCoord x, wxCoord y, wxCoord width, wxCoord height) override;
|
|
virtual void DoGetSizeMM(int* width, int* height) const override;
|
|
|
|
wxDECLARE_ABSTRACT_CLASS(wxGTKDCImpl);
|
|
};
|
|
|
|
// this must be defined when wxDC::Blit() honours the DC origin and needed to
|
|
// allow wxUniv code in univ/winuniv.cpp to work with versions of wxGTK
|
|
// 2.3.[23]
|
|
#ifndef wxHAS_WORKING_GTK_DC_BLIT
|
|
#define wxHAS_WORKING_GTK_DC_BLIT
|
|
#endif
|
|
|
|
#endif
|
|
#endif // _WX_GTKDC_H_
|