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

IP电话/视频会议

开发平台:

Visual C++

  1. /*
  2.  * rect.h
  3.  *
  4.  * Rectangle 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: rect.h,v $
  30.  * Revision 1.20  1999/03/10 03:49:53  robertj
  31.  * More documentation adjustments.
  32.  *
  33.  * Revision 1.19  1999/03/09 08:01:49  robertj
  34.  * Changed comments for doc++ support (more to come).
  35.  *
  36.  * Revision 1.18  1999/02/16 08:08:46  robertj
  37.  * MSVC 6.0 compatibility changes.
  38.  *
  39.  * Revision 1.17  1998/09/23 06:28:47  robertj
  40.  * Added open source copyright license.
  41.  *
  42.  * Revision 1.16  1995/06/17 11:13:14  robertj
  43.  * Documentation update.
  44.  *
  45.  * Revision 1.15  1995/03/14 12:42:24  robertj
  46.  * Updated documentation to use HTML codes.
  47.  *
  48.  * Revision 1.14  1995/02/22  10:50:35  robertj
  49.  * Changes required for compiling release (optimised) version.
  50.  *
  51.  * Revision 1.13  1995/01/14  06:19:28  robertj
  52.  * Documentation
  53.  *
  54.  * Revision 1.12  1994/12/05  11:20:31  robertj
  55.  * Removed Normalise() function from PRect as all rectangles should be inherently normal.
  56.  *
  57.  * Revision 1.11  1994/08/23  11:32:52  robertj
  58.  * Oops
  59.  *
  60.  * Revision 1.10  1994/08/22  00:46:48  robertj
  61.  * Added pragma fro GNU C++ compiler.
  62.  *
  63.  * Revision 1.9  1994/06/25  11:55:15  robertj
  64.  * Unix version synchronisation.
  65.  *
  66.  * Revision 1.8  1994/03/07  07:38:19  robertj
  67.  * Major enhancementsacross the board.
  68.  *
  69.  * Revision 1.7  1994/01/03  04:42:23  robertj
  70.  * Mass changes to common container classes and interactors etc etc etc.
  71.  *
  72.  * Revision 1.6  1993/12/31  06:45:38  robertj
  73.  * Made inlines optional for debugging purposes.
  74.  *
  75.  * Revision 1.5  1993/12/29  04:40:47  robertj
  76.  * Mac port.
  77.  *
  78.  * Revision 1.4  1993/11/20  17:26:28  robertj
  79.  * Made real point structure private and added operators to get at pointers.
  80.  *
  81.  * Revision 1.3  1993/07/14  12:49:16  robertj
  82.  * Fixed RCS keywords.
  83.  *
  84.  */
  85. #define _PRECT
  86. #ifdef __GNUC__
  87. #pragma interface
  88. #endif
  89. /**This class defines a rectangle in the drawing plane. A rectangle is defined
  90.    by two points on the plane. A rectangle is always "normalised". That is
  91.    the left is always less then the right and the top is always less than the
  92.    bottom.
  93.  */
  94. class PRect : public PObject
  95. {
  96.   PCLASSINFO(PRect, PObject);
  97.   public:
  98.     /** Create a rectangle given the top left corner and width and height. */
  99.     PRect(
  100.       PORDINATE x = 0,    /// Horizontal position of the rectangle.
  101.       PORDINATE y = 0,    /// Vertical position of the rectangle.
  102.       PDIMENSION dx = 0,  /// Width of the rectangle.
  103.       PDIMENSION dy = 0   /// Height of the rectangle.
  104.     );
  105.     /** Create a rectangle at 0,0 and the dimensions specified. */
  106.     PRect(
  107.       const PDim & dim    /// Dimensions of the rectangle.
  108.     );
  109.    /**Create a rectangle given the 2 points as opposite corners. Note that
  110.        the top left corner of the rectangle may not be either of these points
  111.        as it is normalised so that left is less than right and top is less
  112.        than bottom.
  113.      */
  114.     PRect(
  115.       const PPoint & p1,    /// First corner of rectangle.
  116.       const PPoint & p2     /// Second, opposite, corner of rectangle.
  117.     );
  118.     /** Create a rectangle given the top left corner and dimensions. */
  119.     PRect(
  120.       const PPoint & topLeft,   /// Top left corner ofthe rectangle.
  121.       const PDim & dim          /// Dimensions of the rectangle.
  122.     );
  123.   /**@name Overrides from class PObject */
  124.    /**Create a new copy of the rectangle. Note that it is the responsibility
  125.        of the caller to delete the object.
  126.       
  127.        @return
  128.        a new rectangle on the heap.
  129.      */
  130.     virtual PObject * Clone() const;
  131.    /**Determine if the two rectangles are identical. A rectangle is identical
  132.        if the origin and dimensions are the same.
  133.        @return
  134.        #EqualTo# if the rectangles are the same, otherwise returns
  135.        #GreaterThan#.
  136.      */
  137.     virtual Comparison Compare(
  138.       const PObject & obj   /// Another rectangle object to comapre against.
  139.     ) const;
  140.   /**@name New functions for class */
  141.    /**Get the top side of the rectangle.
  142.        @return
  143.        Y value of the top of the rectagle.
  144.      */
  145.     PORDINATE Top() const;
  146.    /**Get the left side of the rectangle.
  147.        @return
  148.        X value of the left of the rectagle.
  149.      */
  150.     PORDINATE Left() const;
  151.       
  152.    /**Get the bottom side of the rectangle.
  153.        @return
  154.        Y value of the bottom of the rectagle.
  155.      */
  156.     PORDINATE Bottom() const;
  157.       
  158.    /**Get the right side of the rectangle.
  159.        @return
  160.        X value of the right of the rectagle.
  161.      */
  162.     PORDINATE Right() const;
  163.       
  164.    /**Get the horizontal position of the origin of the rectangle.
  165.        @return
  166.        X value of the left of the rectagle.
  167.      */
  168.     PORDINATE X() const;
  169.       
  170.    /**Get the vertical position of the origin of the rectangle.
  171.        @return
  172.        Y value of the top of the rectagle.
  173.      */
  174.     PORDINATE Y() const;
  175.       
  176.    /**Get the horizontal dimension of the rectagle.
  177.        @return
  178.        width of the rectagle.
  179.      */
  180.     PDIMENSION Width() const;
  181.       
  182.    /**Get the vertical dimension of the rectagle.
  183.        @return
  184.        height of the rectagle.
  185.      */
  186.     PDIMENSION Height() const;
  187.       
  188.    /**Set the Y value of the top of the rectagle. Note that this does not
  189.        change the bottom of the rectangle so the height will change.
  190.      */
  191.     void SetTop(
  192.       PORDINATE top   /// New top for rectangle.
  193.     );
  194.    /**Set the X value of the left of the rectagle. Note that this does not
  195.        change the right of the rectangle so the width will change.
  196.      */
  197.     void SetLeft(
  198.       PORDINATE left   /// New left for rectangle.
  199.     );
  200.       
  201.    /**Set the Y value of the bottom of the rectagle. Note that this does not
  202.        change the top of the rectangle so the height will change.
  203.      */
  204.     void SetBottom(
  205.       PORDINATE bottom   /// New bottom of rectangle.
  206.     );
  207.       
  208.    /**Set the X value of the right of the rectagle. Note that this does not
  209.        change the left of the rectangle so the width will change.
  210.      */
  211.     void SetRight(
  212.       PORDINATE right   /// New right of rectangle.
  213.     );
  214.    /**Set the X value of the left of the rectagle. Note that this does not
  215.        change the width of the rectangle so the right position will change.
  216.      */
  217.     void SetX(
  218.       PORDINATE x   /// New x position for rectangle.
  219.     );
  220.       
  221.    /**Set the Y value of the top of the rectagle. Note that this does not
  222.        change the height of the rectangle so the bottom position will change.
  223.      */
  224.     void SetY(
  225.       PORDINATE ny    /// new y position for rectangle.
  226.     );
  227.    /**Set the width of the rectagle. Note that this does not change the x
  228.        position of the rectangle so the right position will change.
  229.      */
  230.     void SetWidth(
  231.       PDIMENSION dx   /// New width for rectangle.
  232.     );
  233.       
  234.    /**Set the height of the rectagle. Note that this does not change the y
  235.        position of the rectangle so the bottom position will change.
  236.      */
  237.     void SetHeight(
  238.       PDIMENSION dy   /// New height for the rectangle.
  239.     );
  240.    /**Get the origin or top left corner of the rectangle.
  241.        @return
  242.        point for top left corner of rectangle.
  243.      */
  244.     PPoint Origin() const;
  245.    /**Get the bottom right corner of the rectangle.
  246.        @return
  247.        point for bottom right corner of rectangle.
  248.      */
  249.     PPoint Corner() const;
  250.    /**Get the coordinates of the centre of the rectangle.
  251.        @return
  252.        point for the centre of the rectangle.
  253.      */
  254.     PPoint Centre() const;
  255.    /**Get the width and height of the rectangle.
  256.        @return
  257.        dimensions of the rectangle.
  258.      */
  259.     PDim Dimensions() const;
  260.    /**Set the top left corner of the rectangle. This is eqivalent to doing
  261.        a Ref{SetX()} and a Ref{SetY()}, ie does not change the width and
  262.        height of the rectangle.
  263.      */
  264.     void SetOrigin(
  265.       PORDINATE nx,   /// New x position for the rectangle.
  266.       PORDINATE ny    /// New y position for the rectangle.
  267.     );
  268.     void SetOrigin(
  269.       const PPoint & org    /// New x and y position for the rectangle.
  270.     );
  271.    /**Set the top left corner of the rectangle. This is eqivalent to doing
  272.        a Ref{SetBottom()} and a Ref{SetTop()}, ie does not change the
  273.        width and height of the rectangle.
  274.      */
  275.     void SetCorner(
  276.       PORDINATE nx, /// New x position for bottom right corner of the rectangle.
  277.       PORDINATE ny  /// New y position for bottom right corner of the rectangle.
  278.     );
  279.     void SetCorner(
  280.       const PPoint & cnr  /// New bottom right corner of the rectangle.
  281.     );
  282.    /**Set the width and height of the rectangle. This is equivalent to doing
  283.        a Ref{SetWidth()} and Ref{SetHeight}.
  284.      */
  285.     void SetDimensions(
  286.       PDIMENSION dx,    /// New width for rectangle.
  287.       PDIMENSION dy     /// New height for rectangle.
  288.     );
  289.     void SetDimensions(
  290.       const PDim & dim    /// New dimensions for the rectangle.
  291.     );
  292.    /**Determine if the width and height of the rectangle are zero.
  293.     
  294.        @return
  295.        TRUE if the rectangle is empty.
  296.      */
  297.     BOOL IsEmpty() const;
  298.    /**Increase the size of the rectangle by expanding in all four directions
  299.        by the amount specified. That is the left has #dx# subtracted
  300.        from it and the right has it added while the top has #dy#
  301.        subtracted from it and the bottom has it added.
  302.      */
  303.     void Inflate(
  304.       PORDINATE dx,   /// Amount to increase the horizontal.
  305.       PORDINATE dy    /// Amount to increase the vertical.
  306.     );
  307.    /**Move the rectangle the specified delta amount. This is eqivalent to
  308.        doing a Ref{SetX()} and a Ref{SetY()}, ie does not change the width
  309.        and height of the rectangle.
  310.      */
  311.     void Offset(
  312.       PORDINATE dx,   /// Amount to move the rectangle horizontally.
  313.       PORDINATE dy    /// Amount to move the rectangle vertically.
  314.     );
  315.    /**Determine if the point is contained within the bounds of the rectangle.
  316.        @return
  317.        TRUE if point is within the rectangle.
  318.      */
  319.     BOOL ContainsPoint(const PPoint & pt) const;
  320.    /**Calculate the rectangle that is the intersection of the object and the
  321.        specified rectangle. That is the part of the two rectangle contained by
  322.        both rectangles. This can easily be an empty rectangle.
  323.        @return
  324.        intersection rectangle.
  325.      */
  326.     PRect Intersection(const PRect & rect) const;
  327.    /**Calculate the rectangle that is the union of the object and the
  328.        specified rectangle. That is the amllest rectangle that will contain
  329.        both the other rectangles.
  330.        @return
  331.        union rectangle.
  332.      */
  333.     PRect Union(const PRect & rect) const;
  334. #ifdef DOC_PLUS_PLUS
  335. };
  336. #endif
  337. // Class declaration continued in platform specific header file ///////////////