* 0x004C6B09 * * @param edi @ * @param x @ * @param y @ * @param viewport @ */
| 1515 | * @param viewport @<esi> |
| 1516 | */ |
| 1517 | void viewportRedrawAfterShift(Window* window, Viewport* viewport, int32_t x, int32_t y) |
| 1518 | { |
| 1519 | while (window != nullptr) |
| 1520 | { |
| 1521 | // skip current window and non-intersecting windows |
| 1522 | if (viewport == window->viewports[0] |
| 1523 | || viewport == window->viewports[1] |
| 1524 | || viewport->x + viewport->width <= window->x |
| 1525 | || viewport->x >= window->x + window->width |
| 1526 | || viewport->y + viewport->height <= window->y |
| 1527 | || viewport->y >= window->y + window->height) |
| 1528 | { |
| 1529 | size_t nextWindowIndex = WindowManager::indexOf(*window) + 1; |
| 1530 | window = nextWindowIndex >= count() ? nullptr : WindowManager::get(nextWindowIndex); |
| 1531 | continue; |
| 1532 | } |
| 1533 | |
| 1534 | // save viewport |
| 1535 | Ui::Viewport viewCopy = *viewport; |
| 1536 | |
| 1537 | if (viewport->x < window->x) |
| 1538 | { |
| 1539 | viewport->width = window->x - viewport->x; |
| 1540 | viewport->viewWidth = viewport->width << viewport->zoom; |
| 1541 | viewportRedrawAfterShift(window, viewport, x, y); |
| 1542 | |
| 1543 | viewport->x += viewport->width; |
| 1544 | viewport->viewX += viewport->width << viewport->zoom; |
| 1545 | viewport->width = viewCopy.width - viewport->width; |
| 1546 | viewport->viewWidth = viewport->width << viewport->zoom; |
| 1547 | viewportRedrawAfterShift(window, viewport, x, y); |
| 1548 | } |
| 1549 | else if (viewport->x + viewport->width > window->x + window->width) |
| 1550 | { |
| 1551 | viewport->width = window->x + window->width - viewport->x; |
| 1552 | viewport->viewWidth = viewport->width << viewport->zoom; |
| 1553 | viewportRedrawAfterShift(window, viewport, x, y); |
| 1554 | |
| 1555 | viewport->x += viewport->width; |
| 1556 | viewport->viewX += viewport->width << viewport->zoom; |
| 1557 | viewport->width = viewCopy.width - viewport->width; |
| 1558 | viewport->viewWidth = viewport->width << viewport->zoom; |
| 1559 | viewportRedrawAfterShift(window, viewport, x, y); |
| 1560 | } |
| 1561 | else if (viewport->y < window->y) |
| 1562 | { |
| 1563 | viewport->height = window->y - viewport->y; |
| 1564 | viewport->viewHeight = viewport->height << viewport->zoom; |
| 1565 | viewportRedrawAfterShift(window, viewport, x, y); |
| 1566 | |
| 1567 | viewport->y += viewport->height; |
| 1568 | viewport->viewY += viewport->height << viewport->zoom; |
| 1569 | viewport->height = viewCopy.height - viewport->height; |
| 1570 | viewport->viewHeight = viewport->height << viewport->zoom; |
| 1571 | viewportRedrawAfterShift(window, viewport, x, y); |
| 1572 | } |
| 1573 | else if (viewport->y + viewport->height > window->y + window->height) |
| 1574 | { |
no test coverage detected