canstate.h
上传用户:hzhsqp
上传日期:2007-01-06
资源大小:1600k
文件大小:21k
源码类别:

IP电话/视频会议

开发平台:

Visual C++

  1. /*
  2.  * canstate.h
  3.  *
  4.  * Canvas state class.
  5.  *
  6.  * Portable Windows Library
  7.  *
  8.  * Copyright (c) 1993-1998 Equivalence Pty. Ltd.
  9.  *
  10.  * The contents of this file are subject to the Mozilla Public License
  11.  * Version 1.0 (the "License"); you may not use this file except in
  12.  * compliance with the License. You may obtain a copy of the License at
  13.  * http://www.mozilla.org/MPL/
  14.  *
  15.  * Software distributed under the License is distributed on an "AS IS"
  16.  * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
  17.  * the License for the specific language governing rights and limitations
  18.  * under the License.
  19.  *
  20.  * The Original Code is Portable Windows Library.
  21.  *
  22.  * The Initial Developer of the Original Code is Equivalence Pty. Ltd.
  23.  *
  24.  * Portions are Copyright (C) 1993 Free Software Foundation, Inc.
  25.  * All Rights Reserved.
  26.  *
  27.  * Contributor(s): ______________________________________.
  28.  *
  29.  * $Log: canstate.h,v $
  30.  * Revision 1.15  1999/03/10 03:49:50  robertj
  31.  * More documentation adjustments.
  32.  *
  33.  * Revision 1.14  1999/03/09 08:01:47  robertj
  34.  * Changed comments for doc++ support (more to come).
  35.  *
  36.  * Revision 1.13  1998/09/23 06:22:53  robertj
  37.  * Added open source copyright license.
  38.  *
  39.  * Revision 1.12  1997/07/08 13:02:04  robertj
  40.  * DLL support.
  41.  *
  42.  * Revision 1.11  1996/08/17 10:00:28  robertj
  43.  * Changes for Windows DLL support.
  44.  *
  45.  * Revision 1.10  1995/10/14 14:52:55  robertj
  46.  * Changed return values to references for efficency.
  47.  *
  48.  * Revision 1.9  1995/03/14 12:41:00  robertj
  49.  * Updated documentation to use HTML codes.
  50.  *
  51.  * Revision 1.8  1995/01/27  11:00:44  robertj
  52.  * Added pattern origin.
  53.  *
  54.  * Revision 1.7  1995/01/21  05:12:47  robertj
  55.  * Documentation.
  56.  * Added origin changing function, simpler than setting rectangles.
  57.  *
  58.  * Revision 1.6  1994/11/24  11:48:28  robertj
  59.  * Documentation.
  60.  *
  61.  * Revision 1.5  1994/08/23  11:32:52  robertj
  62.  * Oops
  63.  *
  64.  * Revision 1.4  1994/08/22  00:46:48  robertj
  65.  * Added pragma fro GNU C++ compiler.
  66.  *
  67.  * Revision 1.3  1994/03/07  07:38:19  robertj
  68.  * Major enhancementsacross the board.
  69.  *
  70.  * Revision 1.2  1993/12/09  16:11:23  robertj
  71.  * Removed canvas state "owner" canvas.
  72.  *
  73.  * Revision 1.1  1993/10/16  20:33:20  robertj
  74.  * Initial revision
  75.  *
  76.  */
  77. #define _PCANVASSTATE
  78. #ifdef __GNUC__
  79. #pragma interface
  80. #endif
  81. class PCanvas;
  82. /**A class representing the state of a PCanvas. The state of a canvas is the
  83.    current font, colours, line & fill modes etc that describes the way in which
  84.    drawing operations are performed. Note that this class is not descended
  85.    from the standard PObject class as multiple inheritance is used and common
  86.    ancestors should be avoided at all costs.
  87. */
  88. class PCanvasState {
  89.   public:
  90.    /**Create a new canvas state with default values. These values are:
  91. begin{description}
  92.           item[penStyle]      Solid
  93.           item[penWidth]      0            Hairline
  94.           item[penMode]       SrcCopy
  95.           item[penFgColour]   Black
  96.           item[penBkColour]   White
  97.           item[fillFgColour]  Clear
  98.           item[fillBkColour]  Clear
  99.           item[fillPattern]   Solid
  100.           item[fillMode]      SrcCopy
  101.           item[font]          System, 10 point
  102.           item[textFgColour]  Black
  103.           item[textBkColour]  White
  104.           item[palette]       Empty palette
  105.           item[polyFillMode]  Winding
  106.           item[viewport]      (0, 0, 100, 100)   Scaling to pixels, no offset
  107.           item[map]           (0, 0, 100, 100)
  108. end{description}
  109.      */
  110.     PCanvasState();
  111.       /** Create a copy of the canvas state. */
  112.     PCanvasState(
  113.       const PCanvasState & s  /// Source canvas state
  114.     );
  115.     /**@name New functions for class */
  116.    /**This enum describes the types of styles that the pen uses. The pen is
  117.        used to draw lines as well as border about other shapes eg rectangles,
  118.        ellipses etc.
  119.      */
  120.     enum PenStyles {
  121.       /// Drawn with all pixels connected
  122.       Solid,    
  123.       /// Drawn with short line segments with equal sized gaps
  124.       Dotted,   
  125.       /// Drawn with long line segments with short gaps
  126.       Dashed,   
  127.       /// Drawn with alternating dots and dashes
  128.       DotDashed 
  129.     };
  130.    /**Set the pen style to be used by future drawing operations. The pen is
  131.        used to draw lines as well as border about other shapes eg rectangles,
  132.        ellipses etc.
  133.        @return
  134.        TRUE if the pen style was changed, FALSE if the new pen style was
  135.        identical to the current setting.
  136.      */
  137.     virtual BOOL SetPenStyle(
  138.       PenStyles style   /// New pen style to set in the canvas state
  139.     );
  140.    /**Get the pen style to be used by future drawing operations. The pen is
  141.        used to draw lines as well as border about other shapes eg rectangles,
  142.        ellipses etc.
  143.        @return
  144.        the current pen style used in the canvas state.
  145.      */
  146.     PenStyles GetPenStyle() const;
  147.    /**Set the pen width to be used by future drawing operations. The pen is
  148.        used to draw lines as well as border about other shapes eg rectangles,
  149.        ellipses etc.
  150.        @return
  151.        TRUE if the pen width was changed, FALSE if the new pen width was
  152.        identical to the current setting.
  153.      */
  154.     virtual BOOL SetPenWidth(
  155.       int width
  156.      /**Width of lines drawn by the pen in the current coordinate system used
  157.          by the canvas state. A value of 0 indicates "hairline" or, by
  158.          definition, one pixel wide regardless of the current coordinate
  159.          transform.
  160.        */
  161.     );
  162.    /**Get the pen width to be used by future drawing operations. The pen is
  163.        used to draw lines as well as border about other shapes eg rectangles,
  164.        ellipses etc.
  165.        @return
  166.        the current pen width used in the canvas state.
  167.      */
  168.     int GetPenWidth() const;
  169.    /**This enum describes the set of transfer modes for pixels as they are
  170.        drawn. As a drawing operation is performed (pen or fill) pixels are
  171.        placed on the canvas as a combination of the drawing colour eg pen
  172.        foreground colour, and the current colour of the canvas pixel. Many of
  173.        these modes may have odd behaviour on colour canvases and are really
  174.        only useful if the combination is made between black and white (1 bit)
  175.        pixels.
  176.        If the logical modes, eg SrcAndDst, are used on a colour canvas then
  177.        the boolean states for source and destination are derived by comparing
  178.        the colour to the current drawing foreground colour.
  179.      */
  180.     enum DrawingModes {
  181.      /**Pixels are drawn in the requested colour
  182.        */
  183.       SrcCopy,
  184.      /**Pixels are drawn in the inverse of the colour
  185.        */
  186.       SrcInvert,
  187.      /**The result is the AND of the requested colour and the current colour
  188.          of the canvas pixel.
  189.        */
  190.       SrcAndDst,
  191.      /**The result is the AND of the inverse of the requested colour and the
  192.          current colour of the canvas pixel.
  193.        */
  194.       NotSrcAndDst,
  195.      /**The result is the AND of the requested colour and the inverse of the
  196.          current colour of the canvas pixel.
  197.        */
  198.       SrcAndNotDst,
  199.      /**The result is the inverse of the AND of the requested colour and the
  200.          current colour of the canvas pixel.
  201.        */
  202.       InvertSrcAndDst,
  203.      /**The result is the OR of the requested colour and the current colour
  204.          of the canvas pixel.
  205.        */
  206.       SrcOrDst,
  207.      /**The result is the OR of the inverse of the requested colour and the
  208.          current colour of the canvas pixel.
  209.        */
  210.       NotSrcOrDst,
  211.      /**The result is the OR of the requested colour and the inverse of the
  212.          current colour of the canvas pixel.
  213.        */
  214.       SrcOrNotDst,
  215.      /**The result is the inverse of the OR of the requested colour and the
  216.          current colour of the canvas pixel.
  217.        */
  218.       InvertSrcOrDst,
  219.      /**The result is the eXclusive OR of the requested colour and the
  220.          current colour of the canvas pixel.
  221.        */
  222.       SrcXorDst,
  223.      /**The result is the inverse of the eXclusive OR of the requested colour
  224.          and the current colour of the canvas pixel.
  225.        */
  226.       InvertSrcXorDst,
  227.      /**Pixels on the canvas are inverted.
  228.        */
  229.       InvertDst,
  230.      /**No change is made to the canvas pixels.
  231.        */
  232.       CopyDst
  233.     };
  234.    /**Set the pen mode to be used by future drawing operations. The pen is
  235.        used to draw lines as well as border about other shapes eg rectangles,
  236.        ellipses etc.
  237.        @return
  238.        TRUE if the pen mode was changed, FALSE if the new pen mode was
  239.        identical to the current setting.
  240.      */
  241.     virtual BOOL SetPenMode(
  242.       DrawingModes mode /// New mode to be used for pen drawing operations.
  243.     );
  244.    /**Get the pen mode to be used by future drawing operations. The pen is
  245.        used to draw lines as well as border about other shapes eg rectangles,
  246.        ellipses etc.
  247.        @return
  248.        the current pen mode used in the canvas state.
  249.      */
  250.     DrawingModes GetPenMode() const;
  251.    /**Set the pen foreground colour to be used by future drawing operations.
  252.        The pen is used to draw lines as well as border about other shapes eg
  253.        rectangles, ellipses etc.
  254.        @return
  255.        TRUE if the pen foreground colour was changed, FALSE if the new pen
  256.        foreground colour was identical to the current setting.
  257.      */
  258.     virtual BOOL SetPenFgColour(
  259.       const PColour & colour  /// New colour for the pen foreground
  260.     );
  261.    /**Get the pen foreground colour to be used by future drawing operations.
  262.        The pen is used to draw lines as well as border about other shapes eg
  263.        rectangles, ellipses etc.
  264.        @return
  265.        the current pen foreground colour used in the canvas state.
  266.      */
  267.     const PColour & GetPenFgColour() const;
  268.    /**Set the pen background colour to be used by future drawing operations.
  269.        The pen background colour is used to draw the gaps in the drawn line
  270.        when pen styles Dotted, Dashed or DotDashed are used.
  271.        The pen is used to draw lines as well as border about other shapes eg
  272.        rectangles, ellipses etc.
  273.        @return
  274.        TRUE if the pen background colour was changed, FALSE if the new pen
  275.        background colour was identical to the current setting.
  276.      */
  277.     virtual BOOL SetPenBkColour(
  278.       const PColour & colour  /// New colour for the pen background
  279.     );
  280.    /**Get the pen background colour to be used by future drawing operations.
  281.        The pen background colour is used to draw the gaps in the drawn line
  282.        when pen styles Dotted, Dashed or DotDashed are used. The pen is used
  283.        to draw lines as well as border about other shapes eg rectangles,
  284.        ellipses etc.
  285.        @return
  286.        the current pen background colour used in the canvas state.
  287.      */
  288.     const PColour & GetPenBkColour() const;
  289.    /**Set the fill pattern to be used by future drawing operations. The fill
  290.        pattern is a (usually) small bitmap which is tiled into the interior of
  291.        solid shapes eg rectangles, ellipses etc.
  292.        @return
  293.        TRUE if the fill pattern was changed, FALSE if the new fill pattern was
  294.        identical to the current setting.
  295.      */
  296.     virtual BOOL SetFillPattern(
  297.       const PPattern & pattern  /// New pattern to be used for drawing fills
  298.     );
  299.    /**Get the fill pattern to be used by future drawing operations. The fill
  300.        pattern is a (usually) small bitmap which is tiled into the interior of
  301.        solid shapes eg rectangles, ellipses etc.
  302.        @return
  303.        the current fill pattern used in the canvas state.
  304.      */
  305.     PPattern GetFillPattern() const;
  306.    /**Set the origin for the pattern. This sets the offset from 0 to 7 for
  307.        origin for a pattern. 
  308.      */
  309.     virtual BOOL SetPatternOrigin(
  310.       const PPoint & pt   /// New origin for pattern.
  311.     );
  312.    /**Get the origin for the pattern. This sets the offset from 0 to 7 for
  313.        origin for a pattern.
  314.        @return
  315.        point origin for patterns.
  316.      */
  317.     PPoint GetPatternOrigin() const;
  318.    /**Set the fill mode to be used by future drawing operations. The fill is
  319.        used for the internal parts of solid shapes eg rectangles, ellipses etc.
  320.        @return
  321.        TRUE if the fill mode was changed, FALSE if the new fill mode was
  322.        identical to the current setting.
  323.      */
  324.     virtual BOOL SetFillMode(DrawingModes style);
  325.    /**Get the fill mode to be used by future drawing operations. The fill is
  326.        used for the internal parts of solid shapes eg rectangles, ellipses etc.
  327.        @return
  328.        the current fill mode used in the canvas state.
  329.      */
  330.     DrawingModes GetFillMode() const;
  331.    /**Set the fill foreground colour to be used by future drawing operations.
  332.        The fill is used for the internal parts of solid shapes eg rectangles,
  333.        ellipses etc.
  334.        @return
  335.        TRUE if the fill foreground colour was changed, FALSE if the new fill
  336.        foreground colour was identical to the current setting.
  337.      */
  338.     virtual BOOL SetFillFgColour(
  339.       const PColour & colour  /// New colour for the fill foreground
  340.     );
  341.    /**Get the fill foreground colour to be used by future drawing operations.
  342.        The fill is used for the internal parts of solid shapes eg rectangles,
  343.        ellipses etc.
  344.        @return
  345.        the current fill foreground colour used in the canvas state.
  346.      */
  347.     const PColour & GetFillFgColour() const;
  348.    /**Set the fill background colour to be used by future drawing operations.
  349.        The fill is used for the internal parts of solid shapes eg rectangles,
  350.        ellipses etc.
  351.        @return
  352.        TRUE if the fill background colour was changed, FALSE if the new fill
  353.        background colour was identical to the current setting.
  354.      */
  355.     virtual BOOL SetFillBkColour(
  356.       const PColour & colour  /// New colour for the fill background
  357.     );
  358.    /**Get the fill background colour to be used by future drawing operations.
  359.        The fill is used for the internal parts of solid shapes eg rectangles,
  360.        ellipses etc.
  361.        @return
  362.        the current fill background colour used in the canvas state.
  363.      */
  364.     const PColour & GetFillBkColour() const;
  365.       /** Set the font drawing tool to be used by future drawing operations. */
  366.     virtual BOOL SetFont(const PFont & newFont);
  367.       /** Get the font drawing tool that is used by drawing operations. */
  368.     PFont GetFont() const;
  369.    /**Set the text foreground colour to be used by future drawing operations.
  370.        @return
  371.        TRUE if the text foreground colour was changed, FALSE if the new text
  372.        foreground colour was identical to the current setting.
  373.      */
  374.     virtual BOOL SetTextFgColour(
  375.       const PColour & colour  /// New colour for the text foreground
  376.     );
  377.    /**Get the text foreground colour to be used by future drawing operations.
  378.        @return
  379.        the current text foreground colour used in the canvas state.
  380.      */
  381.     const PColour & GetTextFgColour() const;
  382.    /**Set the text background colour to be used by future drawing operations.
  383.        The background colour is for the "surrounds" of the characters drawn
  384.        up to the size of the rectangular character cell.
  385.        @return
  386.        TRUE if the fill background colour was changed, FALSE if the new fill
  387.        background colour was identical to the current setting.
  388.      */
  389.     virtual BOOL SetTextBkColour(
  390.       const PColour & colour  /// New colour for the text background
  391.     );
  392.    /**Get the text background colour to be used by future drawing operations.
  393.        The background colour is for the "surrounds" of the characters drawn
  394.        up to the size of the rectangular character cell.
  395.        @return
  396.        the current text background colour used in the canvas state.
  397.      */
  398.     const PColour & GetTextBkColour() const;
  399.    /**This enum describes the ways in which a complex, overlapping polygon
  400.        may be filled.
  401.        
  402.        When the fill mode is Alternating, the area between odd-numbered and 
  403.        even-numbered polygon sides on each scan line is filled. That is, the
  404.        area between the first and second side, between the third and fourth
  405.        side, and so on is filled. 
  406.        When the fill mode is Winding, any region that has a nonzero winding
  407.        value is filled. This value is defined as the number of times a pen
  408.        used to draw the polygon would go around the region. The direction of
  409.        each edge of the polygon is important. 
  410.      */
  411.     enum PolyFillMode {
  412.      /**Selects alternate mode (fills area between odd-numbered and
  413.          even-numbered polygon sides on each scan line).
  414.        */
  415.       Winding,
  416.      /**Selects winding mode (fills any region with a nonzero winding value).
  417.        */
  418.       Alternating
  419.     };
  420.    /**Set the polygon fill mode to be used by future drawing operations.
  421.        @return
  422.        TRUE if the polygon fill mode was changed, FALSE if the new polygon
  423.        fill mode was identical to the current setting.
  424.      */
  425.     virtual BOOL SetPolyFillMode(
  426.       PolyFillMode newMode  /// New polygon fill mode
  427.     );
  428.    /**Get the polygon fill mode to be used by future drawing operations.
  429.        @return
  430.        the current polygon fill mode used in the canvas state.
  431.      */
  432.     PolyFillMode GetPolyFillMode() const;
  433.    /**Set the colour palette to be used by future drawing operations.
  434.        @return
  435.        TRUE if the colour palette was changed, FALSE if the new colour palette
  436.        was identical to the current setting.
  437.      */
  438.     virtual BOOL SetPalette(
  439.       const PPalette & newPal  /// New palette to use
  440.     );
  441.    /**Get the colour palette to be used by future drawing operations.
  442.        @return
  443.        the current colour palette used in the canvas state.
  444.      */
  445.     PPalette GetPalette() const;
  446.    /**Set the source rectangle to be used in the coordinate transform in
  447.        future drawing operations. This is a rectangle in the world coordinates
  448.        of the application.
  449.        The mapping rectangle (in user coordinates) is transformed into the
  450.        viewport rectangle (in device coordinates). This provides a scaling
  451.        factor as well as origin shifting.
  452.        @return
  453.        TRUE if the mapping rectangle was changed, FALSE if the new mapping
  454.        rectangle was identical to the current setting.
  455.      */
  456.     virtual BOOL SetMappingRect(
  457.       const PRect & rect   /// New mapping rectangle
  458.     );
  459.    /**Get the source rectangle that is used in the coordinate transform of
  460.        drawing operations.
  461.        The mapping rectangle (in user coordinates) is transformed into the
  462.        viewport rectangle (in device coordinates). This provides a scaling
  463.        factor as well as origin shifting.
  464.        @return
  465.        the current mapping rectangle used in the canvas state.
  466.      */
  467.     PRect GetMappingRect() const;
  468.    /**Set the destination rectangle to be used in the coordinate transform in
  469.        future drawing operations. This is a rectangle in the device coordinates
  470.        (pixels) of the screen, printer etc.
  471.        The mapping rectangle (in user coordinates) is transformed into the
  472.        viewport rectangle (in device coordinates). This provides a scaling
  473.        factor as well as origin shifting.
  474.        @return
  475.        TRUE if the mapping rectangle was changed, FALSE if the new mapping
  476.        rectangle was identical to the current setting.
  477.      */
  478.     virtual BOOL SetViewportRect(
  479.       const PRect & rect  /// New viewport rectangle
  480.     );
  481.    /**Get the destination rectangle that is used in the coordinate transform
  482.        of drawing operations.
  483.        The mapping rectangle (in user coordinates) is transformed into the
  484.        viewport rectangle (in device coordinates). This provides a scaling
  485.        factor as well as origin shifting.
  486.        @return
  487.        the current mapping rectangle used in the canvas state.
  488.      */
  489.     PRect GetViewportRect() const;
  490.    /**Set the origin of the user coordinate system. This is a shorthand way
  491.        of adjusting the map and viewport rectangles.
  492.      */
  493.     void SetOrigin(const PPoint & pt);
  494.    /**Set the origin of the user coordinate system. This is a shorthand way
  495.        of adjusting the map and viewport rectangles.
  496.        @return
  497.        point in user coordinates at origin of the canvas.
  498.      */
  499.     PPoint GetOrigin() const;
  500.   protected:
  501.     // Member variables
  502.     PenStyles penStyle;
  503.     int penWidth;
  504.     DrawingModes penMode;
  505.     PColour penFgColour, penBkColour;
  506.     PColour fillFgColour, fillBkColour;
  507.     PPattern fillPattern;
  508.     PPoint patternOrigin;
  509.     DrawingModes fillMode;
  510.     PFont font;
  511.     PColour textFgColour, textBkColour;
  512.     PPalette palette;
  513.     PolyFillMode polyFillMode;
  514.     PRect viewport, map;
  515. #ifdef DOC_PLUS_PLUS
  516. };
  517. #endif
  518. // Class declaration continued in platform specific header file ///////////////