X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/52c8d32a71bb7553dd89324fa6d56faac95eb5d0..fc32630a5e03e60a67d4ef53fc59985ea087b451:/include/wx/dfb/dc.h diff --git a/include/wx/dfb/dc.h b/include/wx/dfb/dc.h index 6eb1bac902..c650c55ede 100644 --- a/include/wx/dfb/dc.h +++ b/include/wx/dfb/dc.h @@ -13,23 +13,28 @@ #include "wx/defs.h" #include "wx/region.h" +#include "wx/dc.h" #include "wx/dfb/dfbptr.h" wxDFB_DECLARE_INTERFACE(IDirectFBSurface); //----------------------------------------------------------------------------- -// wxDC +// wxDFBDCImpl //----------------------------------------------------------------------------- -class WXDLLIMPEXP_CORE wxDC : public wxDCBase +class WXDLLIMPEXP_CORE wxDFBDCImpl : public wxDCImpl { public: - wxDC(); + // ctors + wxDFBDCImpl(wxDC *owner) : wxDCImpl(owner) { m_surface = NULL; } + wxDFBDCImpl(wxDC *owner, const wxIDirectFBSurfacePtr& surface) + : wxDCImpl(owner) + { + DFBInit(surface); + } - // Ctor. - wxDC(const wxIDirectFBSurfacePtr& surface); + bool IsOk() const { return m_surface != NULL; } -public: // implement base class pure virtuals // ---------------------------------- @@ -50,6 +55,8 @@ public: virtual void SetPalette(const wxPalette& palette); #endif + virtual void SetLogicalFunction(int function); + virtual void DestroyClippingRegion(); virtual wxCoord GetCharHeight() const; @@ -58,94 +65,30 @@ public: wxCoord *x, wxCoord *y, wxCoord *descent = NULL, wxCoord *externalLeading = NULL, - wxFont *theFont = NULL) const; + const wxFont *theFont = NULL) const; virtual bool CanDrawBitmap() const { return true; } virtual bool CanGetTextExtent() const { return true; } 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); - - // implementation from now on - // -------------------------- - - virtual void ComputeScaleAndOrigin(); - - wxCoord XDEV2LOG(wxCoord x) const - { - wxCoord new_x = x - m_deviceOriginX; - if (new_x > 0) - return (wxCoord)((double)(new_x) / m_scaleX + 0.5) * m_signX + m_logicalOriginX; - else - return (wxCoord)((double)(new_x) / m_scaleX - 0.5) * m_signX + m_logicalOriginX; - } - wxCoord XDEV2LOGREL(wxCoord x) const - { - if (x > 0) - return (wxCoord)((double)(x) / m_scaleX + 0.5); - else - return (wxCoord)((double)(x) / m_scaleX - 0.5); - } - wxCoord YDEV2LOG(wxCoord y) const - { - wxCoord new_y = y - m_deviceOriginY; - if (new_y > 0) - return (wxCoord)((double)(new_y) / m_scaleY + 0.5) * m_signY + m_logicalOriginY; - else - return (wxCoord)((double)(new_y) / m_scaleY - 0.5) * m_signY + m_logicalOriginY; - } - wxCoord YDEV2LOGREL(wxCoord y) const - { - if (y > 0) - return (wxCoord)((double)(y) / m_scaleY + 0.5); - else - return (wxCoord)((double)(y) / m_scaleY - 0.5); - } - wxCoord XLOG2DEV(wxCoord x) const - { - wxCoord new_x = x - m_logicalOriginX; - if (new_x > 0) - return (wxCoord)((double)(new_x) * m_scaleX + 0.5) * m_signX + m_deviceOriginX; - else - return (wxCoord)((double)(new_x) * m_scaleX - 0.5) * m_signX + m_deviceOriginX; - } - wxCoord XLOG2DEVREL(wxCoord x) const - { - if (x > 0) - return (wxCoord)((double)(x) * m_scaleX + 0.5); - else - return (wxCoord)((double)(x) * m_scaleX - 0.5); - } - wxCoord YLOG2DEV(wxCoord y) const - { - wxCoord new_y = y - m_logicalOriginY; - if (new_y > 0) - return (wxCoord)((double)(new_y) * m_scaleY + 0.5) * m_signY + m_deviceOriginY; - else - return (wxCoord)((double)(new_y) * m_scaleY - 0.5) * m_signY + m_deviceOriginY; - } - wxCoord YLOG2DEVREL(wxCoord y) const - { - if (y > 0) - return (wxCoord)((double)(y) * m_scaleY + 0.5); - else - return (wxCoord)((double)(y) * m_scaleY - 0.5); - } - // Returns the surface (and increases its ref count) wxIDirectFBSurfacePtr GetDirectFBSurface() const { return m_surface; } protected: + // implementation + wxCoord XDEV2LOG(wxCoord x) const { return DeviceToLogicalX(x); } + wxCoord XDEV2LOGREL(wxCoord x) const { return DeviceToLogicalXRel(x); } + wxCoord YDEV2LOG(wxCoord y) const { return DeviceToLogicalY(y); } + wxCoord YDEV2LOGREL(wxCoord y) const { return DeviceToLogicalYRel(y); } + wxCoord XLOG2DEV(wxCoord x) const { return LogicalToDeviceX(x); } + wxCoord XLOG2DEVREL(wxCoord x) const { return LogicalToDeviceXRel(x); } + wxCoord YLOG2DEV(wxCoord y) const { return LogicalToDeviceY(y); } + wxCoord YLOG2DEVREL(wxCoord y) const { return LogicalToDeviceYRel(y); } + // initializes the DC from a surface, must be called if default ctor // was used - void Init(const wxIDirectFBSurfacePtr& surface); + void DFBInit(const wxIDirectFBSurfacePtr& surface); virtual bool DoFloodFill(wxCoord x, wxCoord y, const wxColour& col, int style = wxFLOOD_SURFACE); @@ -181,11 +124,9 @@ protected: wxDC *source, wxCoord xsrc, wxCoord ysrc, int rop = wxCOPY, bool useMask = false, wxCoord xsrcMask = -1, wxCoord ysrcMask = -1); - // this is gnarly - we can't even call this function DoSetClippingRegion() - // because of virtual function hiding - virtual void DoSetClippingRegionAsRegion(const wxRegion& region); virtual void DoSetClippingRegion(wxCoord x, wxCoord y, wxCoord width, wxCoord height); + virtual void DoSetDeviceClippingRegion(const wxRegion& region); virtual void DoGetSize(int *width, int *height) const; virtual void DoGetSizeMM(int* width, int* height) const; @@ -197,12 +138,18 @@ protected: int fillStyle = wxODDEVEN_RULE); // implementation from now on: +protected: + wxIDirectFBFontPtr GetCurrentFont() const; private: // Unified implementation of DrawIcon, DrawBitmap and Blit: void DoDrawSubBitmap(const wxBitmap &bmp, wxCoord x, wxCoord y, wxCoord w, wxCoord h, wxCoord destx, wxCoord desty, int rop, bool useMask); + bool DoBlitFromSurface(const wxIDirectFBSurfacePtr& src, + wxCoord srcx, wxCoord srcy, + wxCoord w, wxCoord h, + wxCoord dstx, wxCoord dsty); // selects colour into surface's state void SelectColour(const wxColour& clr); @@ -212,7 +159,9 @@ protected: double m_mm_to_pix_x, m_mm_to_pix_y; - DECLARE_DYNAMIC_CLASS(wxDC) + friend class WXDLLIMPEXP_FWD_CORE wxOverlayImpl; // for Init + + DECLARE_ABSTRACT_CLASS(wxDFBDCImpl) }; #endif // _WX_DFB_DC_H_