#ifndef __XVTPDF_H #define __XVTPDF_H #ifndef PDFLIB_H struct PDF_c {}; #include "../pdf/pdflib/pdflibdl.h" #endif /////////////////////////////////////////////////////////// // TwxPDFDC /////////////////////////////////////////////////////////// class TwxPDFDC : public wxDC { enum { PDF_IMG_CACHE_SIZE = 32 }; protected: TwxPDFDC(); // Dummy constructor for dynamic construction bool IsValidFontFile(const char* strFontFile) const; bool GetFontFamily(const wxFont& font, wxString& file, wxString& family) const; public: // Recommended constructor TwxPDFDC(const wxPrintData& data, const char* strFilename); ~TwxPDFDC(); virtual bool Ok() const; bool DoFloodFill(wxCoord x1, wxCoord y1, const wxColour &col, int style=wxFLOOD_SURFACE ); bool DoGetPixel(wxCoord x1, wxCoord y1, wxColour *col) const; void DoDrawLine(wxCoord x1, wxCoord y1, wxCoord x2, wxCoord y2); void DoCrossHair(wxCoord x, wxCoord y) ; void DoDrawArc(wxCoord x1,wxCoord y1,wxCoord x2,wxCoord y2,wxCoord xc,wxCoord yc); void DoDrawEllipticArc(wxCoord x,wxCoord y,wxCoord w,wxCoord h,double sa,double ea); void DoDrawPoint(wxCoord x, wxCoord y); void DoDrawLines(int n, wxPoint points[], wxCoord xoffset = 0, wxCoord yoffset = 0); void DoDrawPolygon(int n, wxPoint points[], wxCoord xoffset = 0, wxCoord yoffset = 0, int fillStyle=wxODDEVEN_RULE); void DoDrawRectangle(wxCoord x, wxCoord y, wxCoord width, wxCoord height); void DoDrawRoundedRectangle(wxCoord x, wxCoord y, wxCoord width, wxCoord height, double radius = 20); void DoDrawEllipse(wxCoord x, wxCoord y, wxCoord width, wxCoord height); void DoGradientFillLinear(const wxRect& rect, const wxColour& initialColour, const wxColour& destColour, wxDirection nDirection); void DoDrawSpline(wxList *points); 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); bool CanDrawBitmap() const { return true; } void DoDrawIcon( const wxIcon& icon, wxCoord x, wxCoord y ); void DoDrawBitmap( const wxBitmap& bitmap, wxCoord x, wxCoord y, bool useMask=FALSE ); void DoDrawImage( const wxString& name, const wxRect& dst ); void DrawImage( const wxString& name, const wxRect& dst ) { DoDrawImage(name, dst); } void DoDrawText(const wxString& text, wxCoord x, wxCoord y ); void DoDrawRotatedText(const wxString& text, wxCoord x, wxCoord y, double angle); void Clear(); void SetFont( const wxFont& font ); void SetPen( const wxPen& pen ); void SetBrush( const wxBrush& brush ); void SetLogicalFunction( int function ); void SetBackground( const wxBrush& brush ); void DoSetClippingRegion(wxCoord x, wxCoord y, wxCoord width, wxCoord height); void DestroyClippingRegion(); void DoSetClippingRegionAsRegion( const wxRegion &WXUNUSED(clip) ) { } bool StartDoc(const wxString& message); void EndDoc(); void StartPage(); void EndPage(); wxCoord GetCharHeight() const; wxCoord GetCharWidth() const; bool CanGetTextExtent() const { return true; } void DoGetTextExtent(const wxString& string, wxCoord *x, wxCoord *y, wxCoord *descent = (wxCoord *) NULL, wxCoord *externalLeading = (wxCoord *) NULL, wxFont *theFont = (wxFont *) NULL ) const; void DoGetSize(int* width, int* height) const; void DoGetSizeMM(int *width, int *height) const; // Resolution in pixels per logical inch wxSize GetPPI() const; void SetAxisOrientation( bool xLeftRight, bool yBottomUp ); void SetDeviceOrigin( wxCoord x, wxCoord y ); void SetBackgroundMode(int WXUNUSED(mode)) { } void SetPalette(const wxPalette& WXUNUSED(palette)) { } const wxPrintData& GetPrintData() const { return m_printData; } void SetPrintData(const wxPrintData& data) { m_printData = data; } virtual int GetDepth() const { return 24; } const wxString& OutputFile() const { return m_fileName; } protected: void SetFontColor(const wxColor& color) const; int GetBitmapHandle(const wxBitmap& bitmap) const; int GetImageHandle(const wxString& name); PDF *m_p; PDFlib_api *m_PDFlib; wxPrintData m_printData; wxString m_fileName; wxColor m_color; int m_pageNumber; int m_fontnr; bool m_clipping; bool m_topDown; bool m_pageopen; double m_fontsize; // m_ascent + m_descent double m_ascent, m_descent, m_leading; wxString m_filenames[PDF_IMG_CACHE_SIZE]; int m_handles[PDF_IMG_CACHE_SIZE]; int m_cacheidx; DECLARE_DYNAMIC_CLASS(TwxPDFDC) }; #endif