#define _WX_DC_H_
#include "wx/defs.h"
-//#include "wx/dc.h"
// ---------------------------------------------------------------------------
// macros
#define wx_round(a) (int)((a)+.5)
+#if wxUSE_DC_CACHEING
+/*
+ * Cached blitting, maintaining a cache
+ * of bitmaps required for transparent blitting
+ * instead of constant creation/deletion
+ */
+
+class wxDCCacheEntry : public wxObject
+{
+public:
+ wxDCCacheEntry( WXHBITMAP hBitmap
+ ,int nWidth
+ ,int nHeight
+ ,int nDepth
+ );
+ wxDCCacheEntry( HPS hPS
+ ,int nDepth
+ );
+ virtual ~wxDCCacheEntry();
+
+ WXHBITMAP m_hBitmap;
+ HPS m_hPS;
+ int m_nWidth;
+ int m_nHeight;
+ int m_nDepth;
+}; // end of CLASS wxDCCacheEntry
+#endif
+
class WXDLLEXPORT wxDC : public wxDCBase
{
DECLARE_DYNAMIC_CLASS(wxDC)
public:
wxDC(void);
- ~wxDC();
+ virtual ~wxDC();
// implement base class pure virtuals
// ----------------------------------
,wxCoord* pY
,wxCoord* pDescent = NULL
,wxCoord* pExternalLeading = NULL
- ,wxFont* pTheFont = NULL
+ ,const wxFont* pTheFont = NULL
) const;
virtual bool CanDrawBitmap(void) const;
virtual bool CanGetTextExtent(void) const;
);
virtual void SetLogicalFunction(int nFunction);
+ virtual wxCoord DeviceToLogicalX(wxCoord x) const;
+ virtual wxCoord DeviceToLogicalY(wxCoord y) const;
+ virtual wxCoord DeviceToLogicalXRel(wxCoord x) const;
+ virtual wxCoord DeviceToLogicalYRel(wxCoord y) const;
+ virtual wxCoord LogicalToDeviceX(wxCoord x) const;
+ virtual wxCoord LogicalToDeviceY(wxCoord y) const;
+ virtual wxCoord LogicalToDeviceXRel(wxCoord x) const;
+ virtual wxCoord LogicalToDeviceYRel(wxCoord y) const ;
+
// implementation from now on
// --------------------------
HPS GetHPS(void) const { return m_hPS; }
void SetHPS(HPS hPS)
{
- HDC hDC = ::GpiQueryDevice(hPS);
m_hPS = hPS;
}
const wxBitmap& GetSelectedBitmap(void) const { return m_vSelectedBitmap; }
wxBitmap& GetSelectedBitmap(void) { return m_vSelectedBitmap; }
+ void UpdateClipBox();
+
+#if wxUSE_DC_CACHEING
+ static wxDCCacheEntry* FindBitmapInCache( HPS hPS
+ ,int nWidth
+ ,int nHeight
+ );
+ static wxDCCacheEntry* FindDCInCache( wxDCCacheEntry* pNotThis
+ ,HPS hPS
+ );
+
+ static void AddToBitmapCache(wxDCCacheEntry* pEntry);
+ static void AddToDCCache(wxDCCacheEntry* pEntry);
+ static void ClearCache(void);
+#endif
+
protected:
- virtual void DoFloodFill( wxCoord vX
+ virtual bool DoFloodFill( wxCoord vX
,wxCoord vY
,const wxColour& rCol
,int nStyle = wxFLOOD_SURFACE
,wxCoord vYsrc
,int nRop = wxCOPY
,bool bUseMask = FALSE
+ ,wxCoord vXsrcMask = -1
+ ,wxCoord vYsrcMask = -1
);
virtual void DoSetClippingRegionAsRegion(const wxRegion& rRegion);
,wxCoord vWidth
,wxCoord vHeight
);
- virtual void DoGetClippingRegion( wxCoord* pX
- ,wxCoord* pY
- ,wxCoord* pWidth
- ,wxCoord* pHeight)
- {
- GetClippingBox( pX
- ,pY
- ,pWidth
- ,pHeight
- );
- }
virtual void DoGetSize( int* pWidth
,int* pHeight
,int nFillStyle = wxODDEVEN_RULE
);
+#if wxUSE_PALETTE
+ void DoSelectPalette(bool bRealize = FALSE);
+ void InitializePalette(void);
+#endif // wxUSE_PALETTE
//
// common part of DoDrawText() and DoDrawRotatedText()
bool m_bOwnsDC:1;
//
- // our HDC and its usage count: we only free it when the usage count drops
- // to 0
+ // our HDC
//
WXHDC m_hDC;
- int m_nDCCount;
//
// Store all old GDI objects when do a SelectObject, so we can select them
WXHBRUSH m_hOldBrush;
WXHFONT m_hOldFont;
WXHPALETTE m_hOldPalette;
-};
+
+#if wxUSE_DC_CACHEING
+ static wxList m_svBitmapCache;
+ static wxList m_svDCCache;
+#endif
+}; // end of CLASS wxDC
#endif
// _WX_DC_H_