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

IP电话/视频会议

开发平台:

Visual C++

  1. /*
  2.  * rcolour.h
  3.  *
  4.  * Realised colour description.
  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: rcolour.h,v $
  30.  * Revision 1.12  1999/03/10 03:49:53  robertj
  31.  * More documentation adjustments.
  32.  *
  33.  * Revision 1.11  1999/03/09 08:01:49  robertj
  34.  * Changed comments for doc++ support (more to come).
  35.  *
  36.  * Revision 1.10  1999/02/16 08:08:46  robertj
  37.  * MSVC 6.0 compatibility changes.
  38.  *
  39.  * Revision 1.9  1998/09/23 06:28:35  robertj
  40.  * Added open source copyright license.
  41.  *
  42.  * Revision 1.8  1995/04/25 10:58:00  robertj
  43.  * Fixed incorrect type on color component virtual function parameters.
  44.  *
  45.  * Revision 1.7  1995/03/14 12:42:22  robertj
  46.  * Updated documentation to use HTML codes.
  47.  *
  48.  * Revision 1.6  1995/01/14  06:19:27  robertj
  49.  * Documentation
  50.  *
  51.  * Revision 1.5  1994/08/23  11:32:52  robertj
  52.  * Oops
  53.  *
  54.  * Revision 1.4  1994/08/22  00:46:48  robertj
  55.  * Added pragma fro GNU C++ compiler.
  56.  *
  57.  * Revision 1.3  1994/01/03  04:42:23  robertj
  58.  * Mass changes to common container classes and interactors etc etc etc.
  59.  *
  60.  * Revision 1.2  1993/07/14  12:49:16  robertj
  61.  * Fixed RCS keywords.
  62.  *
  63.  */
  64. #define _PREALCOLOUR
  65. #ifdef __GNUC__
  66. #pragma interface
  67. #endif
  68. class PCanvas;
  69. /**A class representing a colour specification that is representable on
  70.    a specific Ref{PCanvas}.
  71.    
  72.    A canvas is always associated with a particular {it device}. This may be
  73.    the screen as in Ref{PInteractorCanvas} or a printer as in
  74.    Ref{PPrinterCanvas}. A particular device will only be able to render
  75.    certain colours, eg a screen device may be able to display full 32 bit
  76.    colours or only 8 bit palettised colours. A printer would typically only be
  77.    able to render 2 colours, black and white.
  78.    Thus when a user wishes to render a light shade of pastel pink, as defined
  79.    by the RGB values in the Ref{PColour} object, the device, eg a dot matrix
  80.    colour printer, may only be able to render solid red. The creation of a
  81.    PRealColour from the canvas and PColour will yield the RGB values 255, 0,
  82.    and 0 respectively.
  83.    A further purpose of a realised colour is to reserve a particular RGB value
  84.    for use in a palettised device. For example, if an 8 bit screen is used
  85.    which provides 256 simultaneous colours, the realisation of a colour that
  86.    is not currently in the palette for the screen, will add a new colour to
  87.    the palette. If the colour was alreadyt in the palette then a reference
  88.    count for it is incremented. That specific RGB colour is then reserved
  89.    until all the relised colours that reference it are destroyed.
  90.    
  91.    Note that the above reservation does {bf not} occur if an explicit
  92.    palette is provided by the user, ie an instance of Ref{PPalette} is
  93.    created and attached to the device via the Ref{PCanvas::SetPalette()}
  94.    function.
  95.  */
  96. class PRealColour : public PColour
  97. {
  98.   PCLASSINFO(PRealColour, PColour);
  99.   public:
  100.    /**Create a colour as close to the specified colour that is representable
  101.        on the specified canvas.
  102.      */
  103.     PRealColour(
  104.       PCanvas & canvas,       /// Canvas to realise colour for.
  105.       const PColour & colour  /// Colour specification to realise.
  106.     );
  107.   /**@name Overrides from class PObject */
  108.    /**Create a new copy of the real colour. Note that it is the
  109.        responsibility of the caller to delete the new object.
  110.        @return
  111.        new colour object on heap.
  112.      */
  113.     virtual PObject * Clone() const;
  114.   /**@name Overrides from class PColour */
  115.    /**Set the red component of the colour.
  116.        This is not allowed on a real colour and always asserts.
  117.      */
  118.     virtual void SetRed(BYTE r);
  119.    /**Set the green component of the colour.
  120.        This is not allowed on a real colour and always asserts.
  121.      */
  122.     virtual void SetGreen(BYTE g);
  123.    /**Set the blue component of the colour.
  124.        This is not allowed on a real colour and always asserts.
  125.      */
  126.     virtual void SetBlue(BYTE b);
  127.    /**Set the alpha channel component of the colour.
  128.        This is not allowed on a real colour and always asserts.
  129.      */
  130.     virtual void SetAlpha(BYTE a);
  131. #ifdef DOC_PLUS_PLUS
  132. };
  133. #endif
  134. // Class declaration continued in platform specific header file ///////////////