[Win32k]
[reactos.git] / reactos / subsystems / win32 / win32k / objects / rect.c
index 32f2fbb..9fd5cda 100644 (file)
  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  *  GNU General Public License for more details.
  *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *  You should have received a copy of the GNU General Public License along
+ *  with this program; if not, write to the Free Software Foundation, Inc.,
+ *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  */
-/* $Id$ */
 
-#include <w32k.h>
+#include <win32k.h>
 
 #define NDEBUG
 #include <debug.h>
 
 /* FUNCTIONS *****************************************************************/
 
-VOID FASTCALL
-IntGdiSetEmptyRect(PRECT Rect)
+BOOL
+FASTCALL
+RECTL_bUnionRect(RECTL *prclDst, const RECTL *prcl1, const RECTL *prcl2)
 {
-  Rect->left = Rect->right = Rect->top = Rect->bottom = 0;
-}
+    if (RECTL_bIsEmptyRect(prcl1))
+    {
+        if (RECTL_bIsEmptyRect(prcl2))
+           {
+               RECTL_vSetEmptyRect(prclDst);
+               return FALSE;
+           }
+        else
+           {
+               *prclDst = *prcl2;
+           }
+    }
+    else
+    {
+        if (RECTL_bIsEmptyRect(prcl2))
+           {
+               *prclDst = *prcl1;
+           }
+        else
+           {
+               prclDst->left = min(prcl1->left, prcl2->left);
+               prclDst->top = min(prcl1->top, prcl2->top);
+               prclDst->right = max(prcl1->right, prcl2->right);
+               prclDst->bottom = max(prcl1->bottom, prcl2->bottom);
+           }
+    }
 
-BOOL FASTCALL
-IntGdiIsEmptyRect(const RECT* Rect)
-{
-  return(Rect->left >= Rect->right || Rect->top >= Rect->bottom);
+    return TRUE;
 }
 
-VOID FASTCALL
-IntGdiOffsetRect(LPRECT Rect, INT x, INT y)
-{
-  Rect->left += x;
-  Rect->right += x;
-  Rect->top += y;
-  Rect->bottom += y;
-}
 
-BOOL FASTCALL
-IntGdiUnionRect(PRECT Dest, const RECT* Src1, const RECT* Src2)
+BOOL
+FASTCALL
+RECTL_bIntersectRect(RECTL* prclDst, const RECTL* prcl1, const RECTL* prcl2)
 {
-  if (IntGdiIsEmptyRect(Src1))
-    {
-      if (IntGdiIsEmptyRect(Src2))
-       {
-         IntGdiSetEmptyRect(Dest);
-         return FALSE;
-       }
-      else
-       {
-         *Dest = *Src2;
-       }
-    }
-  else
+    prclDst->left  = max(prcl1->left, prcl2->left);
+    prclDst->right = min(prcl1->right, prcl2->right);
+
+    if (prclDst->left < prclDst->right)
     {
-      if (IntGdiIsEmptyRect(Src2))
-       {
-         *Dest = *Src1;
-       }
-      else
-       {
-         Dest->left = min(Src1->left, Src2->left);
-         Dest->top = min(Src1->top, Src2->top);
-         Dest->right = max(Src1->right, Src2->right);
-         Dest->bottom = max(Src1->bottom, Src2->bottom);
-       }
+        prclDst->top    = max(prcl1->top, prcl2->top);
+        prclDst->bottom = min(prcl1->bottom, prcl2->bottom);
+
+        if (prclDst->top < prclDst->bottom)
+        {
+            return TRUE;
+        }
     }
 
-  return TRUE;
-}
+    RECTL_vSetEmptyRect(prclDst);
 
-VOID FASTCALL
-IntGdiSetRect(PRECT Rect, INT left, INT top, INT right, INT bottom)
-{
-  Rect->left = left;
-  Rect->top = top;
-  Rect->right = right;
-  Rect->bottom = bottom;
+    return FALSE;
 }
 
-BOOL FASTCALL
-IntGdiIntersectRect(PRECT Dest, const RECT* Src1, const RECT* Src2)
+VOID
+FASTCALL
+RECTL_vMakeWellOrdered(RECTL *prcl)
 {
-  if (IntGdiIsEmptyRect(Src1) || IntGdiIsEmptyRect(Src2) ||
-      Src1->left >= Src2->right || Src2->left >= Src1->right ||
-      Src1->top >= Src2->bottom || Src2->top >= Src1->bottom)
+    LONG lTmp;
+    if (prcl->left > prcl->right)
     {
-      IntGdiSetEmptyRect(Dest);
-      return FALSE;
+        lTmp = prcl->left;
+        prcl->left = prcl->right;
+        prcl->right = lTmp;       
+    }
+    if (prcl->top > prcl->bottom)
+    {
+        lTmp = prcl->top;
+        prcl->top = prcl->bottom;
+        prcl->bottom = lTmp;       
     }
-
-  Dest->left = max(Src1->left, Src2->left);
-  Dest->right = min(Src1->right, Src2->right);
-  Dest->top = max(Src1->top, Src2->top);
-  Dest->bottom = min(Src1->bottom, Src2->bottom);
-
-  return TRUE;
 }
 
+VOID 
+FASTCALL
+RECTL_vInflateRect(RECTL *rect, INT dx, INT dy)
+{
+    rect->left -= dx;
+    rect->top -= dy;
+    rect->right += dx;
+    rect->bottom += dy;
+}
 
 /* EOF */