blob: bba18ef19b990af73b8b42c142aebeae25bfb8e8 [file] [log] [blame]
Alexandre Julliard401710d1993-09-04 10:09:32 +00001/*
2 * Rectangle-related functions
3 *
Alexandre Julliarde2bfa4c1996-05-16 18:21:06 +00004 * Copyright 1993, 1996 Alexandre Julliard
Alexandre Julliard234bc241994-12-10 13:02:28 +00005 *
Alexandre Julliard0799c1a2002-03-09 23:29:33 +00006 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
10 *
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Alexandre Julliard59730ae1996-03-24 16:20:51 +000019 */
Alexandre Julliard401710d1993-09-04 10:09:32 +000020
Jeremy Whited3e22d92000-02-10 19:03:02 +000021#include "windef.h"
22#include "wingdi.h"
Patrik Stridvallfdcfdb91999-06-12 14:55:11 +000023#include "wine/winuser16.h"
Marcus Meissner61afa331999-02-22 10:16:00 +000024#include "winuser.h"
Alexandre Julliard401710d1993-09-04 10:09:32 +000025
Alexandre Julliard401710d1993-09-04 10:09:32 +000026/***********************************************************************
Patrik Stridvall2ece70e2000-12-22 01:38:01 +000027 * SetRect (USER.72)
Alexandre Julliard401710d1993-09-04 10:09:32 +000028 */
Alexandre Julliard670cdc41997-08-24 16:00:30 +000029void WINAPI SetRect16( LPRECT16 rect, INT16 left, INT16 top,
30 INT16 right, INT16 bottom )
Alexandre Julliard401710d1993-09-04 10:09:32 +000031{
32 rect->left = left;
33 rect->right = right;
34 rect->top = top;
35 rect->bottom = bottom;
36}
37
38
39/***********************************************************************
Patrik Stridvall2ece70e2000-12-22 01:38:01 +000040 * SetRect (USER32.@)
Alexandre Julliard401710d1993-09-04 10:09:32 +000041 */
Alexandre Julliarda3960291999-02-26 11:11:13 +000042BOOL WINAPI SetRect( LPRECT rect, INT left, INT top,
43 INT right, INT bottom )
Alexandre Julliarde2bfa4c1996-05-16 18:21:06 +000044{
Guy Albertelli36871002002-01-31 20:34:01 +000045 if (!rect) return FALSE;
Alexandre Julliarde2bfa4c1996-05-16 18:21:06 +000046 rect->left = left;
47 rect->right = right;
48 rect->top = top;
49 rect->bottom = bottom;
Eric Pouechb9544f11999-02-14 14:09:42 +000050 return TRUE;
Alexandre Julliarde2bfa4c1996-05-16 18:21:06 +000051}
52
53
54/***********************************************************************
Patrik Stridvall2ece70e2000-12-22 01:38:01 +000055 * SetRectEmpty (USER.73)
Alexandre Julliarde2bfa4c1996-05-16 18:21:06 +000056 */
Alexandre Julliard670cdc41997-08-24 16:00:30 +000057void WINAPI SetRectEmpty16( LPRECT16 rect )
Alexandre Julliard401710d1993-09-04 10:09:32 +000058{
59 rect->left = rect->right = rect->top = rect->bottom = 0;
60}
61
62
63/***********************************************************************
Patrik Stridvall2ece70e2000-12-22 01:38:01 +000064 * SetRectEmpty (USER32.@)
Alexandre Julliard401710d1993-09-04 10:09:32 +000065 */
Alexandre Julliarda3960291999-02-26 11:11:13 +000066BOOL WINAPI SetRectEmpty( LPRECT rect )
Alexandre Julliarde2bfa4c1996-05-16 18:21:06 +000067{
Guy Albertelli36871002002-01-31 20:34:01 +000068 if (!rect) return FALSE;
Alexandre Julliarde2bfa4c1996-05-16 18:21:06 +000069 rect->left = rect->right = rect->top = rect->bottom = 0;
Eric Pouechb9544f11999-02-14 14:09:42 +000070 return TRUE;
Alexandre Julliarde2bfa4c1996-05-16 18:21:06 +000071}
72
73
74/***********************************************************************
Patrik Stridvall2ece70e2000-12-22 01:38:01 +000075 * CopyRect (USER.74)
Alexandre Julliarde2bfa4c1996-05-16 18:21:06 +000076 */
Alexandre Julliard670cdc41997-08-24 16:00:30 +000077BOOL16 WINAPI CopyRect16( RECT16 *dest, const RECT16 *src )
Alexandre Julliard401710d1993-09-04 10:09:32 +000078{
79 *dest = *src;
Alexandre Julliard7e56f681996-01-31 19:02:28 +000080 return TRUE;
Alexandre Julliard401710d1993-09-04 10:09:32 +000081}
82
83
84/***********************************************************************
Patrik Stridvall2ece70e2000-12-22 01:38:01 +000085 * CopyRect (USER32.@)
Alexandre Julliard401710d1993-09-04 10:09:32 +000086 */
Alexandre Julliarda3960291999-02-26 11:11:13 +000087BOOL WINAPI CopyRect( RECT *dest, const RECT *src )
Alexandre Julliarde2bfa4c1996-05-16 18:21:06 +000088{
Marcus Meissner76eebe61999-12-25 22:53:10 +000089 if (!dest || !src)
90 return FALSE;
Alexandre Julliarde2bfa4c1996-05-16 18:21:06 +000091 *dest = *src;
92 return TRUE;
93}
94
95
96/***********************************************************************
Patrik Stridvall2ece70e2000-12-22 01:38:01 +000097 * IsRectEmpty (USER.75)
Marcus Meissner8c45e242000-03-09 18:35:37 +000098 *
99 * Bug compat: Windows checks for 0 or negative width/height.
Alexandre Julliarde2bfa4c1996-05-16 18:21:06 +0000100 */
Alexandre Julliard670cdc41997-08-24 16:00:30 +0000101BOOL16 WINAPI IsRectEmpty16( const RECT16 *rect )
Alexandre Julliard401710d1993-09-04 10:09:32 +0000102{
Marcus Meissner8c45e242000-03-09 18:35:37 +0000103 return ((rect->left >= rect->right) || (rect->top >= rect->bottom));
Alexandre Julliard401710d1993-09-04 10:09:32 +0000104}
105
106
107/***********************************************************************
Patrik Stridvall2ece70e2000-12-22 01:38:01 +0000108 * IsRectEmpty (USER32.@)
Marcus Meissner8c45e242000-03-09 18:35:37 +0000109 *
110 * Bug compat: Windows checks for 0 or negative width/height.
Alexandre Julliard401710d1993-09-04 10:09:32 +0000111 */
Alexandre Julliarda3960291999-02-26 11:11:13 +0000112BOOL WINAPI IsRectEmpty( const RECT *rect )
Alexandre Julliarde2bfa4c1996-05-16 18:21:06 +0000113{
Guy Albertelli36871002002-01-31 20:34:01 +0000114 if (!rect) return TRUE;
Marcus Meissner8c45e242000-03-09 18:35:37 +0000115 return ((rect->left >= rect->right) || (rect->top >= rect->bottom));
Alexandre Julliarde2bfa4c1996-05-16 18:21:06 +0000116}
117
118
119/***********************************************************************
Patrik Stridvall2ece70e2000-12-22 01:38:01 +0000120 * PtInRect (USER.76)
Alexandre Julliarde2bfa4c1996-05-16 18:21:06 +0000121 */
Alexandre Julliard670cdc41997-08-24 16:00:30 +0000122BOOL16 WINAPI PtInRect16( const RECT16 *rect, POINT16 pt )
Alexandre Julliard401710d1993-09-04 10:09:32 +0000123{
124 return ((pt.x >= rect->left) && (pt.x < rect->right) &&
125 (pt.y >= rect->top) && (pt.y < rect->bottom));
126}
127
128
129/***********************************************************************
Patrik Stridvall2ece70e2000-12-22 01:38:01 +0000130 * PtInRect (USER32.@)
Alexandre Julliard401710d1993-09-04 10:09:32 +0000131 */
Alexandre Julliarda3960291999-02-26 11:11:13 +0000132BOOL WINAPI PtInRect( const RECT *rect, POINT pt )
Alexandre Julliarde2bfa4c1996-05-16 18:21:06 +0000133{
Guy Albertelli36871002002-01-31 20:34:01 +0000134 if (!rect) return FALSE;
Alexandre Julliarde2bfa4c1996-05-16 18:21:06 +0000135 return ((pt.x >= rect->left) && (pt.x < rect->right) &&
136 (pt.y >= rect->top) && (pt.y < rect->bottom));
137}
138
139
140/***********************************************************************
Patrik Stridvall2ece70e2000-12-22 01:38:01 +0000141 * OffsetRect (USER.77)
Alexandre Julliarde2bfa4c1996-05-16 18:21:06 +0000142 */
Alexandre Julliard670cdc41997-08-24 16:00:30 +0000143void WINAPI OffsetRect16( LPRECT16 rect, INT16 x, INT16 y )
Alexandre Julliard401710d1993-09-04 10:09:32 +0000144{
145 rect->left += x;
146 rect->right += x;
147 rect->top += y;
Vincent BĂ©ron9a624912002-05-31 23:06:46 +0000148 rect->bottom += y;
Alexandre Julliard401710d1993-09-04 10:09:32 +0000149}
150
151
152/***********************************************************************
Patrik Stridvall2ece70e2000-12-22 01:38:01 +0000153 * OffsetRect (USER32.@)
Alexandre Julliard401710d1993-09-04 10:09:32 +0000154 */
Alexandre Julliarda3960291999-02-26 11:11:13 +0000155BOOL WINAPI OffsetRect( LPRECT rect, INT x, INT y )
Alexandre Julliarde2bfa4c1996-05-16 18:21:06 +0000156{
Guy Albertelli36871002002-01-31 20:34:01 +0000157 if (!rect) return FALSE;
Alexandre Julliarde2bfa4c1996-05-16 18:21:06 +0000158 rect->left += x;
159 rect->right += x;
160 rect->top += y;
Vincent BĂ©ron9a624912002-05-31 23:06:46 +0000161 rect->bottom += y;
Eric Pouechb9544f11999-02-14 14:09:42 +0000162 return TRUE;
Alexandre Julliarde2bfa4c1996-05-16 18:21:06 +0000163}
164
165
166/***********************************************************************
Patrik Stridvall2ece70e2000-12-22 01:38:01 +0000167 * InflateRect (USER.78)
Alexandre Julliarde2bfa4c1996-05-16 18:21:06 +0000168 */
Alexandre Julliard670cdc41997-08-24 16:00:30 +0000169void WINAPI InflateRect16( LPRECT16 rect, INT16 x, INT16 y )
Alexandre Julliard401710d1993-09-04 10:09:32 +0000170{
Alexandre Julliardf0b23541993-09-29 12:21:49 +0000171 rect->left -= x;
172 rect->top -= y;
Alexandre Julliard401710d1993-09-04 10:09:32 +0000173 rect->right += x;
174 rect->bottom += y;
175}
176
177
178/***********************************************************************
Patrik Stridvall2ece70e2000-12-22 01:38:01 +0000179 * InflateRect (USER32.@)
Alexandre Julliard401710d1993-09-04 10:09:32 +0000180 */
Alexandre Julliarda3960291999-02-26 11:11:13 +0000181BOOL WINAPI InflateRect( LPRECT rect, INT x, INT y )
Alexandre Julliard401710d1993-09-04 10:09:32 +0000182{
Guy Albertelli36871002002-01-31 20:34:01 +0000183 if (!rect) return FALSE;
Alexandre Julliarde2bfa4c1996-05-16 18:21:06 +0000184 rect->left -= x;
185 rect->top -= y;
186 rect->right += x;
187 rect->bottom += y;
Eric Pouechb9544f11999-02-14 14:09:42 +0000188 return TRUE;
Alexandre Julliarde2bfa4c1996-05-16 18:21:06 +0000189}
190
191
192/***********************************************************************
Patrik Stridvall2ece70e2000-12-22 01:38:01 +0000193 * IntersectRect (USER.79)
Alexandre Julliarde2bfa4c1996-05-16 18:21:06 +0000194 */
Alexandre Julliard670cdc41997-08-24 16:00:30 +0000195BOOL16 WINAPI IntersectRect16( LPRECT16 dest, const RECT16 *src1,
196 const RECT16 *src2 )
Alexandre Julliarde2bfa4c1996-05-16 18:21:06 +0000197{
198 if (IsRectEmpty16(src1) || IsRectEmpty16(src2) ||
Alexandre Julliardfb9a9191994-03-01 19:48:04 +0000199 (src1->left >= src2->right) || (src2->left >= src1->right) ||
Alexandre Julliard401710d1993-09-04 10:09:32 +0000200 (src1->top >= src2->bottom) || (src2->top >= src1->bottom))
201 {
Alexandre Julliarde2bfa4c1996-05-16 18:21:06 +0000202 SetRectEmpty16( dest );
Alexandre Julliard401710d1993-09-04 10:09:32 +0000203 return FALSE;
204 }
Francois Gouget6d77d3a2000-03-25 21:44:35 +0000205 dest->left = max( src1->left, src2->left );
206 dest->right = min( src1->right, src2->right );
207 dest->top = max( src1->top, src2->top );
208 dest->bottom = min( src1->bottom, src2->bottom );
Alexandre Julliard401710d1993-09-04 10:09:32 +0000209 return TRUE;
210}
211
212
213/***********************************************************************
Patrik Stridvall2ece70e2000-12-22 01:38:01 +0000214 * IntersectRect (USER32.@)
Alexandre Julliard401710d1993-09-04 10:09:32 +0000215 */
Alexandre Julliarda3960291999-02-26 11:11:13 +0000216BOOL WINAPI IntersectRect( LPRECT dest, const RECT *src1,
217 const RECT *src2 )
Alexandre Julliard401710d1993-09-04 10:09:32 +0000218{
Guy Albertelli36871002002-01-31 20:34:01 +0000219 if (!dest || !src1 || !src2) return FALSE;
Alexandre Julliarda3960291999-02-26 11:11:13 +0000220 if (IsRectEmpty(src1) || IsRectEmpty(src2) ||
Alexandre Julliarde2bfa4c1996-05-16 18:21:06 +0000221 (src1->left >= src2->right) || (src2->left >= src1->right) ||
222 (src1->top >= src2->bottom) || (src2->top >= src1->bottom))
Alexandre Julliard401710d1993-09-04 10:09:32 +0000223 {
Alexandre Julliarda3960291999-02-26 11:11:13 +0000224 SetRectEmpty( dest );
Alexandre Julliarde2bfa4c1996-05-16 18:21:06 +0000225 return FALSE;
226 }
Francois Gouget6d77d3a2000-03-25 21:44:35 +0000227 dest->left = max( src1->left, src2->left );
228 dest->right = min( src1->right, src2->right );
229 dest->top = max( src1->top, src2->top );
230 dest->bottom = min( src1->bottom, src2->bottom );
Alexandre Julliarde2bfa4c1996-05-16 18:21:06 +0000231 return TRUE;
232}
233
234
235/***********************************************************************
Patrik Stridvall2ece70e2000-12-22 01:38:01 +0000236 * UnionRect (USER.80)
Alexandre Julliarde2bfa4c1996-05-16 18:21:06 +0000237 */
Alexandre Julliard670cdc41997-08-24 16:00:30 +0000238BOOL16 WINAPI UnionRect16( LPRECT16 dest, const RECT16 *src1,
239 const RECT16 *src2 )
Alexandre Julliarde2bfa4c1996-05-16 18:21:06 +0000240{
241 if (IsRectEmpty16(src1))
242 {
243 if (IsRectEmpty16(src2))
Alexandre Julliard401710d1993-09-04 10:09:32 +0000244 {
Alexandre Julliarde2bfa4c1996-05-16 18:21:06 +0000245 SetRectEmpty16( dest );
Alexandre Julliard401710d1993-09-04 10:09:32 +0000246 return FALSE;
247 }
248 else *dest = *src2;
249 }
250 else
251 {
Alexandre Julliarde2bfa4c1996-05-16 18:21:06 +0000252 if (IsRectEmpty16(src2)) *dest = *src1;
Alexandre Julliard401710d1993-09-04 10:09:32 +0000253 else
254 {
Francois Gouget6d77d3a2000-03-25 21:44:35 +0000255 dest->left = min( src1->left, src2->left );
256 dest->right = max( src1->right, src2->right );
257 dest->top = min( src1->top, src2->top );
Vincent BĂ©ron9a624912002-05-31 23:06:46 +0000258 dest->bottom = max( src1->bottom, src2->bottom );
Alexandre Julliard401710d1993-09-04 10:09:32 +0000259 }
260 }
261 return TRUE;
262}
263
264
265/***********************************************************************
Patrik Stridvall2ece70e2000-12-22 01:38:01 +0000266 * UnionRect (USER32.@)
Alexandre Julliard401710d1993-09-04 10:09:32 +0000267 */
Alexandre Julliarda3960291999-02-26 11:11:13 +0000268BOOL WINAPI UnionRect( LPRECT dest, const RECT *src1,
269 const RECT *src2 )
Alexandre Julliarde2bfa4c1996-05-16 18:21:06 +0000270{
Guy Albertelli36871002002-01-31 20:34:01 +0000271 if (!dest) return FALSE;
Alexandre Julliarda3960291999-02-26 11:11:13 +0000272 if (IsRectEmpty(src1))
Alexandre Julliarde2bfa4c1996-05-16 18:21:06 +0000273 {
Alexandre Julliarda3960291999-02-26 11:11:13 +0000274 if (IsRectEmpty(src2))
Alexandre Julliarde2bfa4c1996-05-16 18:21:06 +0000275 {
Alexandre Julliarda3960291999-02-26 11:11:13 +0000276 SetRectEmpty( dest );
Alexandre Julliarde2bfa4c1996-05-16 18:21:06 +0000277 return FALSE;
278 }
279 else *dest = *src2;
280 }
281 else
282 {
Alexandre Julliarda3960291999-02-26 11:11:13 +0000283 if (IsRectEmpty(src2)) *dest = *src1;
Alexandre Julliarde2bfa4c1996-05-16 18:21:06 +0000284 else
285 {
Francois Gouget6d77d3a2000-03-25 21:44:35 +0000286 dest->left = min( src1->left, src2->left );
287 dest->right = max( src1->right, src2->right );
288 dest->top = min( src1->top, src2->top );
Vincent BĂ©ron9a624912002-05-31 23:06:46 +0000289 dest->bottom = max( src1->bottom, src2->bottom );
Alexandre Julliarde2bfa4c1996-05-16 18:21:06 +0000290 }
291 }
292 return TRUE;
293}
294
295
296/***********************************************************************
Patrik Stridvall2ece70e2000-12-22 01:38:01 +0000297 * EqualRect (USER.244)
Alexandre Julliarde2bfa4c1996-05-16 18:21:06 +0000298 */
Alexandre Julliard670cdc41997-08-24 16:00:30 +0000299BOOL16 WINAPI EqualRect16( const RECT16* rect1, const RECT16* rect2 )
Alexandre Julliard401710d1993-09-04 10:09:32 +0000300{
301 return ((rect1->left == rect2->left) && (rect1->right == rect2->right) &&
302 (rect1->top == rect2->top) && (rect1->bottom == rect2->bottom));
303}
304
305
306/***********************************************************************
Patrik Stridvall2ece70e2000-12-22 01:38:01 +0000307 * EqualRect (USER32.@)
Alexandre Julliard401710d1993-09-04 10:09:32 +0000308 */
Alexandre Julliarda3960291999-02-26 11:11:13 +0000309BOOL WINAPI EqualRect( const RECT* rect1, const RECT* rect2 )
Alexandre Julliard401710d1993-09-04 10:09:32 +0000310{
Guy Albertelli36871002002-01-31 20:34:01 +0000311 if (!rect1 || !rect2) return FALSE;
Alexandre Julliarde2bfa4c1996-05-16 18:21:06 +0000312 return ((rect1->left == rect2->left) && (rect1->right == rect2->right) &&
313 (rect1->top == rect2->top) && (rect1->bottom == rect2->bottom));
314}
Alexandre Julliard8d24ae61994-04-05 21:42:43 +0000315
Alexandre Julliarde2bfa4c1996-05-16 18:21:06 +0000316
317/***********************************************************************
Patrik Stridvall2ece70e2000-12-22 01:38:01 +0000318 * SubtractRect (USER.373)
Alexandre Julliarde2bfa4c1996-05-16 18:21:06 +0000319 */
Alexandre Julliard670cdc41997-08-24 16:00:30 +0000320BOOL16 WINAPI SubtractRect16( LPRECT16 dest, const RECT16 *src1,
321 const RECT16 *src2 )
Alexandre Julliarde2bfa4c1996-05-16 18:21:06 +0000322{
323 RECT16 tmp;
324
325 if (IsRectEmpty16( src1 ))
Alexandre Julliard8d24ae61994-04-05 21:42:43 +0000326 {
Alexandre Julliarde2bfa4c1996-05-16 18:21:06 +0000327 SetRectEmpty16( dest );
Alexandre Julliard8d24ae61994-04-05 21:42:43 +0000328 return FALSE;
329 }
Alexandre Julliard401710d1993-09-04 10:09:32 +0000330 *dest = *src1;
Alexandre Julliarde2bfa4c1996-05-16 18:21:06 +0000331 if (IntersectRect16( &tmp, src1, src2 ))
Alexandre Julliard401710d1993-09-04 10:09:32 +0000332 {
Alexandre Julliarde2bfa4c1996-05-16 18:21:06 +0000333 if (EqualRect16( &tmp, dest ))
Alexandre Julliardcdd09231994-01-12 11:12:51 +0000334 {
Alexandre Julliarde2bfa4c1996-05-16 18:21:06 +0000335 SetRectEmpty16( dest );
Alexandre Julliardcdd09231994-01-12 11:12:51 +0000336 return FALSE;
337 }
338 if ((tmp.top == dest->top) && (tmp.bottom == dest->bottom))
Alexandre Julliard401710d1993-09-04 10:09:32 +0000339 {
Alexandre Julliard8d24ae61994-04-05 21:42:43 +0000340 if (tmp.left == dest->left) dest->left = tmp.right;
341 else if (tmp.right == dest->right) dest->right = tmp.left;
Alexandre Julliard401710d1993-09-04 10:09:32 +0000342 }
343 else if ((tmp.left == dest->left) && (tmp.right == dest->right))
344 {
Alexandre Julliard8d24ae61994-04-05 21:42:43 +0000345 if (tmp.top == dest->top) dest->top = tmp.bottom;
346 else if (tmp.bottom == dest->bottom) dest->bottom = tmp.top;
Alexandre Julliard401710d1993-09-04 10:09:32 +0000347 }
348 }
349 return TRUE;
350}
351
Alexandre Julliarde2bfa4c1996-05-16 18:21:06 +0000352
353/***********************************************************************
Patrik Stridvall2ece70e2000-12-22 01:38:01 +0000354 * SubtractRect (USER32.@)
Alexandre Julliarde2bfa4c1996-05-16 18:21:06 +0000355 */
Alexandre Julliarda3960291999-02-26 11:11:13 +0000356BOOL WINAPI SubtractRect( LPRECT dest, const RECT *src1,
357 const RECT *src2 )
Alexandre Julliarde2bfa4c1996-05-16 18:21:06 +0000358{
Alexandre Julliarda3960291999-02-26 11:11:13 +0000359 RECT tmp;
Alexandre Julliarde2bfa4c1996-05-16 18:21:06 +0000360
Guy Albertelli36871002002-01-31 20:34:01 +0000361 if (!dest) return FALSE;
Alexandre Julliarda3960291999-02-26 11:11:13 +0000362 if (IsRectEmpty( src1 ))
Alexandre Julliarde2bfa4c1996-05-16 18:21:06 +0000363 {
Alexandre Julliarda3960291999-02-26 11:11:13 +0000364 SetRectEmpty( dest );
Alexandre Julliarde2bfa4c1996-05-16 18:21:06 +0000365 return FALSE;
366 }
367 *dest = *src1;
Alexandre Julliarda3960291999-02-26 11:11:13 +0000368 if (IntersectRect( &tmp, src1, src2 ))
Alexandre Julliarde2bfa4c1996-05-16 18:21:06 +0000369 {
Alexandre Julliarda3960291999-02-26 11:11:13 +0000370 if (EqualRect( &tmp, dest ))
Alexandre Julliarde2bfa4c1996-05-16 18:21:06 +0000371 {
Alexandre Julliarda3960291999-02-26 11:11:13 +0000372 SetRectEmpty( dest );
Alexandre Julliarde2bfa4c1996-05-16 18:21:06 +0000373 return FALSE;
374 }
375 if ((tmp.top == dest->top) && (tmp.bottom == dest->bottom))
376 {
377 if (tmp.left == dest->left) dest->left = tmp.right;
378 else if (tmp.right == dest->right) dest->right = tmp.left;
379 }
380 else if ((tmp.left == dest->left) && (tmp.right == dest->right))
381 {
382 if (tmp.top == dest->top) dest->top = tmp.bottom;
383 else if (tmp.bottom == dest->bottom) dest->bottom = tmp.top;
384 }
385 }
386 return TRUE;
387}