From a7806a4cd61e8125b9ce095515418e84f34256c1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jaakko=20Ker=C3=A4nen?= jaakko.keranen@iki.fi
Date: Sat, 12 Sep 2020 23:22:19 +0300
Subject: [PATCH 1/1] Cleanup
src/ui/documentwidget.c | 172 ++++++++++++----------------------------
src/ui/listwidget.c | 51 ++----------
2 files changed, 56 insertions(+), 167 deletions(-)
diff --git a/src/ui/documentwidget.c b/src/ui/documentwidget.c
index 2dd50e5b..9b6ad509 100644
--- a/src/ui/documentwidget.c
+++ b/src/ui/documentwidget.c
@@ -128,42 +128,6 @@ void deserialize_Model(iModel *d, iStream *ins) {
iDefineTypeConstruction(Model)
-#if 0
-/----------------------------------------------------------------------------------------------/
-iDeclareType(VisBuffer)
-iDeclareTypeConstruction(VisBuffer)
-struct Impl_VisBuffer {
-};
-void init_VisBuffer(iVisBuffer *d) {
-}
-void deinit_VisBuffer(iVisBuffer *d) {
if (d->texture[i]) {
SDL_DestroyTexture(d->texture[i]);
}
-}
-void dealloc_VisBuffer(iVisBuffer *d) {
SDL_DestroyTexture(d->texture[i]);
d->texture[i] = NULL;
-}
-iDefineTypeConstruction(VisBuffer)
-#endif
/----------------------------------------------------------------------------------------------/
static const int smoothSpeed_DocumentWidget_ = 120; /* unit: gap_Text per second */
@@ -313,16 +277,6 @@ static int forceBreakWidth_DocumentWidget_(const iDocumentWidget *d) {
return 0;
}
-iLocalDef int documentToWindowY_DocumentWidget_(const iDocumentWidget *d, int docY) {
-}
-#if 0
-iLocalDef int windowToDocumentY_DocumentWidget_(const iDocumentWidget *d, int localY) {
-}
-#endif
static iInt2 documentPos_DocumentWidget_(const iDocumentWidget *d, iInt2 pos) {
return addY_I2(sub_I2(pos, topLeft_Rect(documentBounds_DocumentWidget_(d))), d->scrollY);
}
@@ -1585,15 +1539,7 @@ static iBool processEvent_DocumentWidget_(iDocumentWidget *d, const SDL_Event *e
iDeclareType(DrawContext)
-#if 0
-enum iDrawRunPass {
-};
-#endif
struct Impl_DrawContext {
-// enum iDrawRunPass pass;
const iDocumentWidget *widget;
iRect widgetBounds;
iInt2 viewPos; /* document area origin */
@@ -1644,35 +1590,21 @@ static void drawRun_DrawContext_(void *context, const iGmRun *run) {
iDrawContext *d = context;
const iInt2 origin = d->viewPos;
if (run->imageId) {
/*if (d->pass == static_DrawRunPass)*/ {
SDL_Texture *tex = imageTexture_GmDocument(d->widget->doc, run->imageId);
if (tex) {
const iRect dst = moved_Rect(run->visBounds, origin);
SDL_RenderCopy(d->paint.dst->render, tex, NULL,
&(SDL_Rect){ dst.pos.x, dst.pos.y, dst.size.x, dst.size.y });
}
SDL_Texture *tex = imageTexture_GmDocument(d->widget->doc, run->imageId);
if (tex) {
const iRect dst = moved_Rect(run->visBounds, origin);
SDL_RenderCopy(d->paint.dst->render, tex, NULL,
&(SDL_Rect){ dst.pos.x, dst.pos.y, dst.size.x, dst.size.y });
}
return;
}
enum iColorId fg = run->color;
const iGmDocument *doc = d->widget->doc;
-// const iBool isDynamic = (run->linkId && ~run->flags & decoration_GmRunFlag);
-// if (isDynamic ^ (d->pass == dynamic_DrawRunPass)) {
-// return;
-// }
(run->linkId && d->widget->hoverLink && run->linkId == d->widget->hoverLink->linkId &&
~run->flags & decoration_GmRunFlag);
const iInt2 visPos = add_I2(run->visBounds.pos, origin);
(iRect){ visPos,
/* Links have additional hover info on the right side. */
-// init_I2(run->linkId && ~run->flags & decoration_GmRunFlag
-// ? d->widgetBounds.size.x - visPos.x :
init_I2(run->visBounds.size.x,
run->visBounds.size.y) },
tmBackground_ColorId);
if (run->linkId && ~run->flags & decoration_GmRunFlag) {
fg = linkColor_GmDocument(doc, run->linkId, isHover ? textHover_GmLinkPart : text_GmLinkPart);
if (linkFlags_GmDocument(doc, run->linkId) & content_GmLinkFlag) {
@@ -1680,42 +1612,40 @@ static void drawRun_DrawContext_(void *context, const iGmRun *run) {
}
}
if (run->flags & siteBanner_GmRunFlag) {
/*if (d->pass == static_DrawRunPass)*/ {
/* Draw the site banner. */
fillRect_Paint(
&d->paint,
initCorners_Rect(topLeft_Rect(d->widgetBounds),
init_I2(right_Rect(bounds_Widget(constAs_Widget(d->widget))),
visPos.y + height_Rect(run->visBounds))),
tmBannerBackground_ColorId);
const iChar icon = siteIcon_GmDocument(doc);
iString bannerText;
init_String(&bannerText);
iInt2 bpos = add_I2(visPos, init_I2(0, lineHeight_Text(banner_FontId) / 2));
if (icon) {
-// appendChar_String(&bannerText, 0x2b24); // icon);
-// const iRect iconRect = visualBounds_Text(hugeBold_FontId, range_String(&bannerText));
-// drawRange_Text(hugeBold_FontId, /run->font,/
-// addY_I2(bpos, -mid_Rect(iconRect).y + lineHeight_Text(run->font) / 2),
-// tmBannerIcon_ColorId,
-// range_String(&bannerText));
-// clear_String(&bannerText);
appendChar_String(&bannerText, icon);
const iRect iconRect = visualBounds_Text(run->font, range_String(&bannerText));
drawRange_Text(
run->font,
addY_I2(bpos, -mid_Rect(iconRect).y + lineHeight_Text(run->font) / 2),
tmBannerIcon_ColorId,
range_String(&bannerText));
bpos.x += right_Rect(iconRect) + 3 * gap_Text;
}
drawRange_Text(run->font,
bpos,
tmBannerTitle_ColorId,
isEmpty_String(d->widget->titleUser) ? run->text
: range_String(d->widget->titleUser));
deinit_String(&bannerText);
}
/* Draw the site banner. */
fillRect_Paint(
&d->paint,
initCorners_Rect(topLeft_Rect(d->widgetBounds),
init_I2(right_Rect(bounds_Widget(constAs_Widget(d->widget))),
visPos.y + height_Rect(run->visBounds))),
tmBannerBackground_ColorId);
const iChar icon = siteIcon_GmDocument(doc);
iString bannerText;
init_String(&bannerText);
iInt2 bpos = add_I2(visPos, init_I2(0, lineHeight_Text(banner_FontId) / 2));
if (icon) {
+// appendChar_String(&bannerText, 0x2b24); // icon);
+// const iRect iconRect = visualBounds_Text(hugeBold_FontId, range_String(&bannerText));
+// drawRange_Text(hugeBold_FontId, /run->font,/
+// addY_I2(bpos, -mid_Rect(iconRect).y + lineHeight_Text(run->font) / 2),
+// tmBannerIcon_ColorId,
+// range_String(&bannerText));
+// clear_String(&bannerText);
appendChar_String(&bannerText, icon);
const iRect iconRect = visualBounds_Text(run->font, range_String(&bannerText));
drawRange_Text(
run->font,
addY_I2(bpos, -mid_Rect(iconRect).y + lineHeight_Text(run->font) / 2),
tmBannerIcon_ColorId,
range_String(&bannerText));
bpos.x += right_Rect(iconRect) + 3 * gap_Text;
}
drawRange_Text(run->font,
bpos,
tmBannerTitle_ColorId,
isEmpty_String(d->widget->titleUser) ? run->text
: range_String(d->widget->titleUser));
deinit_String(&bannerText);
}
else {
if (d->showLinkNumbers && run->linkId && run->flags & decoration_GmRunFlag) {
@@ -1734,7 +1664,7 @@ static void drawRun_DrawContext_(void *context, const iGmRun *run) {
runDrawn:;
}
/* Presentation of links. */
const int metaFont = paragraph_FontId;
/* TODO: Show status of an ongoing media request. */
const int flags = linkFlags_GmDocument(doc, run->linkId);
@@ -1908,6 +1838,15 @@ static void draw_DocumentWidget_(const iDocumentWidget *d) {
setClip_Paint(&ctx.paint, bounds);
const int yTop = docBounds.pos.y - d->scrollY;
draw_VisBuf(visBuf, init_I2(bounds.pos.x, yTop));
SDL_SetRenderDrawBlendMode(renderer_Window(get_Window()),
isDark_ColorTheme(colorTheme_App()) ? SDL_BLENDMODE_ADD
: SDL_BLENDMODE_BLEND);
ctx.viewPos = topLeft_Rect(docBounds);
render_GmDocument(d->doc, vis, drawMark_DrawContext_, &ctx);
SDL_SetRenderDrawBlendMode(renderer_Window(get_Window()), SDL_BLENDMODE_NONE);
unsetClip_Paint(&ctx.paint);
/* Fill the top and bottom, in case the document is short. */
if (yTop > top_Rect(bounds)) {
@@ -1922,15 +1861,6 @@ static void draw_DocumentWidget_(const iDocumentWidget *d) {
init_Rect(bounds.pos.x, yBottom, bounds.size.x, bottom_Rect(bounds) - yBottom),
tmBackground_ColorId);
}
SDL_SetRenderDrawBlendMode(renderer_Window(get_Window()),
isDark_ColorTheme(colorTheme_App()) ? SDL_BLENDMODE_ADD
: SDL_BLENDMODE_BLEND);
ctx.viewPos = topLeft_Rect(docBounds);
render_GmDocument(d->doc, vis, drawMark_DrawContext_, &ctx);
SDL_SetRenderDrawBlendMode(renderer_Window(get_Window()), SDL_BLENDMODE_NONE);
draw_Widget(w);
}
diff --git a/src/ui/listwidget.c b/src/ui/listwidget.c
index b10bf8c3..fb328c2f 100644
--- a/src/ui/listwidget.c
+++ b/src/ui/listwidget.c
@@ -302,31 +302,6 @@ static iBool processEvent_ListWidget_(iListWidget *d, const SDL_Event *ev) {
return processEvent_Widget(w, ev);
}
-#if 0
-static void allocVisBuffer_ListWidget_(iListWidget *d) {
-// const iRect inner = innerBounds_Widget(as_Widget(d));
d->visBufSize = size;
iForIndices(i, d->visBuffers) {
if (d->visBuffers[i].texture) {
SDL_DestroyTexture(d->visBuffers[i].texture);
}
d->visBuffers[i].texture =
SDL_CreateTexture(renderer_Window(get_Window()),
SDL_PIXELFORMAT_RGBA8888,
SDL_TEXTUREACCESS_STATIC | SDL_TEXTUREACCESS_TARGET,
size.x,
size.y);
SDL_SetTextureBlendMode(d->visBuffers[i].texture, SDL_BLENDMODE_NONE);
d->visBuffers[i].origin = i * size.y;
iZap(d->visBuffers[i].validRange);
}
-}
-#endif
static void drawItem_ListWidget_(const iListWidget *d, iPaint *p, size_t index, iInt2 pos) {
const iWidget * w = constAs_Widget(d);
const iRect bounds = innerBounds_Widget(w);
@@ -340,15 +315,14 @@ static const iListItem *item_ListWidget_(const iListWidget *d, size_t pos) {
}
static void draw_ListWidget_(const iListWidget *d) {
if (!bounds.size.y || !bounds.size.x || !d->itemHeight) {
return;
}
iPaint p;
init_Paint(&p);
drawBackground_Widget(w);
-// iListWidget *m = iConstCast(iListWidget *, d);
alloc_VisBuf(d->visBuf, bounds.size, d->itemHeight);
/* Update invalid regions/items. */ {
/* TODO: This seems to draw two items per each shift of the visible region, even though
@@ -362,19 +336,15 @@ static void draw_ListWidget_(const iListWidget *d) {
const int bottom = numItems_ListWidget(d) * d->itemHeight;
const iRangei vis = { d->scrollY / d->itemHeight * d->itemHeight,
((d->scrollY + bounds.size.y) / d->itemHeight + 1) * d->itemHeight };
-// printf("visBufSize.y = %d\n", d->visBufSize.y);
reposition_VisBuf(d->visBuf, vis);
/* Check which parts are invalid. */
iRangei invalidRange[3];
invalidRanges_VisBuf(d->visBuf, (iRangei){ 0, bottom }, invalidRange);
iForIndices(i, d->visBuf->buffers) {
iVisBufTexture *buf = &d->visBuf->buffers[i];
-// printf("%zu: orig %d, invalid %d ... %d\n", i, buf->origin, invalidRange[i].start, invalidRange[i].end);
iRanges drawItems = { iMax(0, buf->origin) / d->itemHeight,
iMax(0, buf->origin + d->visBuf->texSize.y) / d->itemHeight };
iBool isTargetSet = iFalse;
if (isEmpty_Rangei(buf->validRange)) {
isTargetSet = iTrue;
beginTarget_Paint(&p, buf->texture);
fillRect_Paint(&p, (iRect){ zero_I2(), d->visBuf->texSize }, bg[i]);
}
@@ -384,21 +354,14 @@ static void draw_ListWidget_(const iListWidget *d) {
const iListItem *item = constAt_PtrArray(&d->items, index);
const iRect itemRect = { init_I2(0, index * d->itemHeight - buf->origin),
init_I2(d->visBuf->texSize.x, d->itemHeight) };
if (!isTargetSet) {
beginTarget_Paint(&p, buf->texture);
isTargetSet = iTrue;
}
beginTarget_Paint(&p, buf->texture);
fillRect_Paint(&p, itemRect, bg[i]);
class_ListItem(item)->draw(item, &p, itemRect, d);
-// printf("- drawing invalid item %zu\n", index);
}
}
/* Visible range is not fully covered. Fill in the new items. */
if (!isEmpty_Rangei(invalidRange[i])) {
if (!isTargetSet) {
beginTarget_Paint(&p, buf->texture);
isTargetSet = iTrue;
}
beginTarget_Paint(&p, buf->texture);
drawItems.start = invalidRange[i].start / d->itemHeight;
drawItems.end = invalidRange[i].end / d->itemHeight + 1;
for (size_t j = drawItems.start; j < drawItems.end && j < size_PtrArray(&d->items); j++) {
@@ -407,13 +370,9 @@ static void draw_ListWidget_(const iListWidget *d) {
init_I2(d->visBuf->texSize.x, d->itemHeight) };
fillRect_Paint(&p, itemRect, bg[i]);
class_ListItem(item)->draw(item, &p, itemRect, d);
-// printf("- drawing item %zu\n", j);
}
}
if (isTargetSet) {
endTarget_Paint(&p);
}
-// fflush(stdout);
endTarget_Paint(&p);
}
validate_VisBuf(d->visBuf);
clear_IntSet(&iConstCast(iListWidget *, d)->invalidItems);
--
2.25.1
text/plain
This content has been proxied by September (3851b).