untangling dc and gc

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@42193 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Stefan Csomor
2006-10-21 12:37:42 +00:00
parent 8f3f46357d
commit 8acd14d177
12 changed files with 197 additions and 165 deletions

View File

@@ -856,6 +856,10 @@ private:
#include "wx/os2/dc.h" #include "wx/os2/dc.h"
#endif #endif
#if wxUSE_GRAPHICS_CONTEXT
#include "wx/dcgraph.h"
#endif
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// helper class: you can use it to temporarily change the DC text colour and // helper class: you can use it to temporarily change the DC text colour and
// restore it automatically when the object goes out of scope // restore it automatically when the object goes out of scope

181
include/wx/dcgraph.h Executable file
View File

@@ -0,0 +1,181 @@
/////////////////////////////////////////////////////////////////////////////
// Name: wx/graphdc.h
// Purpose: graphics context device bridge header
// Author: Stefan Csomor
// Modified by:
// Created:
// Copyright: (c) Stefan Csomor
// RCS-ID: $Id$
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#ifndef _WX_GRAPHICS_DC_H_
#define _WX_GRAPHICS_DC_H_
#if wxUSE_GRAPHICS_CONTEXT
#include "wx/geometry.h"
#include "wx/dynarray.h"
class WXDLLEXPORT wxGraphicsContext;
class WXDLLEXPORT wxWindowDC;
#ifdef __WXMAC__
#define wxGCDC wxDC
#endif
class WXDLLEXPORT wxGCDC:
#ifdef __WXMAC__
public wxDCBase
#else
public wxDC
#endif
{
DECLARE_DYNAMIC_CLASS(wxGCDC)
DECLARE_NO_COPY_CLASS(wxGCDC)
public:
wxGCDC(const wxWindowDC& dc);
wxGCDC();
virtual ~wxGCDC();
void Init();
// implement base class pure virtuals
// ----------------------------------
virtual void Clear();
virtual bool StartDoc( const wxString& WXUNUSED(message) ) { return true; }
virtual void EndDoc(void) {}
virtual void StartPage(void) {}
virtual void EndPage(void) {}
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 DestroyClippingRegion();
virtual wxCoord GetCharHeight() const;
virtual wxCoord GetCharWidth() const;
virtual bool CanDrawBitmap() const;
virtual bool CanGetTextExtent() const;
virtual int GetDepth() const;
virtual wxSize GetPPI() const;
virtual void SetMapMode(int mode);
virtual void SetUserScale(double x, double y);
virtual void SetLogicalScale(double x, double y);
virtual void SetLogicalOrigin(wxCoord x, wxCoord y);
virtual void SetDeviceOrigin(wxCoord x, wxCoord y);
virtual void SetAxisOrientation(bool xLeftRight, bool yBottomUp);
virtual void SetLogicalFunction(int function);
virtual void SetTextForeground(const wxColour& colour);
virtual void SetTextBackground(const wxColour& colour);
virtual void ComputeScaleAndOrigin();
wxGraphicsContext* GetGraphicContext() { return m_graphicContext; }
virtual void SetGraphicsContext( wxGraphicsContext* ctx )
{ delete m_graphicContext; m_graphicContext = ctx; }
protected:
// the true implementations
virtual bool DoFloodFill(wxCoord x, wxCoord y, const wxColour& col,
int style = wxFLOOD_SURFACE);
virtual void DoGradientFillLinear(const wxRect& rect,
const wxColour& initialColour,
const wxColour& destColour,
wxDirection nDirection = wxEAST);
virtual void DoGradientFillConcentric(const wxRect& rect,
const wxColour& initialColour,
const wxColour& destColour,
const wxPoint& circleCenter);
virtual bool DoGetPixel(wxCoord x, wxCoord y, wxColour *col) const;
virtual void DoDrawPoint(wxCoord x, wxCoord y);
#if wxUSE_SPLINES
virtual void DoDrawSpline(wxList *points);
#endif
virtual void DoDrawLine(wxCoord x1, wxCoord y1, wxCoord x2, wxCoord y2);
virtual void DoDrawArc(wxCoord x1, wxCoord y1,
wxCoord x2, wxCoord y2,
wxCoord xc, wxCoord yc);
virtual void DoDrawCheckMark(wxCoord x, wxCoord y,
wxCoord width, wxCoord height);
virtual void DoDrawEllipticArc(wxCoord x, wxCoord y, wxCoord w, wxCoord h,
double sa, double ea);
virtual void DoDrawRectangle(wxCoord x, wxCoord y, wxCoord width, wxCoord height);
virtual void DoDrawRoundedRectangle(wxCoord x, wxCoord y,
wxCoord width, wxCoord height,
double radius);
virtual void DoDrawEllipse(wxCoord x, wxCoord y, wxCoord width, wxCoord height);
virtual void DoCrossHair(wxCoord x, wxCoord y);
virtual void DoDrawIcon(const wxIcon& icon, wxCoord x, wxCoord y);
virtual void DoDrawBitmap(const wxBitmap &bmp, wxCoord x, wxCoord y,
bool useMask = false);
virtual void DoDrawText(const wxString& text, wxCoord x, wxCoord y);
virtual void DoDrawRotatedText(const wxString& text, wxCoord x, wxCoord y,
double angle);
virtual bool DoBlit(wxCoord xdest, wxCoord ydest, wxCoord width, wxCoord height,
wxDC *source, wxCoord xsrc, wxCoord ysrc,
int rop = wxCOPY, bool useMask = false, wxCoord xsrcMask = -1, wxCoord ysrcMask = -1);
virtual void DoGetSize(int *,int *) const;
virtual void DoGetSizeMM(int* width, int* height) const;
virtual void DoDrawLines(int n, wxPoint points[],
wxCoord xoffset, wxCoord yoffset);
virtual void DoDrawPolygon(int n, wxPoint points[],
wxCoord xoffset, wxCoord yoffset,
int fillStyle = wxODDEVEN_RULE);
virtual void DoDrawPolyPolygon(int n, int count[], wxPoint points[],
wxCoord xoffset, wxCoord yoffset,
int fillStyle);
virtual void DoSetClippingRegionAsRegion(const wxRegion& region);
virtual void DoSetClippingRegion(wxCoord x, wxCoord y,
wxCoord width, wxCoord height);
virtual void DoGetTextExtent(const wxString& string,
wxCoord *x, wxCoord *y,
wxCoord *descent = NULL,
wxCoord *externalLeading = NULL,
wxFont *theFont = NULL) const;
virtual bool DoGetPartialTextExtents(const wxString& text, wxArrayInt& widths) const;
protected:
// scaling variables
double m_mm_to_pix_x, m_mm_to_pix_y;
double m_formerScaleX, m_formerScaleY;
wxGraphicsContext* m_graphicContext;
};
#endif
#endif // _WX_GRAPHICS_DC_H_

