wxX11:
Updated wxColour for handling Colormaps and ref couting. Updated wxClientDC et al. for conforming to wxGTK. Many tricky parts, particularly the bitmap drawing and blitting is still missing. Any sample crashes now for some reason with an X error. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@14136 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -17,87 +17,45 @@
|
||||
#endif
|
||||
|
||||
#include "wx/dc.h"
|
||||
#include "wx/region.h"
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// fwd declarations
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
class WXDLLEXPORT wxWindowDC;
|
||||
class WXDLLEXPORT wxWindow;
|
||||
class wxWindow;
|
||||
|
||||
// Under Windows, wxClientDC, wxPaintDC and wxWindowDC are implemented
|
||||
// differently. On many platforms, however, they will be the same.
|
||||
class wxWindowDC;
|
||||
class wxPaintDC;
|
||||
class wxClientDC;
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// wxWindowDC
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
class WXDLLEXPORT wxWindowDC : public wxDC
|
||||
class wxWindowDC : public wxDC
|
||||
{
|
||||
DECLARE_DYNAMIC_CLASS(wxWindowDC)
|
||||
|
||||
public:
|
||||
wxWindowDC();
|
||||
wxWindowDC( wxWindow *win );
|
||||
|
||||
~wxWindowDC();
|
||||
|
||||
// TODO this function is Motif-only for now - should it go into base class?
|
||||
void Clear(const wxRect& rect);
|
||||
|
||||
// implement base class pure virtuals
|
||||
// ----------------------------------
|
||||
|
||||
virtual void Clear();
|
||||
|
||||
virtual void SetFont(const wxFont& font);
|
||||
virtual void SetPen(const wxPen& pen);
|
||||
virtual void SetBrush(const wxBrush& brush);
|
||||
virtual void SetBackground(const wxBrush& brush);
|
||||
virtual void SetBackgroundMode(int mode);
|
||||
virtual void SetPalette(const wxPalette& palette);
|
||||
virtual void SetLogicalFunction( int function );
|
||||
|
||||
virtual void SetTextForeground(const wxColour& colour);
|
||||
virtual void SetTextBackground(const wxColour& colour);
|
||||
|
||||
virtual wxCoord GetCharHeight() const;
|
||||
virtual wxCoord GetCharWidth() const;
|
||||
virtual void DoGetTextExtent(const wxString& string,
|
||||
wxCoord *x, wxCoord *y,
|
||||
wxCoord *descent = NULL,
|
||||
wxCoord *externalLeading = NULL,
|
||||
wxFont *theFont = NULL) const;
|
||||
|
||||
virtual bool CanDrawBitmap() const;
|
||||
virtual bool CanGetTextExtent() const;
|
||||
|
||||
virtual int GetDepth() const;
|
||||
virtual wxSize GetPPI() const;
|
||||
|
||||
virtual void DestroyClippingRegion();
|
||||
|
||||
// Helper function for setting clipping
|
||||
void SetDCClipping();
|
||||
|
||||
// implementation from now on
|
||||
// --------------------------
|
||||
|
||||
WXGC GetGC() const { return m_gc; }
|
||||
WXGC GetBackingGC() const { return m_gcBacking; }
|
||||
WXDisplay* GetDisplay() const { return m_display; }
|
||||
bool GetAutoSetting() const { return m_autoSetting; }
|
||||
void SetAutoSetting(bool flag) { m_autoSetting = flag; }
|
||||
|
||||
virtual bool CanDrawBitmap() const { return TRUE; }
|
||||
virtual bool CanGetTextExtent() const { return TRUE; }
|
||||
|
||||
protected:
|
||||
virtual void DoFloodFill(wxCoord x, wxCoord y, const wxColour& col,
|
||||
int style = wxFLOOD_SURFACE);
|
||||
|
||||
virtual bool DoGetPixel(wxCoord x, wxCoord y, wxColour *col) const;
|
||||
virtual void DoGetSize(int *width, int *height) const;
|
||||
virtual void DoFloodFill( wxCoord x, wxCoord y, const wxColour& col, int style = wxFLOOD_SURFACE );
|
||||
virtual bool DoGetPixel( wxCoord x, wxCoord y, wxColour *col ) const;
|
||||
|
||||
virtual void DoDrawPoint(wxCoord x, wxCoord y);
|
||||
virtual void DoDrawLine(wxCoord x1, wxCoord y1, wxCoord x2, wxCoord y2);
|
||||
|
||||
virtual void DoDrawIcon( const wxIcon &icon, wxCoord x, wxCoord y );
|
||||
virtual void DoDrawBitmap( const wxBitmap &bitmap, wxCoord x, wxCoord y,
|
||||
bool useMask = FALSE );
|
||||
|
||||
virtual void DoDrawArc(wxCoord x1, wxCoord y1,
|
||||
wxCoord x2, wxCoord y2,
|
||||
wxCoord xc, wxCoord yc);
|
||||
@@ -128,49 +86,89 @@ protected:
|
||||
virtual void DoDrawPolygon(int n, wxPoint points[],
|
||||
wxCoord xoffset, wxCoord yoffset,
|
||||
int fillStyle = wxODDEVEN_RULE);
|
||||
|
||||
WXGC m_gc;
|
||||
WXGC m_gcBacking;
|
||||
WXDisplay* m_display;
|
||||
wxWindow* m_window;
|
||||
WXRegion m_currentRegion; // Current clipping region (incl. paint clip region)
|
||||
WXRegion m_userRegion; // User-defined clipping region
|
||||
WXPixmap m_pixmap; // Pixmap for drawing on
|
||||
|
||||
// Not sure if we'll need all of these
|
||||
int m_backgroundPixel;
|
||||
wxColour m_currentColour;
|
||||
// int m_currentBkMode;
|
||||
int m_currentPenWidth ;
|
||||
int m_currentPenJoin ;
|
||||
int m_currentPenCap ;
|
||||
int m_currentPenDashCount ;
|
||||
wxX11Dash* m_currentPenDash ;
|
||||
wxBitmap m_currentStipple ;
|
||||
int m_currentStyle ;
|
||||
int m_currentFill ;
|
||||
int m_autoSetting ; // See comment in dcclient.cpp
|
||||
WXFont m_oldFont;
|
||||
};
|
||||
|
||||
class WXDLLEXPORT wxPaintDC: public wxWindowDC
|
||||
{
|
||||
DECLARE_DYNAMIC_CLASS(wxPaintDC)
|
||||
|
||||
|
||||
public:
|
||||
wxPaintDC() { }
|
||||
wxPaintDC(wxWindow* win);
|
||||
virtual void Clear();
|
||||
|
||||
~wxPaintDC();
|
||||
virtual void SetFont(const wxFont& font);
|
||||
virtual void SetPen(const wxPen& pen);
|
||||
virtual void SetBrush(const wxBrush& brush);
|
||||
virtual void SetBackground(const wxBrush& brush);
|
||||
virtual void SetBackgroundMode(int mode);
|
||||
virtual void SetPalette(const wxPalette& palette);
|
||||
virtual void SetLogicalFunction( int function );
|
||||
|
||||
virtual void SetTextForeground(const wxColour& colour);
|
||||
virtual void SetTextBackground(const wxColour& colour);
|
||||
|
||||
virtual wxCoord GetCharHeight() const;
|
||||
virtual wxCoord GetCharWidth() const;
|
||||
virtual void DoGetTextExtent(const wxString& string,
|
||||
wxCoord *x, wxCoord *y,
|
||||
wxCoord *descent = NULL,
|
||||
wxCoord *externalLeading = NULL,
|
||||
wxFont *theFont = NULL) const;
|
||||
|
||||
virtual int GetDepth() const;
|
||||
virtual wxSize GetPPI() const;
|
||||
|
||||
virtual void DestroyClippingRegion();
|
||||
|
||||
protected:
|
||||
// implementation
|
||||
// --------------
|
||||
|
||||
WXDisplay *m_display;
|
||||
WXWindow m_window;
|
||||
WXGC m_penGC;
|
||||
WXGC m_brushGC;
|
||||
WXGC m_textGC;
|
||||
WXGC m_bgGC;
|
||||
WXColormap m_cmap;
|
||||
bool m_isMemDC;
|
||||
bool m_isScreenDC;
|
||||
wxWindow *m_owner;
|
||||
wxRegion m_currentClippingRegion;
|
||||
wxRegion m_paintClippingRegion;
|
||||
|
||||
void SetUpDC();
|
||||
void Destroy();
|
||||
void ComputeScaleAndOrigin();
|
||||
|
||||
private:
|
||||
DECLARE_DYNAMIC_CLASS(wxWindowDC)
|
||||
};
|
||||
|
||||
class WXDLLEXPORT wxClientDC: public wxWindowDC
|
||||
//-----------------------------------------------------------------------------
|
||||
// wxClientDC
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
class wxClientDC : public wxWindowDC
|
||||
{
|
||||
DECLARE_DYNAMIC_CLASS(wxClientDC)
|
||||
|
||||
public:
|
||||
wxClientDC() { }
|
||||
wxClientDC(wxWindow* win) : wxWindowDC(win) { }
|
||||
wxClientDC( wxWindow *win );
|
||||
|
||||
protected:
|
||||
virtual void DoGetSize(int *width, int *height) const;
|
||||
|
||||
private:
|
||||
DECLARE_DYNAMIC_CLASS(wxClientDC)
|
||||
};
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// wxPaintDC
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
class wxPaintDC : public wxClientDC
|
||||
{
|
||||
public:
|
||||
wxPaintDC() { }
|
||||
wxPaintDC( wxWindow *win );
|
||||
|
||||
private:
|
||||
DECLARE_DYNAMIC_CLASS(wxPaintDC)
|
||||
};
|
||||
|
||||
#endif
|
||||
|
Reference in New Issue
Block a user