summaryrefslogtreecommitdiff
path: root/src/ui
diff options
context:
space:
mode:
Diffstat (limited to 'src/ui')
-rw-r--r--src/ui/documentwidget.c35
1 files changed, 27 insertions, 8 deletions
diff --git a/src/ui/documentwidget.c b/src/ui/documentwidget.c
index 7a1cdabc..dbe29c4e 100644
--- a/src/ui/documentwidget.c
+++ b/src/ui/documentwidget.c
@@ -1656,7 +1656,6 @@ static iBool render_DocumentView_(const iDocumentView *d, iDrawContext *ctx, iBo
1656 ctx->viewPos = init_I2(left_Rect(ctx->docBounds) - left_Rect(bounds), -buf->origin); 1656 ctx->viewPos = init_I2(left_Rect(ctx->docBounds) - left_Rect(bounds), -buf->origin);
1657 // printf(" buffer %zu: buf vis range %d...%d\n", i, bufVisRange.start, bufVisRange.end); 1657 // printf(" buffer %zu: buf vis range %d...%d\n", i, bufVisRange.start, bufVisRange.end);
1658 if (!prerenderExtra && !isEmpty_Range(&bufVisRange)) { 1658 if (!prerenderExtra && !isEmpty_Range(&bufVisRange)) {
1659 didDraw = iTrue;
1660 if (isEmpty_Rangei(buf->validRange)) { 1659 if (isEmpty_Rangei(buf->validRange)) {
1661 /* Fill the required currently visible range (vis). */ 1660 /* Fill the required currently visible range (vis). */
1662 const iRangei bufVisRange = intersect_Rangei(bufRange, vis); 1661 const iRangei bufVisRange = intersect_Rangei(bufRange, vis);
@@ -1669,26 +1668,46 @@ static iBool render_DocumentView_(const iDocumentView *d, iDrawContext *ctx, iBo
1669 extend_GmRunRange_(&meta->runsDrawn); 1668 extend_GmRunRange_(&meta->runsDrawn);
1670 buf->validRange = bufVisRange; 1669 buf->validRange = bufVisRange;
1671 // printf(" buffer %zu valid %d...%d\n", i, bufRange.start, bufRange.end); 1670 // printf(" buffer %zu valid %d...%d\n", i, bufRange.start, bufRange.end);
1671 didDraw = iTrue;
1672 } 1672 }
1673 } 1673 }
1674 else { 1674 else {
1675 /* Progressively fill the required runs. */ 1675 /* Progressively fill the required runs. */
1676 if (meta->runsDrawn.start) { 1676 if (meta->runsDrawn.start && buf->validRange.start > bufRange.start) {
1677 beginTarget_Paint(p, buf->texture); 1677 beginTarget_Paint(p, buf->texture);
1678 meta->runsDrawn.start = renderProgressive_GmDocument(d->doc, meta->runsDrawn.start, 1678 iZap(ctx->runsDrawn);
1679 -1, iInvalidSize, 1679 const iGmRun *newStart = renderProgressive_GmDocument(d->doc,
1680 bufVisRange, 1680 meta->runsDrawn.start,
1681 drawRun_DrawContext_, 1681 -1,
1682 ctx); 1682 iInvalidSize,
1683 buf->validRange.start = bufVisRange.start; 1683 bufVisRange,
1684 drawRun_DrawContext_,
1685 ctx);
1686 if (ctx->runsDrawn.start) {
1687 /* Something was actually drawn, so update the valid range. */
1688 const int newTop = top_Rect(ctx->runsDrawn.start->visBounds);
1689 if (newTop != buf->validRange.start) {
1690 didDraw = iTrue;
1691// printf("render: valid:%d->%d run:%p->%p\n",
1692// buf->validRange.start, newTop,
1693// meta->runsDrawn.start,
1694// ctx->runsDrawn.start); fflush(stdout);
1695 buf->validRange.start = newTop;
1696 }
1697 meta->runsDrawn.start = newStart;
1698 }
1684 } 1699 }
1685 if (meta->runsDrawn.end) { 1700 if (meta->runsDrawn.end) {
1686 beginTarget_Paint(p, buf->texture); 1701 beginTarget_Paint(p, buf->texture);
1702 iZap(ctx->runsDrawn);
1687 meta->runsDrawn.end = renderProgressive_GmDocument(d->doc, meta->runsDrawn.end, 1703 meta->runsDrawn.end = renderProgressive_GmDocument(d->doc, meta->runsDrawn.end,
1688 +1, iInvalidSize, 1704 +1, iInvalidSize,
1689 bufVisRange, 1705 bufVisRange,
1690 drawRun_DrawContext_, 1706 drawRun_DrawContext_,
1691 ctx); 1707 ctx);
1708 if (ctx->runsDrawn.start) {
1709 didDraw = iTrue;
1710 }
1692 buf->validRange.end = bufVisRange.end; 1711 buf->validRange.end = bufVisRange.end;
1693 } 1712 }
1694 } 1713 }