View File

@@ -12,14 +12,13 @@
#ifndef _WX_GRAPHICS_H_ #ifndef _WX_GRAPHICS_H_
#define _WX_GRAPHICS_H_ #define _WX_GRAPHICS_H_
#if wxUSE_GRAPHICS_CONTEXT
#include "wx/geometry.h" #include "wx/geometry.h"
#include "wx/dynarray.h" #include "wx/dynarray.h"
#include "wx/dc.h"
class WXDLLEXPORT wxWindowDC; class WXDLLEXPORT wxWindowDC;
#if wxUSE_GRAPHICS_CONTEXT
/* /*
* notes about the graphics context apis * notes about the graphics context apis
* *
@@ -262,162 +261,6 @@ public:
DECLARE_NO_COPY_CLASS(wxGraphicsContext) DECLARE_NO_COPY_CLASS(wxGraphicsContext)
}; };
#ifdef __WXMAC__
#define wxGCDC wxDC
#endif #endif
class WXDLLEXPORT wxGCDC: #endif // _WX_GRAPHICS_H_
#ifdef __WXMAC__
public wxDCBase
#else
public wxDC
#endif
{
DECLARE_DYNAMIC_CLASS(wxGCDC)
DECLARE_NO_COPY_CLASS(wxGCDC)
public:
wxGCDC(const wxWindowDC& dc);
wxGCDC();
virtual ~wxGCDC();
void Init();
// implement base class pure virtuals
// ----------------------------------
virtual void Clear();
virtual bool StartDoc( const wxString& WXUNUSED(message) ) { return true; }
virtual void EndDoc(void) {}
virtual void StartPage(void) {}
virtual void EndPage(void) {}
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 DestroyClippingRegion();
virtual wxCoord GetCharHeight() const;
virtual wxCoord GetCharWidth() const;
virtual bool CanDrawBitmap() const;
virtual bool CanGetTextExtent() const;
virtual int GetDepth() const;
virtual wxSize GetPPI() const;
virtual void SetMapMode(int mode);
virtual void SetUserScale(double x, double y);
virtual void SetLogicalScale(double x, double y);
virtual void SetLogicalOrigin(wxCoord x, wxCoord y);
virtual void SetDeviceOrigin(wxCoord x, wxCoord y);
virtual void SetAxisOrientation(bool xLeftRight, bool yBottomUp);
virtual void SetLogicalFunction(int function);
virtual void SetTextForeground(const wxColour& colour);
virtual void SetTextBackground(const wxColour& colour);
virtual void ComputeScaleAndOrigin();
wxGraphicsContext* GetGraphicsContext() { return m_graphicContext; }
virtual void SetGraphicsContext( wxGraphicsContext* ctx )
{ delete m_graphicContext; m_graphicContext = ctx; }
protected:
// the true implementations
virtual bool DoFloodFill(wxCoord x, wxCoord y, const wxColour& col,
int style = wxFLOOD_SURFACE);
virtual void DoGradientFillLinear(const wxRect& rect,
const wxColour& initialColour,
const wxColour& destColour,
wxDirection nDirection = wxEAST);
virtual void DoGradientFillConcentric(const wxRect& rect,
const wxColour& initialColour,
const wxColour& destColour,
const wxPoint& circleCenter);
virtual bool DoGetPixel(wxCoord x, wxCoord y, wxColour *col) const;
virtual void DoDrawPoint(wxCoord x, wxCoord y);
#if wxUSE_SPLINES
virtual void DoDrawSpline(wxList *points);
#endif
virtual void DoDrawLine(wxCoord x1, wxCoord y1, wxCoord x2, wxCoord y2);
virtual void DoDrawArc(wxCoord x1, wxCoord y1,
wxCoord x2, wxCoord y2,
wxCoord xc, wxCoord yc);
virtual void DoDrawCheckMark(wxCoord x, wxCoord y,
wxCoord width, wxCoord height);
virtual void DoDrawEllipticArc(wxCoord x, wxCoord y, wxCoord w, wxCoord h,
double sa, double ea);
virtual void DoDrawRectangle(wxCoord x, wxCoord y, wxCoord width, wxCoord height);
virtual void DoDrawRoundedRectangle(wxCoord x, wxCoord y,
wxCoord width, wxCoord height,
double radius);
virtual void DoDrawEllipse(wxCoord x, wxCoord y, wxCoord width, wxCoord height);
virtual void DoCrossHair(wxCoord x, wxCoord y);
virtual void DoDrawIcon(const wxIcon& icon, wxCoord x, wxCoord y);
virtual void DoDrawBitmap(const wxBitmap &bmp, wxCoord x, wxCoord y,
bool useMask = false);
virtual void DoDrawText(const wxString& text, wxCoord x, wxCoord y);
virtual void DoDrawRotatedText(const wxString& text, wxCoord x, wxCoord y,
double angle);
virtual bool DoBlit(wxCoord xdest, wxCoord ydest, wxCoord width, wxCoord height,
wxDC *source, wxCoord xsrc, wxCoord ysrc,
int rop = wxCOPY, bool useMask = false, wxCoord xsrcMask = -1, wxCoord ysrcMask = -1);
virtual void DoGetSize(int *,int *) const;
virtual void DoGetSizeMM(int* width, int* height) const;
virtual void DoDrawLines(int n, wxPoint points[],
wxCoord xoffset, wxCoord yoffset);
virtual void DoDrawPolygon(int n, wxPoint points[],
wxCoord xoffset, wxCoord yoffset,
int fillStyle = wxODDEVEN_RULE);
virtual void DoDrawPolyPolygon(int n, int count[], wxPoint points[],
wxCoord xoffset, wxCoord yoffset,
int fillStyle);
virtual void DoSetClippingRegionAsRegion(const wxRegion& region);
virtual void DoSetClippingRegion(wxCoord x, wxCoord y,
wxCoord width, wxCoord height);
virtual void DoGetTextExtent(const wxString& string,
wxCoord *x, wxCoord *y,
wxCoord *descent = NULL,
wxCoord *externalLeading = NULL,
wxFont *theFont = NULL) const;
virtual bool DoGetPartialTextExtents(const wxString& text, wxArrayInt& widths) const;
protected:
// scaling variables
double m_mm_to_pix_x, m_mm_to_pix_y;
double m_formerScaleX, m_formerScaleY;
wxGraphicsContext* m_graphicContext;
};
#endif
#endif
// _WX_GRID_H_BASE_

View File

@@ -36,11 +36,7 @@
class wxMacPortStateHelper; class wxMacPortStateHelper;
#if wxUSE_GRAPHICS_CONTEXT #if !wxUSE_GRAPHICS_CONTEXT
#include "wx/graphics.h"
#else
class WXDLLEXPORT wxGraphicPath class WXDLLEXPORT wxGraphicPath
{ {

View File

@@ -36,6 +36,7 @@
#ifdef __WXMAC__ #ifdef __WXMAC__
#include "wx/mac/private.h" #include "wx/mac/private.h"
#include "wx/graphics.h"
#endif #endif
#ifdef __WXGTK__ #ifdef __WXGTK__

View File

@@ -1162,6 +1162,7 @@ void wxDCBase::CalculateEllipticPoints( wxList* points,
#include "wx/mac/private.h" #include "wx/mac/private.h"
#include "wx/toplevel.h" #include "wx/toplevel.h"
#include "wx/graphics.h"
class wxOverlayImpl class wxOverlayImpl
{ {

View File

@@ -23,6 +23,7 @@
#include "wx/region.h" #include "wx/region.h"
#endif #endif
#include "wx/graphics.h"
#include "wx/mac/private.h" #include "wx/mac/private.h"
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------

View File

@@ -12,6 +12,7 @@
#include "wx/wxprec.h" #include "wx/wxprec.h"
#include "wx/dcmemory.h" #include "wx/dcmemory.h"
#include "wx/graphics.h"
#include "wx/mac/private.h" #include "wx/mac/private.h"

View File

@@ -27,6 +27,7 @@
#include "wx/mac/uma.h" #include "wx/mac/uma.h"
#include "wx/mac/private/print.h" #include "wx/mac/private/print.h"
#include "wx/graphics.h"
IMPLEMENT_CLASS(wxPrinterDC, wxDC) IMPLEMENT_CLASS(wxPrinterDC, wxDC)

View File

@@ -14,6 +14,7 @@
#include "wx/dcscreen.h" #include "wx/dcscreen.h"
#include "wx/mac/uma.h" #include "wx/mac/uma.h"
#include "wx/graphics.h"
IMPLEMENT_DYNAMIC_CLASS(wxScreenDC, wxWindowDC) IMPLEMENT_DYNAMIC_CLASS(wxScreenDC, wxWindowDC)

View File

@@ -25,6 +25,7 @@
#include "wx/metafile.h" #include "wx/metafile.h"
#include "wx/clipbrd.h" #include "wx/clipbrd.h"
#include "wx/mac/private.h" #include "wx/mac/private.h"
#include "wx/graphics.h"
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>

View File

@@ -26,6 +26,7 @@
#endif #endif
#include "wx/renderer.h" #include "wx/renderer.h"
#include "wx/graphics.h"
#include "wx/mac/uma.h" #include "wx/mac/uma.h"