| 3470 | } |
| 3471 | |
| 3472 | void basic_rect<F32>::clip(basic_rect<F32>& a, basic_rect<F32>& b) const |
| 3473 | { |
| 3474 | F32 bwaw = b.w / a.w; |
| 3475 | F32 bwah = b.h / a.h; |
| 3476 | |
| 3477 | if (a.x < x) |
| 3478 | { |
| 3479 | F32 xax = x - a.x; |
| 3480 | F32 bwawxax = bwaw * xax; |
| 3481 | a.x = x; |
| 3482 | a.w -= xax; |
| 3483 | b.x += bwawxax; |
| 3484 | b.w -= bwawxax; |
| 3485 | } |
| 3486 | |
| 3487 | if (a.y < y) |
| 3488 | { |
| 3489 | F32 yay = y - a.y; |
| 3490 | F32 bwahyay = bwah * yay; |
| 3491 | a.y = y; |
| 3492 | a.h -= yay; |
| 3493 | b.y += bwahyay; |
| 3494 | b.h -= bwahyay; |
| 3495 | } |
| 3496 | |
| 3497 | F32 axaw = a.x + a.w; |
| 3498 | F32 xw = x + w; |
| 3499 | |
| 3500 | if (axaw > xw) |
| 3501 | { |
| 3502 | F32 bwawaxawxw = bwaw * (axaw - xw); |
| 3503 | b.w -= bwawaxawxw; |
| 3504 | a.w = x + w - a.x; |
| 3505 | } |
| 3506 | |
| 3507 | F32 ayah = a.y + a.h; |
| 3508 | F32 yh = y + h; |
| 3509 | |
| 3510 | if (ayah > yh) |
| 3511 | { |
| 3512 | F32 bwahayahyh = bwah * (ayah - yh); |
| 3513 | b.h -= bwahayahyh; |
| 3514 | a.h = y + h - a.y; |
| 3515 | } |
| 3516 | } |
| 3517 | |
| 3518 | basic_rect<F32>& basic_rect<F32>::operator|=(const basic_rect<F32>& other) |
| 3519 | { |