Main Page   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members

FXDCPrint.h

00001 /********************************************************************************
00002 *                                                                               *
00003 *           D e v i c e   C o n t e x t   F o r   P r i n t i n g               *
00004 *                                                                               *
00005 *********************************************************************************
00006 * Copyright (C) 1998,2002 by Jeroen van der Zijp.   All Rights Reserved.        *
00007 *********************************************************************************
00008 * This library is free software; you can redistribute it and/or                 *
00009 * modify it under the terms of the GNU Lesser General Public                    *
00010 * License as published by the Free Software Foundation; either                  *
00011 * version 2.1 of the License, or (at your option) any later version.            *
00012 *                                                                               *
00013 * This library is distributed in the hope that it will be useful,               *
00014 * but WITHOUT ANY WARRANTY; without even the implied warranty of                *
00015 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU             *
00016 * Lesser General Public License for more details.                               *
00017 *                                                                               *
00018 * You should have received a copy of the GNU Lesser General Public              *
00019 * License along with this library; if not, write to the Free Software           *
00020 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA.    *
00021 *********************************************************************************
00022 * $Id: FXDCPrint.h,v 1.19 2002/06/10 01:24:09 fox Exp $                         *
00023 ********************************************************************************/
00024 #ifndef FXDCPRINT_H
00025 #define FXDCPRINT_H
00026 
00027 #ifndef FXDC_H
00028 #include "FXDC.h"
00029 #endif
00030 
00031 //////////////////////////////  UNDER DEVELOPMENT  //////////////////////////////
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 /// Printer flags
00044 enum FXPrintFlags {
00045   PRINT_DEST_PAPER        = 0,    /// Send print to paper
00046   PRINT_DEST_FILE         = 1,    /// Send print to file
00047   PRINT_PAGES_ALL         = 0,    /// Print all pages
00048   PRINT_PAGES_EVEN        = 2,    /// Print even pages only
00049   PRINT_PAGES_ODD         = 4,    /// Print odd pages only
00050   PRINT_PAGES_RANGE       = 8,    /// Print range of pages
00051   PRINT_COLLATE_NORMAL    = 0,    /// Normal collate order
00052   PRINT_COLLATE_REVERSED  = 16,   /// Reversed collate order
00053   PRINT_PORTRAIT          = 0,    /// Portrait orientation
00054   PRINT_LANDSCAPE         = 32,   /// Landscape orientation
00055   PRINT_BLACKANDWHITE     = 0,    /// Black and white output
00056   PRINT_COLOR             = 64,   /// Color output
00057   PRINT_NOBOUNDS          = 128   /// Must determine bounding box
00058   };
00059 
00060 
00061 /// Printer media size
00062 enum FXMediaSize {
00063   MEDIA_CUSTOM            = 0,    /// Custom paper size
00064   MEDIA_USLETTER          = 1,    /// US Letter size
00065   MEDIA_LEGAL             = 2,    /// US Legal size
00066   MEDIA_A4                = 3,    /// A4
00067   MEDIA_ENVELOPE          = 4     /// #10 Envelope
00068   };
00069 
00070 
00071 /// Bounding box
00072 struct FXPSBounds {
00073   FXdouble  xmin;
00074   FXdouble  xmax;
00075   FXdouble  ymin;
00076   FXdouble  ymax;
00077   };
00078 
00079 
00080 /// Describes printer
00081 struct FXAPI FXPrinter {
00082   FXString name;                          /// Printer name
00083   FXuint   firstpage;                     /// First page that can be printed
00084   FXuint   lastpage;                      /// Last page that can be printed
00085   FXuint   currentpage;                   /// Current page to print
00086   FXuint   frompage;                      /// On output, this is the first page to print
00087   FXuint   topage;                        /// On output, last page to print
00088   FXuint   mediasize;                     /// Media size index
00089   FXdouble mediawidth;                    /// Width of paper in points [1/72 of an inch]
00090   FXdouble mediaheight;                   /// Height of paper in points
00091   FXdouble leftmargin;                    /// Left margin
00092   FXdouble rightmargin;                   /// Right margin
00093   FXdouble topmargin;                     /// Top margin
00094   FXdouble bottommargin;                  /// Bottom margin
00095   FXuint   numcopies;                     /// Number of copies
00096   FXuint   flags;                         /// Flags
00097   };
00098 
00099 
00100 /// Postscript Printer Device Context
00101 class FXAPI FXDCPrint : public FXDC {
00102   friend class FXGLViewer; // This is TEMPORARY!!!
00103 protected:
00104   void      *psout;                   // File Stream for PS output
00105   FXFont    *font;
00106   FXuint     flags;
00107   FXint      Xr,Yr;
00108   FXdouble   mediawidth;              // Media width
00109   FXdouble   mediaheight;             // Media height
00110   FXPSBounds mediabb;                 // Media bounding box
00111   FXPSBounds docbb;                   // Document bounding box
00112   FXPSBounds pagebb;                  // Page bounding box
00113   FXint      pagecount;               // Number of pages printed
00114   FXint      nchars;                  // Number of characters on a line
00115 protected:
00116   void outhex(FXuint hex);
00117   void outf(const char* format,...);
00118   void bbox(FXfloat x,FXfloat y);
00119   void tfm(FXfloat& xo,FXfloat& yo,FXfloat xi,FXfloat yi);
00120 private:
00121   FXDCPrint();
00122   FXDCPrint(const FXDCPrint&);
00123   FXDCPrint &operator=(const FXDCPrint&);
00124 public:
00125 
00126   /// Construct
00127   FXDCPrint(FXApp* a);
00128 
00129   /// Generate print job prolog
00130   FXbool beginPrint(FXPrinter& job);
00131 
00132   /// Generate print job epilog
00133   FXbool endPrint();
00134 
00135   /// Generate begin of page
00136   FXbool beginPage(FXuint page=1);
00137 
00138   /// Generate end of page
00139   FXbool endPage();
00140 
00141   /// Draw points
00142   virtual void drawPoint(FXint x,FXint y);
00143   virtual void drawPoints(const FXPoint* points,FXuint npoints);
00144   virtual void drawPointsRel(const FXPoint* points,FXuint npoints);
00145 
00146   /// Draw lines
00147   virtual void drawLine(FXint x1,FXint y1,FXint x2,FXint y2);
00148   virtual void drawLines(const FXPoint* points,FXuint npoints);
00149   virtual void drawLinesRel(const FXPoint* points,FXuint npoints);
00150   virtual void drawLineSegments(const FXSegment* segments,FXuint nsegments);
00151 
00152   /// Draw rectangles
00153   virtual void drawRectangle(FXint x,FXint y,FXint w,FXint h);
00154   virtual void drawRectangles(const FXRectangle* rectangles,FXuint nrectangles);
00155 
00156   /// Draw arcs
00157   virtual void drawArc(FXint x,FXint y,FXint w,FXint h,FXint ang1,FXint ang2);
00158   virtual void drawArcs(const FXArc* arcs,FXuint narcs);
00159 
00160   /// Filled rectangles
00161   virtual void fillRectangle(FXint x,FXint y,FXint w,FXint h);
00162   virtual void fillRectangles(const FXRectangle* rectangles,FXuint nrectangles);
00163 
00164   /// Fill chord
00165   virtual void fillChord(FXint x,FXint y,FXint w,FXint h,FXint ang1,FXint ang2);
00166   virtual void fillChords(const FXArc* chords,FXuint nchords);
00167   
00168   /// Draw arcs
00169   virtual void fillArc(FXint x,FXint y,FXint w,FXint h,FXint ang1,FXint ang2);
00170   virtual void fillArcs(const FXArc* arcs,FXuint narcs);
00171 
00172   /// Filled polygon
00173   virtual void fillPolygon(const FXPoint* points,FXuint npoints);
00174   virtual void fillConcavePolygon(const FXPoint* points,FXuint npoints);
00175   virtual void fillComplexPolygon(const FXPoint* points,FXuint npoints);
00176 
00177   /// Filled polygon with relative points
00178   virtual void fillPolygonRel(const FXPoint* points,FXuint npoints);
00179   virtual void fillConcavePolygonRel(const FXPoint* points,FXuint npoints);
00180   virtual void fillComplexPolygonRel(const FXPoint* points,FXuint npoints);
00181 
00182   /// Draw hashed box
00183   virtual void drawHashBox(FXint x,FXint y,FXint w,FXint h,FXint b=1);
00184 
00185   /// Draw area from source
00186   virtual void drawArea(const FXDrawable* source,FXint sx,FXint sy,FXint sw,FXint sh,FXint dx,FXint dy);
00187 
00188   /// Draw image
00189   virtual void drawImage(const FXImage* image,FXint dx,FXint dy);
00190 
00191   /// Draw bitmap
00192   virtual void drawBitmap(const FXBitmap* bitmap,FXint dx,FXint dy);
00193 
00194   /// Draw icon
00195   virtual void drawIcon(const FXIcon* icon,FXint dx,FXint dy);
00196   virtual void drawIconShaded(const FXIcon* icon,FXint dx,FXint dy);
00197   virtual void drawIconSunken(const FXIcon* icon,FXint dx,FXint dy);
00198 
00199   /// Draw string
00200   virtual void drawText(FXint x,FXint y,const FXchar* string,FXuint length);
00201   virtual void drawImageText(FXint x,FXint y,const FXchar* string,FXuint length);
00202 
00203   /// Set foreground/background drawing color
00204   virtual void setForeground(FXColor clr);
00205   virtual void setBackground(FXColor clr);
00206 
00207   /// Set dash pattern
00208   virtual void setDashes(FXuint dashoffset,const FXchar *dashlist,FXuint n);
00209 
00210   /// Set line width
00211   virtual void setLineWidth(FXuint linewidth=0);
00212 
00213   /// Set line cap style
00214   virtual void setLineCap(FXCapStyle capstyle=CAP_BUTT);
00215 
00216   /// Set line join style
00217   virtual void setLineJoin(FXJoinStyle joinstyle=JOIN_MITER);
00218 
00219   /// Set line style
00220   virtual void setLineStyle(FXLineStyle linestyle=LINE_SOLID);
00221 
00222   /// Set fill style
00223   virtual void setFillStyle(FXFillStyle fillstyle=FILL_SOLID);
00224 
00225   /// Set fill rule
00226   virtual void setFillRule(FXFillRule fillrule=RULE_EVEN_ODD);
00227 
00228   /// Set blit function
00229   virtual void setFunction(FXFunction func=BLT_SRC);
00230 
00231   /// Set the tile
00232   virtual void setTile(FXImage* tile,FXint dx=0,FXint dy=0);
00233 
00234   /// Set the stipple pattern
00235   virtual void setStipple(FXBitmap *stipple,FXint dx=0,FXint dy=0);
00236 
00237   /// Set the stipple pattern
00238   virtual void setStipple(FXStipplePattern stipple,FXint dx=0,FXint dy=0);
00239 
00240   /// Set clip rectangle
00241   virtual void setClipRectangle(FXint x,FXint y,FXint w,FXint h);
00242 
00243   /// Set clip rectangle
00244   virtual void setClipRectangle(const FXRectangle& rectangle);
00245 
00246   /// Clear clipping
00247   virtual void clearClipRectangle();
00248 
00249   /// Set clip mask
00250   virtual void setClipMask(FXBitmap* mask,FXint dx=0,FXint dy=0);
00251 
00252   /// Clear clip mask
00253   virtual void clearClipMask();
00254 
00255   /// Set font to draw text with
00256   virtual void setTextFont(FXFont *fnt);
00257 
00258   /// Clip drawing by child windows
00259   virtual void clipChildren(FXbool yes);
00260 
00261   /// Cleanup
00262   virtual ~FXDCPrint();
00263   };
00264 
00265 }
00266 
00267 #endif