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

IP电话/视频会议

开发平台:

Visual C++

  1. /*
  2.  * palette.h
  3.  *
  4.  * Colour palette.
  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: palette.h,v $
  30.  * Revision 1.14  1999/03/10 03:49:52  robertj
  31.  * More documentation adjustments.
  32.  *
  33.  * Revision 1.13  1999/03/09 08:01:49  robertj
  34.  * Changed comments for doc++ support (more to come).
  35.  *
  36.  * Revision 1.12  1998/09/23 06:24:33  robertj
  37.  * Added open source copyright license.
  38.  *
  39.  * Revision 1.11  1995/03/14 12:41:56  robertj
  40.  * Updated documentation to use HTML codes.
  41.  *
  42.  * Revision 1.10  1995/01/06  10:31:04  robertj
  43.  * Documentation.
  44.  *
  45.  * Revision 1.9  1994/08/23  11:32:52  robertj
  46.  * Oops
  47.  *
  48.  * Revision 1.8  1994/08/22  00:46:48  robertj
  49.  * Added pragma fro GNU C++ compiler.
  50.  *
  51.  * Revision 1.7  1994/04/03  08:34:18  robertj
  52.  * Added help and focus functionality.
  53.  *
  54.  * Revision 1.6  1994/01/03  04:42:23  robertj
  55.  * Mass changes to common container classes and interactors etc etc etc.
  56.  *
  57.  * Revision 1.5  1993/12/31  06:45:38  robertj
  58.  * Made inlines optional for debugging purposes.
  59.  *
  60.  * Revision 1.4  1993/08/27  18:17:47  robertj
  61.  * CFront compatibility.
  62.  *
  63.  * Revision 1.3  1993/08/21  01:50:33  robertj
  64.  * Made Clone() function optional, default will assert if called.
  65.  *
  66.  * Revision 1.2  1993/07/14  12:49:16  robertj
  67.  * Fixed RCS keywords.
  68.  *
  69.  */
  70. #define _PPALETTE
  71. #ifdef __GNUC__
  72. #pragma interface
  73. #endif
  74. /**A class representing a logical palette of colours.
  75.    A palette is a look up table for converting an index into a full RGB colour
  76.    specification. A palette typically has a small number of colours eg 16 or
  77.    256.
  78.  */
  79. class PPalette : public PContainer
  80. {
  81.   PCONTAINERINFO(PPalette, PContainer);
  82.   public:
  83.     /** Create a new empty palette. */
  84.     PPalette();
  85.   /**@name Overrides from class PObject */
  86.    /**Compare two palette objects for equality. The two instances must
  87.        reference the same actual palette. Thay cannot be two palettes that
  88.        happen to have the same colours in them.
  89.        @return
  90.        #EqualTo# if the two objects reference to the same palette,
  91.        otherwise #GreaterThan#.
  92.      */
  93.     virtual Comparison Compare(
  94.       const PObject & obj   /// Another palette object to compare against.
  95.     ) const;
  96.   /**@name Overrides from class PContainer */
  97.    /**Get the current size of the palette, ie the total number of colours
  98.        added to this logical palette.
  99.        @return
  100.        number of colours in palette.
  101.      */
  102.     virtual PINDEX GetSize() const;
  103.    /**Set the new size of the palette. If the size was increased, all colours
  104.        created between the old last colour and the new will be set to black.
  105.        @return
  106.        TRUE if the size was successfully changed. The value FALSE usually
  107.        indicates failure due to insufficient memory.
  108.      */
  109.     virtual BOOL SetSize(
  110.       PINDEX newSize    /// New size of the palette
  111.     );
  112.   /**@name New functions for class */
  113.    /**Add a colour specification into the palette, if the colour already
  114.        exists in the palette, no new entry is added. Otherwise a new entry is
  115.        appended.
  116.        
  117.        @return
  118.        index for the colour added to the palette.
  119.      */
  120.     PINDEX AddColour(
  121.       const PColour & colour    /// New colour to add to the palette.
  122.     );
  123.    /**Remove from the palette the colour at the specified index or of the
  124.        exact RGB value specified.
  125.        
  126.        Note when a colour is removed any indexes to colours after the remove
  127.        one will correspond to a different colour that before, ie all colours
  128.        are moved up one entry in the palettes "array" of colours.
  129.        @return
  130.        TRUE if the colour was in the palette and was removed.
  131.      */
  132.     BOOL RemoveColour(
  133.       const PColour & colour    /// Colour to remove from the palette.
  134.     );
  135.     BOOL RemoveColour(
  136.       PINDEX idx    /// Palette index to remove.
  137.     );
  138.    /**Determine if the palette contains an exact match for the colour
  139.        @return
  140.        TRUE if colour is in palette.
  141.      */
  142.     BOOL HasColour(
  143.       const PColour & colour    /// Colour to search for in palette.
  144.     ) const;
  145.    /**Locate the index in the palette of the nearest match to the specified
  146.        colour that is in the palette.
  147.        
  148.        Note that of there is more than one colour that is identical to the
  149.        one being searched for, the particular matching index that is returned
  150.        is not defined, it could be any one of them.
  151.        @return
  152.        index of nearest colour in palette.
  153.      */
  154.     PINDEX GetIndex(
  155.       const PColour & colour    /// Colour to serarch for in palette.
  156.     ) const;
  157.    /**Get the colour specification for the specified index value.
  158.     
  159.        @return
  160.        colour at index in palette.
  161.      */
  162.     PColour GetColour(
  163.       PINDEX indx   /// Index of colour in palette.
  164.     ) const;
  165.    /**Set a colour specification into the palette at the specified index. If
  166.        this is beyond the end of the palette the palette is expanded to
  167.        accommodate the new index. All colours created between the old last
  168.        colour and the new will be set to black.
  169.        @return
  170.        TRUE if colour was successfully added to palette.
  171.      */
  172.     BOOL SetColour(
  173.       PINDEX idx,             /// Index of colour in palette.
  174.       const PColour & colour  /// New colour to set at index in palette.
  175.     );
  176.   private:
  177. #ifdef DOC_PLUS_PLUS
  178. };
  179. #endif
  180. // Class declaration continued in platform specific header file ///////////////