MCPcopy Create free account
hub / github.com/OpenLoco/OpenLoco / viewportRedrawAfterShift

Function viewportRedrawAfterShift

src/OpenLoco/src/Ui/WindowManager.cpp:1517–1635  ·  view source on GitHub ↗

* 0x004C6B09 * * @param edi @ * @param x @ * @param y @ * @param viewport @ */

Source from the content-addressed store, hash-verified

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 {

Callers 1

viewportShiftPixelsFunction · 0.85

Calls 5

indexOfFunction · 0.85
countFunction · 0.85
movePixelsOnScreenFunction · 0.85
getFunction · 0.70
renderFunction · 0.70

Tested by

no test coverage detected