diff options
Diffstat (limited to 'src/ui')
-rw-r--r-- | src/ui/documentwidget.c | 111 | ||||
-rw-r--r-- | src/ui/visbuf.c | 8 |
2 files changed, 59 insertions, 60 deletions
diff --git a/src/ui/documentwidget.c b/src/ui/documentwidget.c index 6a5ed172..703d1d13 100644 --- a/src/ui/documentwidget.c +++ b/src/ui/documentwidget.c | |||
@@ -4796,64 +4796,67 @@ static void draw_DocumentWidget_(const iDocumentWidget *d) { | |||
4796 | }; | 4796 | }; |
4797 | init_Paint(&ctx.paint); | 4797 | init_Paint(&ctx.paint); |
4798 | render_DocumentWidget_(d, &ctx, iFalse /* just the mandatory parts */); | 4798 | render_DocumentWidget_(d, &ctx, iFalse /* just the mandatory parts */); |
4799 | setClip_Paint(&ctx.paint, clipBounds); | 4799 | int yTop = docBounds.pos.y - pos_SmoothScroll(&d->scrollY); |
4800 | int yTop = docBounds.pos.y - pos_SmoothScroll(&d->scrollY); | 4800 | const iBool isDocEmpty = size_GmDocument(d->doc).y == 0; |
4801 | draw_VisBuf(d->visBuf, init_I2(bounds.pos.x, yTop), ySpan_Rect(bounds)); | ||
4802 | /* Text markers. */ | ||
4803 | const iBool isTouchSelecting = (flags_Widget(w) & touchDrag_WidgetFlag) != 0; | 4801 | const iBool isTouchSelecting = (flags_Widget(w) & touchDrag_WidgetFlag) != 0; |
4804 | if (!isEmpty_Range(&d->foundMark) || !isEmpty_Range(&d->selectMark)) { | 4802 | if (!isDocEmpty) { |
4805 | SDL_Renderer *render = renderer_Window(get_Window()); | 4803 | setClip_Paint(&ctx.paint, clipBounds); |
4806 | ctx.firstMarkRect = zero_Rect(); | 4804 | draw_VisBuf(d->visBuf, init_I2(bounds.pos.x, yTop), ySpan_Rect(bounds)); |
4807 | ctx.lastMarkRect = zero_Rect(); | 4805 | /* Text markers. */ |
4808 | SDL_SetRenderDrawBlendMode(render, | 4806 | if (!isEmpty_Range(&d->foundMark) || !isEmpty_Range(&d->selectMark)) { |
4809 | isDark_ColorTheme(colorTheme_App()) ? SDL_BLENDMODE_ADD | 4807 | SDL_Renderer *render = renderer_Window(get_Window()); |
4810 | : SDL_BLENDMODE_BLEND); | 4808 | ctx.firstMarkRect = zero_Rect(); |
4811 | ctx.viewPos = topLeft_Rect(docBounds); | 4809 | ctx.lastMarkRect = zero_Rect(); |
4812 | /* Marker starting outside the visible range? */ | 4810 | SDL_SetRenderDrawBlendMode(render, |
4813 | if (d->visibleRuns.start) { | 4811 | isDark_ColorTheme(colorTheme_App()) ? SDL_BLENDMODE_ADD |
4814 | if (!isEmpty_Range(&d->selectMark) && | 4812 | : SDL_BLENDMODE_BLEND); |
4815 | d->selectMark.start < d->visibleRuns.start->text.start && | 4813 | ctx.viewPos = topLeft_Rect(docBounds); |
4816 | d->selectMark.end > d->visibleRuns.start->text.start) { | 4814 | /* Marker starting outside the visible range? */ |
4817 | ctx.inSelectMark = iTrue; | 4815 | if (d->visibleRuns.start) { |
4816 | if (!isEmpty_Range(&d->selectMark) && | ||
4817 | d->selectMark.start < d->visibleRuns.start->text.start && | ||
4818 | d->selectMark.end > d->visibleRuns.start->text.start) { | ||
4819 | ctx.inSelectMark = iTrue; | ||
4820 | } | ||
4821 | if (isEmpty_Range(&d->foundMark) && | ||
4822 | d->foundMark.start < d->visibleRuns.start->text.start && | ||
4823 | d->foundMark.end > d->visibleRuns.start->text.start) { | ||
4824 | ctx.inFoundMark = iTrue; | ||
4825 | } | ||
4818 | } | 4826 | } |
4819 | if (isEmpty_Range(&d->foundMark) && | 4827 | render_GmDocument(d->doc, vis, drawMark_DrawContext_, &ctx); |
4820 | d->foundMark.start < d->visibleRuns.start->text.start && | 4828 | SDL_SetRenderDrawBlendMode(render, SDL_BLENDMODE_NONE); |
4821 | d->foundMark.end > d->visibleRuns.start->text.start) { | 4829 | /* Selection range pins. */ |
4822 | ctx.inFoundMark = iTrue; | 4830 | if (isTouchSelecting) { |
4831 | drawPin_(&ctx.paint, ctx.firstMarkRect, 0); | ||
4832 | drawPin_(&ctx.paint, ctx.lastMarkRect, 1); | ||
4823 | } | 4833 | } |
4824 | } | 4834 | } |
4825 | render_GmDocument(d->doc, vis, drawMark_DrawContext_, &ctx); | 4835 | drawMedia_DocumentWidget_(d, &ctx.paint); |
4826 | SDL_SetRenderDrawBlendMode(render, SDL_BLENDMODE_NONE); | 4836 | /* Fill the top and bottom, in case the document is short. */ |
4827 | /* Selection range pins. */ | 4837 | if (yTop > top_Rect(bounds)) { |
4828 | if (isTouchSelecting) { | 4838 | fillRect_Paint(&ctx.paint, |
4829 | drawPin_(&ctx.paint, ctx.firstMarkRect, 0); | 4839 | (iRect){ bounds.pos, init_I2(bounds.size.x, yTop - top_Rect(bounds)) }, |
4830 | drawPin_(&ctx.paint, ctx.lastMarkRect, 1); | 4840 | hasSiteBanner_GmDocument(d->doc) ? tmBannerBackground_ColorId |
4831 | } | 4841 | : tmBackground_ColorId); |
4832 | } | 4842 | } |
4833 | drawMedia_DocumentWidget_(d, &ctx.paint); | 4843 | const int yBottom = yTop + size_GmDocument(d->doc).y + 1; |
4834 | /* Fill the top and bottom, in case the document is short. */ | 4844 | if (yBottom < bottom_Rect(bounds)) { |
4835 | if (yTop > top_Rect(bounds)) { | 4845 | fillRect_Paint(&ctx.paint, |
4836 | fillRect_Paint(&ctx.paint, | 4846 | init_Rect(bounds.pos.x, yBottom, bounds.size.x, bottom_Rect(bounds) - yBottom), |
4837 | (iRect){ bounds.pos, init_I2(bounds.size.x, yTop - top_Rect(bounds)) }, | 4847 | tmBackground_ColorId); |
4838 | hasSiteBanner_GmDocument(d->doc) ? tmBannerBackground_ColorId | 4848 | } |
4839 | : tmBackground_ColorId); | 4849 | unsetClip_Paint(&ctx.paint); |
4840 | } | 4850 | drawSideElements_DocumentWidget_(d); |
4841 | const int yBottom = yTop + size_GmDocument(d->doc).y + 1; | 4851 | if (prefs_App()->hoverLink && d->hoverLink) { |
4842 | if (yBottom < bottom_Rect(bounds)) { | 4852 | const int font = uiLabel_FontId; |
4843 | fillRect_Paint(&ctx.paint, | 4853 | const iRangecc linkUrl = range_String(linkUrl_GmDocument(d->doc, d->hoverLink->linkId)); |
4844 | init_Rect(bounds.pos.x, yBottom, bounds.size.x, bottom_Rect(bounds) - yBottom), | 4854 | const iInt2 size = measureRange_Text(font, linkUrl).bounds.size; |
4845 | tmBackground_ColorId); | 4855 | const iRect linkRect = { addY_I2(bottomLeft_Rect(bounds), -size.y), |
4846 | } | 4856 | addX_I2(size, 2 * gap_UI) }; |
4847 | unsetClip_Paint(&ctx.paint); | 4857 | fillRect_Paint(&ctx.paint, linkRect, tmBackground_ColorId); |
4848 | drawSideElements_DocumentWidget_(d); | 4858 | drawRange_Text(font, addX_I2(topLeft_Rect(linkRect), gap_UI), tmParagraph_ColorId, linkUrl); |
4849 | if (prefs_App()->hoverLink && d->hoverLink) { | 4859 | } |
4850 | const int font = uiLabel_FontId; | ||
4851 | const iRangecc linkUrl = range_String(linkUrl_GmDocument(d->doc, d->hoverLink->linkId)); | ||
4852 | const iInt2 size = measureRange_Text(font, linkUrl).bounds.size; | ||
4853 | const iRect linkRect = { addY_I2(bottomLeft_Rect(bounds), -size.y), | ||
4854 | addX_I2(size, 2 * gap_UI) }; | ||
4855 | fillRect_Paint(&ctx.paint, linkRect, tmBackground_ColorId); | ||
4856 | drawRange_Text(font, addX_I2(topLeft_Rect(linkRect), gap_UI), tmParagraph_ColorId, linkUrl); | ||
4857 | } | 4860 | } |
4858 | if (colorTheme_App() == pureWhite_ColorTheme) { | 4861 | if (colorTheme_App() == pureWhite_ColorTheme) { |
4859 | drawHLine_Paint(&ctx.paint, topLeft_Rect(bounds), width_Rect(bounds), uiSeparator_ColorId); | 4862 | drawHLine_Paint(&ctx.paint, topLeft_Rect(bounds), width_Rect(bounds), uiSeparator_ColorId); |
diff --git a/src/ui/visbuf.c b/src/ui/visbuf.c index 88a5fd60..503d0a2f 100644 --- a/src/ui/visbuf.c +++ b/src/ui/visbuf.c | |||
@@ -58,18 +58,14 @@ void alloc_VisBuf(iVisBuf *d, const iInt2 size, int granularity) { | |||
58 | if (tex->texture) { | 58 | if (tex->texture) { |
59 | SDL_DestroyTexture(tex->texture); | 59 | SDL_DestroyTexture(tex->texture); |
60 | } | 60 | } |
61 | SDL_Renderer *rend = renderer_Window(get_Window()); | ||
61 | tex->texture = | 62 | tex->texture = |
62 | SDL_CreateTexture(renderer_Window(get_Window()), | 63 | SDL_CreateTexture(rend, |
63 | SDL_PIXELFORMAT_RGBA8888, | 64 | SDL_PIXELFORMAT_RGBA8888, |
64 | SDL_TEXTUREACCESS_STATIC | SDL_TEXTUREACCESS_TARGET, | 65 | SDL_TEXTUREACCESS_STATIC | SDL_TEXTUREACCESS_TARGET, |
65 | texSize.x, | 66 | texSize.x, |
66 | texSize.y); | 67 | texSize.y); |
67 | SDL_SetTextureBlendMode(tex->texture, SDL_BLENDMODE_NONE); | 68 | SDL_SetTextureBlendMode(tex->texture, SDL_BLENDMODE_NONE); |
68 | // tex->origin = i * texSize.y; | ||
69 | // iZap(tex->validRange); | ||
70 | // if (d->invalidUserData) { | ||
71 | // d->invalidUserData(i, d->buffers[i].user); | ||
72 | // } | ||
73 | } | 69 | } |
74 | invalidate_VisBuf(d); | 70 | invalidate_VisBuf(d); |
75 | } | 71 | } |