Alexandre Julliard | 401710d | 1993-09-04 10:09:32 +0000 | [diff] [blame] | 1 | /* |
| 2 | * Rectangle-related functions |
| 3 | * |
Alexandre Julliard | e2bfa4c | 1996-05-16 18:21:06 +0000 | [diff] [blame] | 4 | * Copyright 1993, 1996 Alexandre Julliard |
Alexandre Julliard | 234bc24 | 1994-12-10 13:02:28 +0000 | [diff] [blame] | 5 | * |
Alexandre Julliard | 0799c1a | 2002-03-09 23:29:33 +0000 | [diff] [blame] | 6 | * 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 Julliard | 59730ae | 1996-03-24 16:20:51 +0000 | [diff] [blame] | 19 | */ |
Alexandre Julliard | 401710d | 1993-09-04 10:09:32 +0000 | [diff] [blame] | 20 | |
Jeremy White | d3e22d9 | 2000-02-10 19:03:02 +0000 | [diff] [blame] | 21 | #include "windef.h" |
| 22 | #include "wingdi.h" |
Patrik Stridvall | fdcfdb9 | 1999-06-12 14:55:11 +0000 | [diff] [blame] | 23 | #include "wine/winuser16.h" |
Marcus Meissner | 61afa33 | 1999-02-22 10:16:00 +0000 | [diff] [blame] | 24 | #include "winuser.h" |
Alexandre Julliard | 401710d | 1993-09-04 10:09:32 +0000 | [diff] [blame] | 25 | |
Alexandre Julliard | 401710d | 1993-09-04 10:09:32 +0000 | [diff] [blame] | 26 | /*********************************************************************** |
Patrik Stridvall | 2ece70e | 2000-12-22 01:38:01 +0000 | [diff] [blame] | 27 | * SetRect (USER.72) |
Alexandre Julliard | 401710d | 1993-09-04 10:09:32 +0000 | [diff] [blame] | 28 | */ |
Alexandre Julliard | 670cdc4 | 1997-08-24 16:00:30 +0000 | [diff] [blame] | 29 | void WINAPI SetRect16( LPRECT16 rect, INT16 left, INT16 top, |
| 30 | INT16 right, INT16 bottom ) |
Alexandre Julliard | 401710d | 1993-09-04 10:09:32 +0000 | [diff] [blame] | 31 | { |
| 32 | rect->left = left; |
| 33 | rect->right = right; |
| 34 | rect->top = top; |
| 35 | rect->bottom = bottom; |
| 36 | } |
| 37 | |
| 38 | |
| 39 | /*********************************************************************** |
Patrik Stridvall | 2ece70e | 2000-12-22 01:38:01 +0000 | [diff] [blame] | 40 | * SetRect (USER32.@) |
Alexandre Julliard | 401710d | 1993-09-04 10:09:32 +0000 | [diff] [blame] | 41 | */ |
Alexandre Julliard | a396029 | 1999-02-26 11:11:13 +0000 | [diff] [blame] | 42 | BOOL WINAPI SetRect( LPRECT rect, INT left, INT top, |
| 43 | INT right, INT bottom ) |
Alexandre Julliard | e2bfa4c | 1996-05-16 18:21:06 +0000 | [diff] [blame] | 44 | { |
Guy Albertelli | 3687100 | 2002-01-31 20:34:01 +0000 | [diff] [blame] | 45 | if (!rect) return FALSE; |
Alexandre Julliard | e2bfa4c | 1996-05-16 18:21:06 +0000 | [diff] [blame] | 46 | rect->left = left; |
| 47 | rect->right = right; |
| 48 | rect->top = top; |
| 49 | rect->bottom = bottom; |
Eric Pouech | b9544f1 | 1999-02-14 14:09:42 +0000 | [diff] [blame] | 50 | return TRUE; |
Alexandre Julliard | e2bfa4c | 1996-05-16 18:21:06 +0000 | [diff] [blame] | 51 | } |
| 52 | |
| 53 | |
| 54 | /*********************************************************************** |
Patrik Stridvall | 2ece70e | 2000-12-22 01:38:01 +0000 | [diff] [blame] | 55 | * SetRectEmpty (USER.73) |
Alexandre Julliard | e2bfa4c | 1996-05-16 18:21:06 +0000 | [diff] [blame] | 56 | */ |
Alexandre Julliard | 670cdc4 | 1997-08-24 16:00:30 +0000 | [diff] [blame] | 57 | void WINAPI SetRectEmpty16( LPRECT16 rect ) |
Alexandre Julliard | 401710d | 1993-09-04 10:09:32 +0000 | [diff] [blame] | 58 | { |
| 59 | rect->left = rect->right = rect->top = rect->bottom = 0; |
| 60 | } |
| 61 | |
| 62 | |
| 63 | /*********************************************************************** |
Patrik Stridvall | 2ece70e | 2000-12-22 01:38:01 +0000 | [diff] [blame] | 64 | * SetRectEmpty (USER32.@) |
Alexandre Julliard | 401710d | 1993-09-04 10:09:32 +0000 | [diff] [blame] | 65 | */ |
Alexandre Julliard | a396029 | 1999-02-26 11:11:13 +0000 | [diff] [blame] | 66 | BOOL WINAPI SetRectEmpty( LPRECT rect ) |
Alexandre Julliard | e2bfa4c | 1996-05-16 18:21:06 +0000 | [diff] [blame] | 67 | { |
Guy Albertelli | 3687100 | 2002-01-31 20:34:01 +0000 | [diff] [blame] | 68 | if (!rect) return FALSE; |
Alexandre Julliard | e2bfa4c | 1996-05-16 18:21:06 +0000 | [diff] [blame] | 69 | rect->left = rect->right = rect->top = rect->bottom = 0; |
Eric Pouech | b9544f1 | 1999-02-14 14:09:42 +0000 | [diff] [blame] | 70 | return TRUE; |
Alexandre Julliard | e2bfa4c | 1996-05-16 18:21:06 +0000 | [diff] [blame] | 71 | } |
| 72 | |
| 73 | |
| 74 | /*********************************************************************** |
Patrik Stridvall | 2ece70e | 2000-12-22 01:38:01 +0000 | [diff] [blame] | 75 | * CopyRect (USER.74) |
Alexandre Julliard | e2bfa4c | 1996-05-16 18:21:06 +0000 | [diff] [blame] | 76 | */ |
Alexandre Julliard | 670cdc4 | 1997-08-24 16:00:30 +0000 | [diff] [blame] | 77 | BOOL16 WINAPI CopyRect16( RECT16 *dest, const RECT16 *src ) |
Alexandre Julliard | 401710d | 1993-09-04 10:09:32 +0000 | [diff] [blame] | 78 | { |
| 79 | *dest = *src; |
Alexandre Julliard | 7e56f68 | 1996-01-31 19:02:28 +0000 | [diff] [blame] | 80 | return TRUE; |
Alexandre Julliard | 401710d | 1993-09-04 10:09:32 +0000 | [diff] [blame] | 81 | } |
| 82 | |
| 83 | |
| 84 | /*********************************************************************** |
Patrik Stridvall | 2ece70e | 2000-12-22 01:38:01 +0000 | [diff] [blame] | 85 | * CopyRect (USER32.@) |
Alexandre Julliard | 401710d | 1993-09-04 10:09:32 +0000 | [diff] [blame] | 86 | */ |
Alexandre Julliard | a396029 | 1999-02-26 11:11:13 +0000 | [diff] [blame] | 87 | BOOL WINAPI CopyRect( RECT *dest, const RECT *src ) |
Alexandre Julliard | e2bfa4c | 1996-05-16 18:21:06 +0000 | [diff] [blame] | 88 | { |
Marcus Meissner | 76eebe6 | 1999-12-25 22:53:10 +0000 | [diff] [blame] | 89 | if (!dest || !src) |
| 90 | return FALSE; |
Alexandre Julliard | e2bfa4c | 1996-05-16 18:21:06 +0000 | [diff] [blame] | 91 | *dest = *src; |
| 92 | return TRUE; |
| 93 | } |
| 94 | |
| 95 | |
| 96 | /*********************************************************************** |
Patrik Stridvall | 2ece70e | 2000-12-22 01:38:01 +0000 | [diff] [blame] | 97 | * IsRectEmpty (USER.75) |
Marcus Meissner | 8c45e24 | 2000-03-09 18:35:37 +0000 | [diff] [blame] | 98 | * |
| 99 | * Bug compat: Windows checks for 0 or negative width/height. |
Alexandre Julliard | e2bfa4c | 1996-05-16 18:21:06 +0000 | [diff] [blame] | 100 | */ |
Alexandre Julliard | 670cdc4 | 1997-08-24 16:00:30 +0000 | [diff] [blame] | 101 | BOOL16 WINAPI IsRectEmpty16( const RECT16 *rect ) |
Alexandre Julliard | 401710d | 1993-09-04 10:09:32 +0000 | [diff] [blame] | 102 | { |
Marcus Meissner | 8c45e24 | 2000-03-09 18:35:37 +0000 | [diff] [blame] | 103 | return ((rect->left >= rect->right) || (rect->top >= rect->bottom)); |
Alexandre Julliard | 401710d | 1993-09-04 10:09:32 +0000 | [diff] [blame] | 104 | } |
| 105 | |
| 106 | |
| 107 | /*********************************************************************** |
Patrik Stridvall | 2ece70e | 2000-12-22 01:38:01 +0000 | [diff] [blame] | 108 | * IsRectEmpty (USER32.@) |
Marcus Meissner | 8c45e24 | 2000-03-09 18:35:37 +0000 | [diff] [blame] | 109 | * |
| 110 | * Bug compat: Windows checks for 0 or negative width/height. |
Alexandre Julliard | 401710d | 1993-09-04 10:09:32 +0000 | [diff] [blame] | 111 | */ |
Alexandre Julliard | a396029 | 1999-02-26 11:11:13 +0000 | [diff] [blame] | 112 | BOOL WINAPI IsRectEmpty( const RECT *rect ) |
Alexandre Julliard | e2bfa4c | 1996-05-16 18:21:06 +0000 | [diff] [blame] | 113 | { |
Guy Albertelli | 3687100 | 2002-01-31 20:34:01 +0000 | [diff] [blame] | 114 | if (!rect) return TRUE; |
Marcus Meissner | 8c45e24 | 2000-03-09 18:35:37 +0000 | [diff] [blame] | 115 | return ((rect->left >= rect->right) || (rect->top >= rect->bottom)); |
Alexandre Julliard | e2bfa4c | 1996-05-16 18:21:06 +0000 | [diff] [blame] | 116 | } |
| 117 | |
| 118 | |
| 119 | /*********************************************************************** |
Patrik Stridvall | 2ece70e | 2000-12-22 01:38:01 +0000 | [diff] [blame] | 120 | * PtInRect (USER.76) |
Alexandre Julliard | e2bfa4c | 1996-05-16 18:21:06 +0000 | [diff] [blame] | 121 | */ |
Alexandre Julliard | 670cdc4 | 1997-08-24 16:00:30 +0000 | [diff] [blame] | 122 | BOOL16 WINAPI PtInRect16( const RECT16 *rect, POINT16 pt ) |
Alexandre Julliard | 401710d | 1993-09-04 10:09:32 +0000 | [diff] [blame] | 123 | { |
| 124 | return ((pt.x >= rect->left) && (pt.x < rect->right) && |
| 125 | (pt.y >= rect->top) && (pt.y < rect->bottom)); |
| 126 | } |
| 127 | |
| 128 | |
| 129 | /*********************************************************************** |
Patrik Stridvall | 2ece70e | 2000-12-22 01:38:01 +0000 | [diff] [blame] | 130 | * PtInRect (USER32.@) |
Alexandre Julliard | 401710d | 1993-09-04 10:09:32 +0000 | [diff] [blame] | 131 | */ |
Alexandre Julliard | a396029 | 1999-02-26 11:11:13 +0000 | [diff] [blame] | 132 | BOOL WINAPI PtInRect( const RECT *rect, POINT pt ) |
Alexandre Julliard | e2bfa4c | 1996-05-16 18:21:06 +0000 | [diff] [blame] | 133 | { |
Guy Albertelli | 3687100 | 2002-01-31 20:34:01 +0000 | [diff] [blame] | 134 | if (!rect) return FALSE; |
Alexandre Julliard | e2bfa4c | 1996-05-16 18:21:06 +0000 | [diff] [blame] | 135 | return ((pt.x >= rect->left) && (pt.x < rect->right) && |
| 136 | (pt.y >= rect->top) && (pt.y < rect->bottom)); |
| 137 | } |
| 138 | |
| 139 | |
| 140 | /*********************************************************************** |
Patrik Stridvall | 2ece70e | 2000-12-22 01:38:01 +0000 | [diff] [blame] | 141 | * OffsetRect (USER.77) |
Alexandre Julliard | e2bfa4c | 1996-05-16 18:21:06 +0000 | [diff] [blame] | 142 | */ |
Alexandre Julliard | 670cdc4 | 1997-08-24 16:00:30 +0000 | [diff] [blame] | 143 | void WINAPI OffsetRect16( LPRECT16 rect, INT16 x, INT16 y ) |
Alexandre Julliard | 401710d | 1993-09-04 10:09:32 +0000 | [diff] [blame] | 144 | { |
| 145 | rect->left += x; |
| 146 | rect->right += x; |
| 147 | rect->top += y; |
Vincent BĂ©ron | 9a62491 | 2002-05-31 23:06:46 +0000 | [diff] [blame] | 148 | rect->bottom += y; |
Alexandre Julliard | 401710d | 1993-09-04 10:09:32 +0000 | [diff] [blame] | 149 | } |
| 150 | |
| 151 | |
| 152 | /*********************************************************************** |
Patrik Stridvall | 2ece70e | 2000-12-22 01:38:01 +0000 | [diff] [blame] | 153 | * OffsetRect (USER32.@) |
Alexandre Julliard | 401710d | 1993-09-04 10:09:32 +0000 | [diff] [blame] | 154 | */ |
Alexandre Julliard | a396029 | 1999-02-26 11:11:13 +0000 | [diff] [blame] | 155 | BOOL WINAPI OffsetRect( LPRECT rect, INT x, INT y ) |
Alexandre Julliard | e2bfa4c | 1996-05-16 18:21:06 +0000 | [diff] [blame] | 156 | { |
Guy Albertelli | 3687100 | 2002-01-31 20:34:01 +0000 | [diff] [blame] | 157 | if (!rect) return FALSE; |
Alexandre Julliard | e2bfa4c | 1996-05-16 18:21:06 +0000 | [diff] [blame] | 158 | rect->left += x; |
| 159 | rect->right += x; |
| 160 | rect->top += y; |
Vincent BĂ©ron | 9a62491 | 2002-05-31 23:06:46 +0000 | [diff] [blame] | 161 | rect->bottom += y; |
Eric Pouech | b9544f1 | 1999-02-14 14:09:42 +0000 | [diff] [blame] | 162 | return TRUE; |
Alexandre Julliard | e2bfa4c | 1996-05-16 18:21:06 +0000 | [diff] [blame] | 163 | } |
| 164 | |
| 165 | |
| 166 | /*********************************************************************** |
Patrik Stridvall | 2ece70e | 2000-12-22 01:38:01 +0000 | [diff] [blame] | 167 | * InflateRect (USER.78) |
Alexandre Julliard | e2bfa4c | 1996-05-16 18:21:06 +0000 | [diff] [blame] | 168 | */ |
Alexandre Julliard | 670cdc4 | 1997-08-24 16:00:30 +0000 | [diff] [blame] | 169 | void WINAPI InflateRect16( LPRECT16 rect, INT16 x, INT16 y ) |
Alexandre Julliard | 401710d | 1993-09-04 10:09:32 +0000 | [diff] [blame] | 170 | { |
Alexandre Julliard | f0b2354 | 1993-09-29 12:21:49 +0000 | [diff] [blame] | 171 | rect->left -= x; |
| 172 | rect->top -= y; |
Alexandre Julliard | 401710d | 1993-09-04 10:09:32 +0000 | [diff] [blame] | 173 | rect->right += x; |
| 174 | rect->bottom += y; |
| 175 | } |
| 176 | |
| 177 | |
| 178 | /*********************************************************************** |
Patrik Stridvall | 2ece70e | 2000-12-22 01:38:01 +0000 | [diff] [blame] | 179 | * InflateRect (USER32.@) |
Alexandre Julliard | 401710d | 1993-09-04 10:09:32 +0000 | [diff] [blame] | 180 | */ |
Alexandre Julliard | a396029 | 1999-02-26 11:11:13 +0000 | [diff] [blame] | 181 | BOOL WINAPI InflateRect( LPRECT rect, INT x, INT y ) |
Alexandre Julliard | 401710d | 1993-09-04 10:09:32 +0000 | [diff] [blame] | 182 | { |
Guy Albertelli | 3687100 | 2002-01-31 20:34:01 +0000 | [diff] [blame] | 183 | if (!rect) return FALSE; |
Alexandre Julliard | e2bfa4c | 1996-05-16 18:21:06 +0000 | [diff] [blame] | 184 | rect->left -= x; |
| 185 | rect->top -= y; |
| 186 | rect->right += x; |
| 187 | rect->bottom += y; |
Eric Pouech | b9544f1 | 1999-02-14 14:09:42 +0000 | [diff] [blame] | 188 | return TRUE; |
Alexandre Julliard | e2bfa4c | 1996-05-16 18:21:06 +0000 | [diff] [blame] | 189 | } |
| 190 | |
| 191 | |
| 192 | /*********************************************************************** |
Patrik Stridvall | 2ece70e | 2000-12-22 01:38:01 +0000 | [diff] [blame] | 193 | * IntersectRect (USER.79) |
Alexandre Julliard | e2bfa4c | 1996-05-16 18:21:06 +0000 | [diff] [blame] | 194 | */ |
Alexandre Julliard | 670cdc4 | 1997-08-24 16:00:30 +0000 | [diff] [blame] | 195 | BOOL16 WINAPI IntersectRect16( LPRECT16 dest, const RECT16 *src1, |
| 196 | const RECT16 *src2 ) |
Alexandre Julliard | e2bfa4c | 1996-05-16 18:21:06 +0000 | [diff] [blame] | 197 | { |
| 198 | if (IsRectEmpty16(src1) || IsRectEmpty16(src2) || |
Alexandre Julliard | fb9a919 | 1994-03-01 19:48:04 +0000 | [diff] [blame] | 199 | (src1->left >= src2->right) || (src2->left >= src1->right) || |
Alexandre Julliard | 401710d | 1993-09-04 10:09:32 +0000 | [diff] [blame] | 200 | (src1->top >= src2->bottom) || (src2->top >= src1->bottom)) |
| 201 | { |
Alexandre Julliard | e2bfa4c | 1996-05-16 18:21:06 +0000 | [diff] [blame] | 202 | SetRectEmpty16( dest ); |
Alexandre Julliard | 401710d | 1993-09-04 10:09:32 +0000 | [diff] [blame] | 203 | return FALSE; |
| 204 | } |
Francois Gouget | 6d77d3a | 2000-03-25 21:44:35 +0000 | [diff] [blame] | 205 | 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 Julliard | 401710d | 1993-09-04 10:09:32 +0000 | [diff] [blame] | 209 | return TRUE; |
| 210 | } |
| 211 | |
| 212 | |
| 213 | /*********************************************************************** |
Patrik Stridvall | 2ece70e | 2000-12-22 01:38:01 +0000 | [diff] [blame] | 214 | * IntersectRect (USER32.@) |
Alexandre Julliard | 401710d | 1993-09-04 10:09:32 +0000 | [diff] [blame] | 215 | */ |
Alexandre Julliard | a396029 | 1999-02-26 11:11:13 +0000 | [diff] [blame] | 216 | BOOL WINAPI IntersectRect( LPRECT dest, const RECT *src1, |
| 217 | const RECT *src2 ) |
Alexandre Julliard | 401710d | 1993-09-04 10:09:32 +0000 | [diff] [blame] | 218 | { |
Guy Albertelli | 3687100 | 2002-01-31 20:34:01 +0000 | [diff] [blame] | 219 | if (!dest || !src1 || !src2) return FALSE; |
Alexandre Julliard | a396029 | 1999-02-26 11:11:13 +0000 | [diff] [blame] | 220 | if (IsRectEmpty(src1) || IsRectEmpty(src2) || |
Alexandre Julliard | e2bfa4c | 1996-05-16 18:21:06 +0000 | [diff] [blame] | 221 | (src1->left >= src2->right) || (src2->left >= src1->right) || |
| 222 | (src1->top >= src2->bottom) || (src2->top >= src1->bottom)) |
Alexandre Julliard | 401710d | 1993-09-04 10:09:32 +0000 | [diff] [blame] | 223 | { |
Alexandre Julliard | a396029 | 1999-02-26 11:11:13 +0000 | [diff] [blame] | 224 | SetRectEmpty( dest ); |
Alexandre Julliard | e2bfa4c | 1996-05-16 18:21:06 +0000 | [diff] [blame] | 225 | return FALSE; |
| 226 | } |
Francois Gouget | 6d77d3a | 2000-03-25 21:44:35 +0000 | [diff] [blame] | 227 | 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 Julliard | e2bfa4c | 1996-05-16 18:21:06 +0000 | [diff] [blame] | 231 | return TRUE; |
| 232 | } |
| 233 | |
| 234 | |
| 235 | /*********************************************************************** |
Patrik Stridvall | 2ece70e | 2000-12-22 01:38:01 +0000 | [diff] [blame] | 236 | * UnionRect (USER.80) |
Alexandre Julliard | e2bfa4c | 1996-05-16 18:21:06 +0000 | [diff] [blame] | 237 | */ |
Alexandre Julliard | 670cdc4 | 1997-08-24 16:00:30 +0000 | [diff] [blame] | 238 | BOOL16 WINAPI UnionRect16( LPRECT16 dest, const RECT16 *src1, |
| 239 | const RECT16 *src2 ) |
Alexandre Julliard | e2bfa4c | 1996-05-16 18:21:06 +0000 | [diff] [blame] | 240 | { |
| 241 | if (IsRectEmpty16(src1)) |
| 242 | { |
| 243 | if (IsRectEmpty16(src2)) |
Alexandre Julliard | 401710d | 1993-09-04 10:09:32 +0000 | [diff] [blame] | 244 | { |
Alexandre Julliard | e2bfa4c | 1996-05-16 18:21:06 +0000 | [diff] [blame] | 245 | SetRectEmpty16( dest ); |
Alexandre Julliard | 401710d | 1993-09-04 10:09:32 +0000 | [diff] [blame] | 246 | return FALSE; |
| 247 | } |
| 248 | else *dest = *src2; |
| 249 | } |
| 250 | else |
| 251 | { |
Alexandre Julliard | e2bfa4c | 1996-05-16 18:21:06 +0000 | [diff] [blame] | 252 | if (IsRectEmpty16(src2)) *dest = *src1; |
Alexandre Julliard | 401710d | 1993-09-04 10:09:32 +0000 | [diff] [blame] | 253 | else |
| 254 | { |
Francois Gouget | 6d77d3a | 2000-03-25 21:44:35 +0000 | [diff] [blame] | 255 | 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Ă©ron | 9a62491 | 2002-05-31 23:06:46 +0000 | [diff] [blame] | 258 | dest->bottom = max( src1->bottom, src2->bottom ); |
Alexandre Julliard | 401710d | 1993-09-04 10:09:32 +0000 | [diff] [blame] | 259 | } |
| 260 | } |
| 261 | return TRUE; |
| 262 | } |
| 263 | |
| 264 | |
| 265 | /*********************************************************************** |
Patrik Stridvall | 2ece70e | 2000-12-22 01:38:01 +0000 | [diff] [blame] | 266 | * UnionRect (USER32.@) |
Alexandre Julliard | 401710d | 1993-09-04 10:09:32 +0000 | [diff] [blame] | 267 | */ |
Alexandre Julliard | a396029 | 1999-02-26 11:11:13 +0000 | [diff] [blame] | 268 | BOOL WINAPI UnionRect( LPRECT dest, const RECT *src1, |
| 269 | const RECT *src2 ) |
Alexandre Julliard | e2bfa4c | 1996-05-16 18:21:06 +0000 | [diff] [blame] | 270 | { |
Guy Albertelli | 3687100 | 2002-01-31 20:34:01 +0000 | [diff] [blame] | 271 | if (!dest) return FALSE; |
Alexandre Julliard | a396029 | 1999-02-26 11:11:13 +0000 | [diff] [blame] | 272 | if (IsRectEmpty(src1)) |
Alexandre Julliard | e2bfa4c | 1996-05-16 18:21:06 +0000 | [diff] [blame] | 273 | { |
Alexandre Julliard | a396029 | 1999-02-26 11:11:13 +0000 | [diff] [blame] | 274 | if (IsRectEmpty(src2)) |
Alexandre Julliard | e2bfa4c | 1996-05-16 18:21:06 +0000 | [diff] [blame] | 275 | { |
Alexandre Julliard | a396029 | 1999-02-26 11:11:13 +0000 | [diff] [blame] | 276 | SetRectEmpty( dest ); |
Alexandre Julliard | e2bfa4c | 1996-05-16 18:21:06 +0000 | [diff] [blame] | 277 | return FALSE; |
| 278 | } |
| 279 | else *dest = *src2; |
| 280 | } |
| 281 | else |
| 282 | { |
Alexandre Julliard | a396029 | 1999-02-26 11:11:13 +0000 | [diff] [blame] | 283 | if (IsRectEmpty(src2)) *dest = *src1; |
Alexandre Julliard | e2bfa4c | 1996-05-16 18:21:06 +0000 | [diff] [blame] | 284 | else |
| 285 | { |
Francois Gouget | 6d77d3a | 2000-03-25 21:44:35 +0000 | [diff] [blame] | 286 | 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Ă©ron | 9a62491 | 2002-05-31 23:06:46 +0000 | [diff] [blame] | 289 | dest->bottom = max( src1->bottom, src2->bottom ); |
Alexandre Julliard | e2bfa4c | 1996-05-16 18:21:06 +0000 | [diff] [blame] | 290 | } |
| 291 | } |
| 292 | return TRUE; |
| 293 | } |
| 294 | |
| 295 | |
| 296 | /*********************************************************************** |
Patrik Stridvall | 2ece70e | 2000-12-22 01:38:01 +0000 | [diff] [blame] | 297 | * EqualRect (USER.244) |
Alexandre Julliard | e2bfa4c | 1996-05-16 18:21:06 +0000 | [diff] [blame] | 298 | */ |
Alexandre Julliard | 670cdc4 | 1997-08-24 16:00:30 +0000 | [diff] [blame] | 299 | BOOL16 WINAPI EqualRect16( const RECT16* rect1, const RECT16* rect2 ) |
Alexandre Julliard | 401710d | 1993-09-04 10:09:32 +0000 | [diff] [blame] | 300 | { |
| 301 | return ((rect1->left == rect2->left) && (rect1->right == rect2->right) && |
| 302 | (rect1->top == rect2->top) && (rect1->bottom == rect2->bottom)); |
| 303 | } |
| 304 | |
| 305 | |
| 306 | /*********************************************************************** |
Patrik Stridvall | 2ece70e | 2000-12-22 01:38:01 +0000 | [diff] [blame] | 307 | * EqualRect (USER32.@) |
Alexandre Julliard | 401710d | 1993-09-04 10:09:32 +0000 | [diff] [blame] | 308 | */ |
Alexandre Julliard | a396029 | 1999-02-26 11:11:13 +0000 | [diff] [blame] | 309 | BOOL WINAPI EqualRect( const RECT* rect1, const RECT* rect2 ) |
Alexandre Julliard | 401710d | 1993-09-04 10:09:32 +0000 | [diff] [blame] | 310 | { |
Guy Albertelli | 3687100 | 2002-01-31 20:34:01 +0000 | [diff] [blame] | 311 | if (!rect1 || !rect2) return FALSE; |
Alexandre Julliard | e2bfa4c | 1996-05-16 18:21:06 +0000 | [diff] [blame] | 312 | return ((rect1->left == rect2->left) && (rect1->right == rect2->right) && |
| 313 | (rect1->top == rect2->top) && (rect1->bottom == rect2->bottom)); |
| 314 | } |
Alexandre Julliard | 8d24ae6 | 1994-04-05 21:42:43 +0000 | [diff] [blame] | 315 | |
Alexandre Julliard | e2bfa4c | 1996-05-16 18:21:06 +0000 | [diff] [blame] | 316 | |
| 317 | /*********************************************************************** |
Patrik Stridvall | 2ece70e | 2000-12-22 01:38:01 +0000 | [diff] [blame] | 318 | * SubtractRect (USER.373) |
Alexandre Julliard | e2bfa4c | 1996-05-16 18:21:06 +0000 | [diff] [blame] | 319 | */ |
Alexandre Julliard | 670cdc4 | 1997-08-24 16:00:30 +0000 | [diff] [blame] | 320 | BOOL16 WINAPI SubtractRect16( LPRECT16 dest, const RECT16 *src1, |
| 321 | const RECT16 *src2 ) |
Alexandre Julliard | e2bfa4c | 1996-05-16 18:21:06 +0000 | [diff] [blame] | 322 | { |
| 323 | RECT16 tmp; |
| 324 | |
| 325 | if (IsRectEmpty16( src1 )) |
Alexandre Julliard | 8d24ae6 | 1994-04-05 21:42:43 +0000 | [diff] [blame] | 326 | { |
Alexandre Julliard | e2bfa4c | 1996-05-16 18:21:06 +0000 | [diff] [blame] | 327 | SetRectEmpty16( dest ); |
Alexandre Julliard | 8d24ae6 | 1994-04-05 21:42:43 +0000 | [diff] [blame] | 328 | return FALSE; |
| 329 | } |
Alexandre Julliard | 401710d | 1993-09-04 10:09:32 +0000 | [diff] [blame] | 330 | *dest = *src1; |
Alexandre Julliard | e2bfa4c | 1996-05-16 18:21:06 +0000 | [diff] [blame] | 331 | if (IntersectRect16( &tmp, src1, src2 )) |
Alexandre Julliard | 401710d | 1993-09-04 10:09:32 +0000 | [diff] [blame] | 332 | { |
Alexandre Julliard | e2bfa4c | 1996-05-16 18:21:06 +0000 | [diff] [blame] | 333 | if (EqualRect16( &tmp, dest )) |
Alexandre Julliard | cdd0923 | 1994-01-12 11:12:51 +0000 | [diff] [blame] | 334 | { |
Alexandre Julliard | e2bfa4c | 1996-05-16 18:21:06 +0000 | [diff] [blame] | 335 | SetRectEmpty16( dest ); |
Alexandre Julliard | cdd0923 | 1994-01-12 11:12:51 +0000 | [diff] [blame] | 336 | return FALSE; |
| 337 | } |
| 338 | if ((tmp.top == dest->top) && (tmp.bottom == dest->bottom)) |
Alexandre Julliard | 401710d | 1993-09-04 10:09:32 +0000 | [diff] [blame] | 339 | { |
Alexandre Julliard | 8d24ae6 | 1994-04-05 21:42:43 +0000 | [diff] [blame] | 340 | if (tmp.left == dest->left) dest->left = tmp.right; |
| 341 | else if (tmp.right == dest->right) dest->right = tmp.left; |
Alexandre Julliard | 401710d | 1993-09-04 10:09:32 +0000 | [diff] [blame] | 342 | } |
| 343 | else if ((tmp.left == dest->left) && (tmp.right == dest->right)) |
| 344 | { |
Alexandre Julliard | 8d24ae6 | 1994-04-05 21:42:43 +0000 | [diff] [blame] | 345 | if (tmp.top == dest->top) dest->top = tmp.bottom; |
| 346 | else if (tmp.bottom == dest->bottom) dest->bottom = tmp.top; |
Alexandre Julliard | 401710d | 1993-09-04 10:09:32 +0000 | [diff] [blame] | 347 | } |
| 348 | } |
| 349 | return TRUE; |
| 350 | } |
| 351 | |
Alexandre Julliard | e2bfa4c | 1996-05-16 18:21:06 +0000 | [diff] [blame] | 352 | |
| 353 | /*********************************************************************** |
Patrik Stridvall | 2ece70e | 2000-12-22 01:38:01 +0000 | [diff] [blame] | 354 | * SubtractRect (USER32.@) |
Alexandre Julliard | e2bfa4c | 1996-05-16 18:21:06 +0000 | [diff] [blame] | 355 | */ |
Alexandre Julliard | a396029 | 1999-02-26 11:11:13 +0000 | [diff] [blame] | 356 | BOOL WINAPI SubtractRect( LPRECT dest, const RECT *src1, |
| 357 | const RECT *src2 ) |
Alexandre Julliard | e2bfa4c | 1996-05-16 18:21:06 +0000 | [diff] [blame] | 358 | { |
Alexandre Julliard | a396029 | 1999-02-26 11:11:13 +0000 | [diff] [blame] | 359 | RECT tmp; |
Alexandre Julliard | e2bfa4c | 1996-05-16 18:21:06 +0000 | [diff] [blame] | 360 | |
Guy Albertelli | 3687100 | 2002-01-31 20:34:01 +0000 | [diff] [blame] | 361 | if (!dest) return FALSE; |
Alexandre Julliard | a396029 | 1999-02-26 11:11:13 +0000 | [diff] [blame] | 362 | if (IsRectEmpty( src1 )) |
Alexandre Julliard | e2bfa4c | 1996-05-16 18:21:06 +0000 | [diff] [blame] | 363 | { |
Alexandre Julliard | a396029 | 1999-02-26 11:11:13 +0000 | [diff] [blame] | 364 | SetRectEmpty( dest ); |
Alexandre Julliard | e2bfa4c | 1996-05-16 18:21:06 +0000 | [diff] [blame] | 365 | return FALSE; |
| 366 | } |
| 367 | *dest = *src1; |
Alexandre Julliard | a396029 | 1999-02-26 11:11:13 +0000 | [diff] [blame] | 368 | if (IntersectRect( &tmp, src1, src2 )) |
Alexandre Julliard | e2bfa4c | 1996-05-16 18:21:06 +0000 | [diff] [blame] | 369 | { |
Alexandre Julliard | a396029 | 1999-02-26 11:11:13 +0000 | [diff] [blame] | 370 | if (EqualRect( &tmp, dest )) |
Alexandre Julliard | e2bfa4c | 1996-05-16 18:21:06 +0000 | [diff] [blame] | 371 | { |
Alexandre Julliard | a396029 | 1999-02-26 11:11:13 +0000 | [diff] [blame] | 372 | SetRectEmpty( dest ); |
Alexandre Julliard | e2bfa4c | 1996-05-16 18:21:06 +0000 | [diff] [blame] | 373 | 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 | } |