00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
#ifndef FXDCPRINT_H
00025 
#define FXDCPRINT_H
00026 
00027 
#ifndef FXDC_H
00028 
#include "FXDC.h"
00029 
#endif
00030 
00031 
00032 
00033 
namespace FX {
00034 
00035 
class FXApp;
00036 
class FXDrawable;
00037 
class FXImage;
00038 
class FXBitmap;
00039 
class FXIcon;
00040 
class FXFont;
00041 
00042 
00043 
00044 
enum FXPrintFlags {
00045   
PRINT_DEST_PAPER        = 0,    
00046   
PRINT_DEST_FILE         = 1,    
00047   PRINT_PAGES_ALL         = 0,    
00048   PRINT_PAGES_EVEN        = 2,    
00049   PRINT_PAGES_ODD         = 4,    
00050   PRINT_PAGES_RANGE       = 8,    
00051   PRINT_COLLATE_NORMAL    = 0,    
00052   PRINT_COLLATE_REVERSED  = 16,   
00053   PRINT_PORTRAIT          = 0,    
00054   PRINT_LANDSCAPE         = 32,   
00055   PRINT_BLACKANDWHITE     = 0,    
00056   PRINT_COLOR             = 64,   
00057   PRINT_NOBOUNDS          = 128   
00058   };
00059 
00060 
00061 
00062 
enum FXMediaSize {
00063   MEDIA_CUSTOM            = 0,    
00064   MEDIA_USLETTER          = 1,    
00065   MEDIA_LEGAL             = 2,    
00066   MEDIA_A4                = 3,    
00067   MEDIA_ENVELOPE          = 4     
00068   };
00069 
00070 
00071 
00072 
struct FXPSBounds {
00073   FXdouble  xmin;
00074   FXdouble  xmax;
00075   FXdouble  ymin;
00076   FXdouble  ymax;
00077   };
00078 
00079 
00080 
00081 
struct FXAPI FXPrinter {
00082   
FXString name;                          
00083   FXuint   firstpage;                     
00084   FXuint   lastpage;                      
00085   FXuint   currentpage;                   
00086   FXuint   frompage;                      
00087   FXuint   topage;                        
00088   FXuint   mediasize;                     
00089   FXdouble mediawidth;                    
00090   FXdouble mediaheight;                   
00091   FXdouble leftmargin;                    
00092   FXdouble rightmargin;                   
00093   FXdouble topmargin;                     
00094   FXdouble bottommargin;                  
00095   FXuint   numcopies;                     
00096   FXuint   flags;                         
00097   };
00098 
00099 
00100 
00101 class FXAPI FXDCPrint : 
public FXDC {
00102 
00103 protected:
00104   void      *psout;                   
00105   
FXFont    *font;
00106   FXuint     flags;
00107   FXint      Xr,Yr;
00108   FXdouble   mediawidth;              
00109   FXdouble   mediaheight;             
00110   
FXPSBounds mediabb;                 
00111   
FXPSBounds docbb;                   
00112   
FXPSBounds pagebb;                  
00113   FXint      pagecount;               
00114   FXint      nchars;                  
00115   FXint      pxmin;                   
00116   FXint      pymin;                   
00117   FXint      pxmax;                   
00118   FXint      pymax;                   
00119 
protected:
00120   
void bbox(FXfloat x,FXfloat y);
00121   
void tfm(FXfloat& xo,FXfloat& yo,FXfloat xi,FXfloat yi);
00122 
private:
00123   FXDCPrint();
00124   FXDCPrint(
const FXDCPrint&);
00125   FXDCPrint &operator=(
const FXDCPrint&);
00126 
public:
00127 
00128 
00129   FXDCPrint(
FXApp* a);
00130 
00131 
00132   FXbool beginPrint(FXPrinter& job);
00133 
00134 
00135   FXbool endPrint();
00136 
00137 
00138   FXbool beginPage(FXuint page=1);
00139 
00140 
00141   FXbool endPage();
00142 
00143   FXbool setContentRange(FXint pxmin, FXint pymin, FXint pxmax, FXint pymax);
00144 
00145 
00146   
virtual void drawPoint(FXint x,FXint y);
00147   
virtual void drawPoints(
const FXPoint* points,FXuint npoints);
00148   
virtual void drawPointsRel(
const FXPoint* points,FXuint npoints);
00149 
00150 
00151   
virtual void drawLine(FXint x1,FXint y1,FXint x2,FXint y2);
00152   
virtual void drawLines(
const FXPoint* points,FXuint npoints);
00153   
virtual void drawLinesRel(
const FXPoint* points,FXuint npoints);
00154   
virtual void drawLineSegments(
const FXSegment* segments,FXuint nsegments);
00155 
00156 
00157   
virtual void drawRectangle(FXint x,FXint y,FXint w,FXint h);
00158   
virtual void drawRectangles(
const FXRectangle* rectangles,FXuint nrectangles);
00159 
00160 
00161   
virtual void drawRoundRectangle(FXint x,FXint y,FXint w,FXint h,FXint ew,FXint eh);
00162 
00163 
00164   
virtual void drawArc(FXint x,FXint y,FXint w,FXint h,FXint ang1,FXint ang2);
00165   
virtual void drawArcs(
const FXArc* arcs,FXuint narcs);
00166 
00167 
00168   
virtual void drawEllipse(FXint x,FXint y,FXint w,FXint h);
00169 
00170 
00171   
virtual void fillRectangle(FXint x,FXint y,FXint w,FXint h);
00172   
virtual void fillRectangles(
const FXRectangle* rectangles,FXuint nrectangles);
00173 
00174 
00175   
virtual void fillRoundRectangle(FXint x,FXint y,FXint w,FXint h,FXint ew,FXint eh);
00176 
00177 
00178   
virtual void fillChord(FXint x,FXint y,FXint w,FXint h,FXint ang1,FXint ang2);
00179   
virtual void fillChords(
const FXArc* chords,FXuint nchords);
00180 
00181 
00182   
virtual void fillArc(FXint x,FXint y,FXint w,FXint h,FXint ang1,FXint ang2);
00183   
virtual void fillArcs(
const FXArc* arcs,FXuint narcs);
00184 
00185 
00186   
virtual void fillEllipse(FXint x,FXint y,FXint w,FXint h);
00187 
00188 
00189   
virtual void fillPolygon(
const FXPoint* points,FXuint npoints);
00190   
virtual void fillConcavePolygon(
const FXPoint* points,FXuint npoints);
00191   
virtual void fillComplexPolygon(
const FXPoint* points,FXuint npoints);
00192 
00193 
00194   
virtual void fillPolygonRel(
const FXPoint* points,FXuint npoints);
00195   
virtual void fillConcavePolygonRel(
const FXPoint* points,FXuint npoints);
00196   
virtual void fillComplexPolygonRel(
const FXPoint* points,FXuint npoints);
00197 
00198 
00199   
virtual void drawHashBox(FXint x,FXint y,FXint w,FXint h,FXint b=1);
00200 
00201 
00202   
virtual void drawArea(
const FXDrawable* source,FXint sx,FXint sy,FXint sw,FXint sh,FXint dx,FXint dy);
00203 
00204 
00205   
virtual void drawImage(
const FXImage* image,FXint dx,FXint dy);
00206 
00207 
00208   
virtual void drawBitmap(
const FXBitmap* bitmap,FXint dx,FXint dy);
00209 
00210 
00211   
virtual void drawIcon(
const FXIcon* icon,FXint dx,FXint dy);
00212   
virtual void drawIconShaded(
const FXIcon* icon,FXint dx,FXint dy);
00213   
virtual void drawIconSunken(
const FXIcon* icon,FXint dx,FXint dy);
00214 
00215 
00216   
virtual void drawText(FXint x,FXint y,
const FXchar* string,FXuint length);
00217   
virtual void drawImageText(FXint x,FXint y,
const FXchar* string,FXuint length);
00218 
00219 
00220   
virtual void setForeground(FXColor clr);
00221   
virtual void setBackground(FXColor clr);
00222 
00223 
00224   
virtual void setDashes(FXuint dashoffset,
const FXchar *dashlist,FXuint n);
00225 
00226 
00227   
virtual void setLineWidth(FXuint linewidth=0);
00228 
00229 
00230   
virtual void setLineCap(FXCapStyle capstyle=CAP_BUTT);
00231 
00232 
00233   
virtual void setLineJoin(FXJoinStyle joinstyle=JOIN_MITER);
00234 
00235 
00236   
virtual void setLineStyle(FXLineStyle linestyle=LINE_SOLID);
00237 
00238 
00239   
virtual void setFillStyle(FXFillStyle fillstyle=FILL_SOLID);
00240 
00241 
00242   
virtual void setFillRule(FXFillRule fillrule=RULE_EVEN_ODD);
00243 
00244 
00245   
virtual void setFunction(FXFunction func=BLT_SRC);
00246 
00247 
00248   
virtual void setTile(
FXImage* tile,FXint dx=0,FXint dy=0);
00249 
00250 
00251   
virtual void setStipple(
FXBitmap *stipple,FXint dx=0,FXint dy=0);
00252 
00253 
00254   
virtual void setStipple(FXStipplePattern stipple,FXint dx=0,FXint dy=0);
00255 
00256 
00257   
virtual void setClipRectangle(FXint x,FXint y,FXint w,FXint h);
00258 
00259 
00260   
virtual void setClipRectangle(
const FXRectangle& rectangle);
00261 
00262 
00263   
virtual void clearClipRectangle();
00264 
00265 
00266   
virtual void setClipMask(
FXBitmap* mask,FXint dx=0,FXint dy=0);
00267 
00268 
00269   
virtual void clearClipMask();
00270 
00271 
00272   
virtual void setFont(
FXFont *fnt);
00273 
00274 
00275   
virtual void clipChildren(FXbool yes);
00276 
00277 
00278   
void outhex(FXuint hex);
00279   
void outf(
const char* format,...);
00280 
00281 
00282   
virtual ~FXDCPrint();
00283   };
00284 
00285 }
00286 
00287 
#endif