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

FXDC.h

00001 /********************************************************************************
00002 *                                                                               *
00003 *               D e v i c e   C o n t e x t   B a s e   C l a s s               *
00004 *                                                                               *
00005 *********************************************************************************
00006 * Copyright (C) 1999,2004 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: FXDC.h,v 1.29 2004/02/08 17:17:33 fox Exp $                              *
00023 ********************************************************************************/
00024 #ifndef FXDC_H
00025 #define FXDC_H
00026 
00027 namespace FX {
00028 
00029 /// Drawing (BITBLT) functions
00030 enum FXFunction {
00031   BLT_CLR,                        /// D := 0
00032   BLT_SRC_AND_DST,                /// D := S & D
00033   BLT_SRC_AND_NOT_DST,            /// D := S & ~D
00034   BLT_SRC,                        /// D := S
00035   BLT_NOT_SRC_AND_DST,            /// D := ~S & D
00036   BLT_DST,                        /// D := D
00037   BLT_SRC_XOR_DST,                /// D := S ^ D
00038   BLT_SRC_OR_DST,                 /// D := S | D
00039   BLT_NOT_SRC_AND_NOT_DST,        /// D := ~S & ~D  ==  D := ~(S | D)
00040   BLT_NOT_SRC_XOR_DST,            /// D := ~S ^ D
00041   BLT_NOT_DST,                    /// D := ~D
00042   BLT_SRC_OR_NOT_DST,             /// D := S | ~D
00043   BLT_NOT_SRC,                    /// D := ~S
00044   BLT_NOT_SRC_OR_DST,             /// D := ~S | D
00045   BLT_NOT_SRC_OR_NOT_DST,         /// D := ~S | ~D  ==  ~(S & D)
00046   BLT_SET                         /// D := 1
00047   };
00048 
00049 
00050 /// Line Styles
00051 enum FXLineStyle {
00052   LINE_SOLID,                     /// Solid lines
00053   LINE_ONOFF_DASH,                /// On-off dashed lines
00054   LINE_DOUBLE_DASH                /// Double dashed lines
00055   };
00056 
00057 
00058 /// Line Cap Styles
00059 enum FXCapStyle {
00060   CAP_NOT_LAST,                   /// Don't include last end cap
00061   CAP_BUTT,                       /// Butting line end caps
00062   CAP_ROUND,                      /// Round line end caps
00063   CAP_PROJECTING                  /// Projecting line end caps
00064   };
00065 
00066 
00067 /// Line Join Styles
00068 enum FXJoinStyle {
00069   JOIN_MITER,                     /// Mitered or pointy joints
00070   JOIN_ROUND,                     /// Round line joints
00071   JOIN_BEVEL                      /// Beveled or flat joints
00072   };
00073 
00074 
00075 /// Fill Styles
00076 enum FXFillStyle {
00077   FILL_SOLID,                     /// Fill with solid color
00078   FILL_TILED,                     /// Fill with tiled bitmap
00079   FILL_STIPPLED,                  /// Fill where stipple mask is 1
00080   FILL_OPAQUESTIPPLED             /// Fill with foreground where mask is 1, background otherwise
00081   };
00082 
00083 
00084 /// Fill Rules
00085 enum FXFillRule {
00086   RULE_EVEN_ODD,                  /// Even odd polygon filling
00087   RULE_WINDING                    /// Winding rule polygon filling
00088   };
00089 
00090 
00091 /// Stipple/dither patterns
00092 enum FXStipplePattern {
00093   STIPPLE_0         = 0,
00094   STIPPLE_NONE      = 0,
00095   STIPPLE_BLACK     = 0,            /// All ones
00096   STIPPLE_1         = 1,
00097   STIPPLE_2         = 2,
00098   STIPPLE_3         = 3,
00099   STIPPLE_4         = 4,
00100   STIPPLE_5         = 5,
00101   STIPPLE_6         = 6,
00102   STIPPLE_7         = 7,
00103   STIPPLE_8         = 8,
00104   STIPPLE_GRAY      = 8,            /// 50% gray
00105   STIPPLE_9         = 9,
00106   STIPPLE_10        = 10,
00107   STIPPLE_11        = 11,
00108   STIPPLE_12        = 12,
00109   STIPPLE_13        = 13,
00110   STIPPLE_14        = 14,
00111   STIPPLE_15        = 15,
00112   STIPPLE_16        = 16,
00113   STIPPLE_WHITE     = 16,           /// All zeroes
00114   STIPPLE_HORZ      = 17,           /// Horizontal hatch pattern
00115   STIPPLE_VERT      = 18,           /// Vertical hatch pattern
00116   STIPPLE_CROSS     = 19,           /// Cross-hatch pattern
00117   STIPPLE_DIAG      = 20,           /// Diagonal // hatch pattern
00118   STIPPLE_REVDIAG   = 21,           /// Reverse diagonal \\ hatch pattern
00119   STIPPLE_CROSSDIAG = 22            /// Cross-diagonal hatch pattern
00120   };
00121 
00122 
00123 /// Line segment
00124 struct FXSegment {
00125   FXshort x1,y1,x2,y2;
00126   };
00127 
00128 
00129 /// Arc
00130 struct FXArc {
00131   FXshort x,y,w,h,a,b;
00132   };
00133 
00134 
00135 class FXApp;
00136 class FXImage;
00137 class FXBitmap;
00138 class FXIcon;
00139 class FXFont;
00140 class FXDrawable;
00141 class FXRegion;
00142 
00143 
00144 /**
00145 * Abstract Device Context
00146 *
00147 * A Device Context is used to maintain the state of the graphics drawing system.
00148 * Defining your drawing code in terms of the Abstract Device Context allows the
00149 * drawing commands to be rendered on different types of surfaces, such as windows
00150 * and images (FXDCWindow), or on paper (FXDCPrint).
00151 * WYSYWYG may be obtained by using the same identical drawing code in your
00152 * application regardless of the actual device surface being utilized.
00153 */
00154 class FXAPI FXDC {
00155 private:
00156   FXApp           *app;         // Application
00157 protected:
00158   void            *ctx;         // Context handle
00159   FXFont          *font;        // Drawing font
00160   FXStipplePattern pattern;     // Stipple pattern
00161   FXBitmap        *stipple;     // Stipple bitmap
00162   FXImage         *tile;        // Tile image
00163   FXBitmap        *mask;        // Mask bitmap
00164   FXRectangle      clip;        // Clip rectangle
00165   FXColor          fg;          // Foreground color
00166   FXColor          bg;          // Background color
00167   FXuint           width;       // Line width
00168   FXCapStyle       cap;         // Line cap style
00169   FXJoinStyle      join;        // Line join style
00170   FXLineStyle      style;       // Line style
00171   FXFillStyle      fill;        // Fill style
00172   FXFillRule       rule;        // Fill rule
00173   FXFunction       rop;         // RasterOp
00174   FXchar           dashpat[32]; // Line dash pattern data
00175   FXuint           dashlen;     // Line dash pattern length
00176   FXuint           dashoff;     // Line dash pattern offset
00177   FXint            tx;          // Tile dx
00178   FXint            ty;          // Tile dy
00179   FXint            cx;          // Clip x
00180   FXint            cy;          // Clip y
00181 private:
00182   FXDC();
00183   FXDC(const FXDC&);
00184   FXDC &operator=(const FXDC&);
00185 public:
00186 
00187   /// Construct dummy DC
00188   FXDC(FXApp* a);
00189 
00190   /// Get application
00191   FXApp* getApp() const { return app; }
00192 
00193   /// Get context handle
00194   void* context() const { return ctx; }
00195 
00196   /// Read back pixel
00197   virtual FXColor readPixel(FXint x,FXint y);
00198 
00199   /// Draw points
00200   virtual void drawPoint(FXint x,FXint y);
00201   virtual void drawPoints(const FXPoint* points,FXuint npoints);
00202   virtual void drawPointsRel(const FXPoint* points,FXuint npoints);
00203 
00204   /// Draw lines
00205   virtual void drawLine(FXint x1,FXint y1,FXint x2,FXint y2);
00206   virtual void drawLines(const FXPoint* points,FXuint npoints);
00207   virtual void drawLinesRel(const FXPoint* points,FXuint npoints);
00208   virtual void drawLineSegments(const FXSegment* segments,FXuint nsegments);
00209 
00210   /// Draw rectangles
00211   virtual void drawRectangle(FXint x,FXint y,FXint w,FXint h);
00212   virtual void drawRectangles(const FXRectangle* rectangles,FXuint nrectangles);
00213 
00214   /**
00215   * Draw arcs.
00216   * The argument ang1 specifies the start of the arc relative to the
00217   * three-o'clock position from the center, in units of degrees*64.
00218   * The argument ang2 specifies the path and extent of the arc relative
00219   * to the start of the arc, in units of degrees*64.
00220   * The arguments x,y,w,h specify the bounding rectangle.
00221   */
00222   virtual void drawArc(FXint x,FXint y,FXint w,FXint h,FXint ang1,FXint ang2);
00223   virtual void drawArcs(const FXArc* arcs,FXuint narcs);
00224 
00225   /// Filled rectangles
00226   virtual void fillRectangle(FXint x,FXint y,FXint w,FXint h);
00227   virtual void fillRectangles(const FXRectangle* rectangles,FXuint nrectangles);
00228 
00229   /// Fill chord
00230   virtual void fillChord(FXint x,FXint y,FXint w,FXint h,FXint ang1,FXint ang2);
00231   virtual void fillChords(const FXArc* chords,FXuint nchords);
00232 
00233   /// Draw arcs
00234   virtual void fillArc(FXint x,FXint y,FXint w,FXint h,FXint ang1,FXint ang2);
00235   virtual void fillArcs(const FXArc* arcs,FXuint narcs);
00236 
00237   /// Filled polygon
00238   virtual void fillPolygon(const FXPoint* points,FXuint npoints);
00239   virtual void fillConcavePolygon(const FXPoint* points,FXuint npoints);
00240   virtual void fillComplexPolygon(const FXPoint* points,FXuint npoints);
00241 
00242   /// Filled polygon with relative points
00243   virtual void fillPolygonRel(const FXPoint* points,FXuint npoints);
00244   virtual void fillConcavePolygonRel(const FXPoint* points,FXuint npoints);
00245   virtual void fillComplexPolygonRel(const FXPoint* points,FXuint npoints);
00246 
00247   /// Draw hashed box
00248   virtual void drawHashBox(FXint x,FXint y,FXint w,FXint h,FXint b=1);
00249 
00250   /// Draw focus rectangle
00251   virtual void drawFocusRectangle(FXint x,FXint y,FXint w,FXint h);
00252 
00253   /// Draw area from source
00254   virtual void drawArea(const FXDrawable* source,FXint sx,FXint sy,FXint sw,FXint sh,FXint dx,FXint dy);
00255 
00256   /// Draw image
00257   virtual void drawImage(const FXImage* image,FXint dx,FXint dy);
00258 
00259   /// Draw bitmap
00260   virtual void drawBitmap(const FXBitmap* bitmap,FXint dx,FXint dy);
00261 
00262   /// Draw icon
00263   virtual void drawIcon(const FXIcon* icon,FXint dx,FXint dy);
00264   virtual void drawIconShaded(const FXIcon* icon,FXint dx,FXint dy);
00265   virtual void drawIconSunken(const FXIcon* icon,FXint dx,FXint dy);
00266 
00267   /// Draw string
00268   virtual void drawText(FXint x,FXint y,const FXchar* string,FXuint length);
00269   virtual void drawImageText(FXint x,FXint y,const FXchar* string,FXuint length);
00270 
00271   /// Set foreground drawing color
00272   virtual void setForeground(FXColor clr);
00273 
00274   /// Get foreground drawing color
00275   FXColor getForeground() const { return fg; }
00276 
00277   /// Set background drawing color
00278   virtual void setBackground(FXColor clr);
00279 
00280   /// Get background drawing color
00281   FXColor getBackground() const { return bg; }
00282 
00283   /**
00284   * Set dash pattern and dash offset.
00285   * A dash pattern of [1 2 3 4] is a repeating pattern of 1 foreground pixel,
00286   * 2 background pixels, 3 foreground pixels, and 4 background pixels.
00287   * The offset is where in the pattern the system will start counting.
00288   * The maximum length of the dash pattern is 32.
00289   */
00290   virtual void setDashes(FXuint dashoffset,const FXchar *dashpattern,FXuint dashlength);
00291 
00292   /// Get dash pattern
00293   const FXchar* getDashPattern() const { return dashpat; }
00294 
00295   /// Get dash offset
00296   FXuint getDashOffset() const { return dashoff; }
00297 
00298   /// Get dash length
00299   FXuint getDashLength() const { return dashlen; }
00300 
00301   /// Set line width:- 0 means thinnest/fastest possible
00302   virtual void setLineWidth(FXuint linewidth=0);
00303 
00304   /// Get line width
00305   FXuint getLineWidth() const { return width; }
00306 
00307   /// Set line cap style
00308   virtual void setLineCap(FXCapStyle capstyle=CAP_BUTT);
00309 
00310   /// Get line cap style
00311   FXCapStyle getLineCap() const { return cap; }
00312 
00313   /// Set line join style
00314   virtual void setLineJoin(FXJoinStyle joinstyle=JOIN_MITER);
00315 
00316   /// Get line join style
00317   FXJoinStyle getLineJoin() const { return join; }
00318 
00319   /// Set line style
00320   virtual void setLineStyle(FXLineStyle linestyle=LINE_SOLID);
00321 
00322   /// Get line style
00323   FXLineStyle getLineStyle() const { return style; }
00324 
00325   /// Set fill style
00326   virtual void setFillStyle(FXFillStyle fillstyle=FILL_SOLID);
00327 
00328   /// Get fill style
00329   FXFillStyle getFillStyle() const { return fill; }
00330 
00331   /// Set fill rule
00332   virtual void setFillRule(FXFillRule fillrule=RULE_EVEN_ODD);
00333 
00334   /// Get fill rule
00335   FXFillRule getFillRule() const { return rule; }
00336 
00337   /// Set rasterop function
00338   virtual void setFunction(FXFunction func=BLT_SRC);
00339 
00340   /// Get rasterop function
00341   FXFunction getFunction() const { return rop; }
00342 
00343   /// Set the tile image
00344   virtual void setTile(FXImage* image,FXint dx=0,FXint dy=0);
00345 
00346   /// Get the tile image
00347   FXImage *getTile() const { return tile; }
00348 
00349   /// Set the stipple pattern
00350   virtual void setStipple(FXBitmap *bitmap,FXint dx=0,FXint dy=0);
00351 
00352   /// Get stipple bitmap
00353   FXBitmap *getStippleBitmap() const { return stipple; }
00354 
00355   /// Set the stipple pattern
00356   virtual void setStipple(FXStipplePattern pat,FXint dx=0,FXint dy=0);
00357 
00358   /// Get pattern
00359   FXStipplePattern getStipplePattern() const { return pattern; }
00360 
00361   /// Set clip region
00362   virtual void setClipRegion(const FXRegion& region);
00363 
00364   /// Set clip rectangle
00365   virtual void setClipRectangle(FXint x,FXint y,FXint w,FXint h);
00366 
00367   /// Change clip rectangle
00368   virtual void setClipRectangle(const FXRectangle& rectangle);
00369 
00370   /// Return clip rectangle
00371   const FXRectangle& getClipRectangle() const { return clip; }
00372 
00373   /// Return clip x
00374   FXint getClipX() const { return clip.x; }
00375 
00376   /// Return clip y
00377   FXint getClipY() const { return clip.y; }
00378 
00379   /// Return clip width
00380   FXint getClipWidth() const { return clip.w; }
00381 
00382   /// Return clip height
00383   FXint getClipHeight() const { return clip.h; }
00384 
00385   /// Clear clipping
00386   virtual void clearClipRectangle();
00387 
00388   /// Set clip mask
00389   virtual void setClipMask(FXBitmap* bitmap,FXint dx=0,FXint dy=0);
00390 
00391   /// Clear clip mask
00392   virtual void clearClipMask();
00393 
00394   /// Set font to draw text with
00395   virtual void setFont(FXFont *fnt);
00396 
00397   /// Get text font
00398   FXFont* getFont() const { return font; }
00399 
00400   /// Clip against child windows
00401   virtual void clipChildren(FXbool yes);
00402 
00403   /// Destructor
00404   virtual ~FXDC();
00405   };
00406 
00407 }
00408 
00409 #endif

Copyright © 1997-2004 Jeroen van der Zijp