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

FXDCPrint.h

Go to the documentation of this file.
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,2006 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.30 2006/01/22 17:58:00 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   FXint      pxmin;                   // min X coord in content
00116   FXint      pymin;                   // min Y coord in content
00117   FXint      pxmax;                   // max X coord in content
00118   FXint      pymax;                   // max Y coord in content
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   /// Construct
00129   FXDCPrint(FXApp* a);
00130 
00131   /// Generate print job prolog
00132   FXbool beginPrint(FXPrinter& job);
00133 
00134   /// Generate print job epilog
00135   FXbool endPrint();
00136 
00137   /// Generate begin of page
00138   FXbool beginPage(FXuint page=1);
00139 
00140   /// Generate end of page
00141   FXbool endPage();
00142 
00143   FXbool setContentRange(FXint pxmin, FXint pymin, FXint pxmax, FXint pymax);
00144 
00145   /// Draw points
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   /// Draw lines
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   /// Draw rectangles
00157   virtual void drawRectangle(FXint x,FXint y,FXint w,FXint h);
00158   virtual void drawRectangles(const FXRectangle* rectangles,FXuint nrectangles);
00159 
00160   /// Draw rounded rectangle with ellipse with ew and ellips height eh
00161   virtual void drawRoundRectangle(FXint x,FXint y,FXint w,FXint h,FXint ew,FXint eh);
00162 
00163   /// Draw arcs
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   /// Draw ellipse
00168   virtual void drawEllipse(FXint x,FXint y,FXint w,FXint h);
00169 
00170   /// Filled rectangles
00171   virtual void fillRectangle(FXint x,FXint y,FXint w,FXint h);
00172   virtual void fillRectangles(const FXRectangle* rectangles,FXuint nrectangles);
00173 
00174   /// Filled rounded rectangle with ellipse with ew and ellips height eh
00175   virtual void fillRoundRectangle(FXint x,FXint y,FXint w,FXint h,FXint ew,FXint eh);
00176 
00177   /// Fill chord
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   /// Draw arcs
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   /// Fill ellipse
00186   virtual void fillEllipse(FXint x,FXint y,FXint w,FXint h);
00187 
00188   /// Filled polygon
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   /// Filled polygon with relative points
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   /// Draw hashed box
00199   virtual void drawHashBox(FXint x,FXint y,FXint w,FXint h,FXint b=1);
00200 
00201   /// Draw area from source
00202   virtual void drawArea(const FXDrawable* source,FXint sx,FXint sy,FXint sw,FXint sh,FXint dx,FXint dy);
00203 
00204   /// Draw area stretched area from source
00205   virtual void drawArea(const FXDrawable* source,FXint sx,FXint sy,FXint sw,FXint sh,FXint dx,FXint dy,FXint dw,FXint dh);
00206 
00207   /// Draw image
00208   virtual void drawImage(const FXImage* image,FXint dx,FXint dy);
00209 
00210   /// Draw bitmap
00211   virtual void drawBitmap(const FXBitmap* bitmap,FXint dx,FXint dy);
00212 
00213   /// Draw icon
00214   virtual void drawIcon(const FXIcon* icon,FXint dx,FXint dy);
00215   virtual void drawIconShaded(const FXIcon* icon,FXint dx,FXint dy);
00216   virtual void drawIconSunken(const FXIcon* icon,FXint dx,FXint dy);
00217 
00218   /// Draw string with base line starting at x, y
00219   virtual void drawText(FXint x,FXint y,const FXString& string);
00220   virtual void drawText(FXint x,FXint y,const FXchar* string,FXuint length);
00221 
00222   /// Draw text starting at x, y over filled background
00223   virtual void drawImageText(FXint x,FXint y,const FXString& string);
00224   virtual void drawImageText(FXint x,FXint y,const FXchar* string,FXuint length);
00225 
00226   /// Set foreground/background drawing color
00227   virtual void setForeground(FXColor clr);
00228   virtual void setBackground(FXColor clr);
00229 
00230   /// Set dash pattern
00231   virtual void setDashes(FXuint dashoffset,const FXchar *dashlist,FXuint n);
00232 
00233   /// Set line width
00234   virtual void setLineWidth(FXuint linewidth=0);
00235 
00236   /// Set line cap style
00237   virtual void setLineCap(FXCapStyle capstyle=CAP_BUTT);
00238 
00239   /// Set line join style
00240   virtual void setLineJoin(FXJoinStyle joinstyle=JOIN_MITER);
00241 
00242   /// Set line style
00243   virtual void setLineStyle(FXLineStyle linestyle=LINE_SOLID);
00244 
00245   /// Set fill style
00246   virtual void setFillStyle(FXFillStyle fillstyle=FILL_SOLID);
00247 
00248   /// Set fill rule
00249   virtual void setFillRule(FXFillRule fillrule=RULE_EVEN_ODD);
00250 
00251   /// Set blit function
00252   virtual void setFunction(FXFunction func=BLT_SRC);
00253 
00254   /// Set the tile
00255   virtual void setTile(FXImage* tile,FXint dx=0,FXint dy=0);
00256 
00257   /// Set the stipple pattern
00258   virtual void setStipple(FXBitmap *stipple,FXint dx=0,FXint dy=0);
00259 
00260   /// Set the stipple pattern
00261   virtual void setStipple(FXStipplePattern stipple,FXint dx=0,FXint dy=0);
00262 
00263   /// Set clip rectangle
00264   virtual void setClipRectangle(FXint x,FXint y,FXint w,FXint h);
00265 
00266   /// Set clip rectangle
00267   virtual void setClipRectangle(const FXRectangle& rectangle);
00268 
00269   /// Clear clipping
00270   virtual void clearClipRectangle();
00271 
00272   /// Set clip mask
00273   virtual void setClipMask(FXBitmap* mask,FXint dx=0,FXint dy=0);
00274 
00275   /// Clear clip mask
00276   virtual void clearClipMask();
00277 
00278   /// Set font to draw text with
00279   virtual void setFont(FXFont *fnt);
00280 
00281   /// Clip drawing by child windows
00282   virtual void clipChildren(FXbool yes);
00283 
00284   /// Temporarily public; do not rely on this!!
00285   void outhex(FXuint hex);
00286   void outf(const char* format,...);
00287 
00288   /// Cleanup
00289   virtual ~FXDCPrint();
00290   };
00291 
00292 }
00293 
00294 #endif

Copyright © 1997-2005 Jeroen van der Zijp