diff options
Diffstat (limited to 'src/app.c')
-rw-r--r-- | src/app.c | 25 |
1 files changed, 10 insertions, 15 deletions
@@ -1257,7 +1257,7 @@ iLocalDef iBool isWaitingAllowed_App_(iApp *d) { | |||
1257 | return iFalse; | 1257 | return iFalse; |
1258 | } | 1258 | } |
1259 | #endif | 1259 | #endif |
1260 | return !value_Atomic(&d->pendingRefresh) && isEmpty_SortedArray(&d->tickers); | 1260 | return !isRefreshPending_App(); |
1261 | } | 1261 | } |
1262 | 1262 | ||
1263 | static iBool nextEvent_App_(iApp *d, enum iAppEventMode eventMode, SDL_Event *event) { | 1263 | static iBool nextEvent_App_(iApp *d, enum iAppEventMode eventMode, SDL_Event *event) { |
@@ -1560,7 +1560,6 @@ static void runTickers_App_(iApp *d) { | |||
1560 | /* Tickers may add themselves again, so we'll run off a copy. */ | 1560 | /* Tickers may add themselves again, so we'll run off a copy. */ |
1561 | iSortedArray *pending = copy_SortedArray(&d->tickers); | 1561 | iSortedArray *pending = copy_SortedArray(&d->tickers); |
1562 | clear_SortedArray(&d->tickers); | 1562 | clear_SortedArray(&d->tickers); |
1563 | postRefresh_App(); | ||
1564 | iConstForEach(Array, i, &pending->values) { | 1563 | iConstForEach(Array, i, &pending->values) { |
1565 | const iTicker *ticker = i.value; | 1564 | const iTicker *ticker = i.value; |
1566 | if (ticker->callback) { | 1565 | if (ticker->callback) { |
@@ -1573,12 +1572,6 @@ static void runTickers_App_(iApp *d) { | |||
1573 | if (isEmpty_SortedArray(&d->tickers)) { | 1572 | if (isEmpty_SortedArray(&d->tickers)) { |
1574 | d->lastTickerTime = 0; | 1573 | d->lastTickerTime = 0; |
1575 | } | 1574 | } |
1576 | // iForIndices(i, d->window->base.roots) { | ||
1577 | // iRoot *root = d->window->base.roots[i]; | ||
1578 | // if (root) { | ||
1579 | // notifyVisualOffsetChange_Root(root); | ||
1580 | // } | ||
1581 | // } | ||
1582 | } | 1575 | } |
1583 | 1576 | ||
1584 | static int resizeWatcher_(void *user, SDL_Event *event) { | 1577 | static int resizeWatcher_(void *user, SDL_Event *event) { |
@@ -1645,19 +1638,20 @@ void refresh_App(void) { | |||
1645 | } | 1638 | } |
1646 | } | 1639 | } |
1647 | /* TODO: `pendingRefresh` should be window-specific. */ | 1640 | /* TODO: `pendingRefresh` should be window-specific. */ |
1648 | if (exchange_Atomic(&d->pendingRefresh, iFalse)) { | 1641 | if (d->warmupFrames || exchange_Atomic(&d->pendingRefresh, iFalse)) { |
1649 | /* Draw each window. */ | 1642 | /* Draw each window. */ |
1650 | iConstForEach(PtrArray, j, &windows) { | 1643 | iConstForEach(PtrArray, j, &windows) { |
1651 | iWindow *win = j.ptr; | 1644 | iWindow *win = j.ptr; |
1652 | setCurrent_Window(win); | 1645 | setCurrent_Window(win); |
1653 | switch (win->type) { | 1646 | switch (win->type) { |
1654 | case main_WindowType: | 1647 | case main_WindowType: { |
1655 | // iTime draw; | 1648 | // iTime draw; |
1656 | // initCurrent_Time(&draw); | 1649 | // initCurrent_Time(&draw); |
1657 | draw_MainWindow(as_MainWindow(win)); | 1650 | draw_MainWindow(as_MainWindow(win)); |
1658 | // printf("draw: %lld \u03bcs\n", (long long) (elapsedSeconds_Time(&draw) * 1000000)); | 1651 | // printf("draw: %lld \u03bcs\n", (long long) (elapsedSeconds_Time(&draw) * 1000000)); |
1659 | // fflush(stdout); | 1652 | // fflush(stdout); |
1660 | break; | 1653 | break; |
1654 | } | ||
1661 | default: | 1655 | default: |
1662 | draw_Window(win); | 1656 | draw_Window(win); |
1663 | break; | 1657 | break; |
@@ -1671,7 +1665,8 @@ void refresh_App(void) { | |||
1671 | } | 1665 | } |
1672 | 1666 | ||
1673 | iBool isRefreshPending_App(void) { | 1667 | iBool isRefreshPending_App(void) { |
1674 | return value_Atomic(&app_.pendingRefresh); | 1668 | const iApp *d = &app_; |
1669 | return !isEmpty_SortedArray(&d->tickers) || value_Atomic(&app_.pendingRefresh); | ||
1675 | } | 1670 | } |
1676 | 1671 | ||
1677 | iBool isFinishedLaunching_App(void) { | 1672 | iBool isFinishedLaunching_App(void) { |