From c8ab67f3408f6e939ce534513adb03cc300a865e Mon Sep 17 00:00:00 2001

From: =?UTF-8?q?Jaakko=20Kera=CC=88nen?= jaakko.keranen@iki.fi

Date: Sat, 2 Apr 2022 17:40:08 +0300

Subject: [PATCH 1/1] ListWidget: Better visbuf clearing


src/ui/listwidget.c | 29 +++++++++++++++++------------

src/ui/listwidget.h | 1 -

src/ui/visbuf.h | 2 +-

3 files changed, 18 insertions(+), 14 deletions(-)

diff --git a/src/ui/listwidget.c b/src/ui/listwidget.c

index 7a627188..cf333b78 100644

--- a/src/ui/listwidget.c

+++ b/src/ui/listwidget.c

@@ -71,6 +71,17 @@ static void scrollBegan_ListWidget_(iAnyObject *any, int offset, uint32_t span)

 refreshWhileScrolling_ListWidget_(d);

}

+static void visBufferInvalidated_ListWidget_(iVisBuf *d, size_t index) {

+}

void init_ListWidget(iListWidget *d) {

 iWidget *w = as_Widget(d);

 init_Widget(w);

@@ -91,7 +102,10 @@ void init_ListWidget(iListWidget *d) {

 init_Click(&d->click, d, SDL_BUTTON_LEFT);

 init_IntSet(&d->invalidItems);

 d->visBuf = new_VisBuf();

}

void deinit_ListWidget(iListWidget *d) {

@@ -104,7 +118,6 @@ void deinit_ListWidget(iListWidget *d) {

void invalidate_ListWidget(iListWidget *d) {

 invalidate_VisBuf(d->visBuf);

 clear_IntSet(&d->invalidItems); /* all will be drawn */

 refresh_Widget(as_Widget(d));

}

@@ -555,15 +568,7 @@ static void draw_ListWidget_(const iListWidget *d) {

 init_Paint(&p);

 drawLayerEffects_Widget(w);

 drawBackground_Widget(w);

 /* Update invalid regions/items. */ {

     /* TODO: This seems to draw two items per each shift of the visible region, even though

        one should be enough. Probably an off-by-one error in the calculation of the

@@ -577,7 +582,7 @@ static void draw_ListWidget_(const iListWidget *d) {

     const int bottom = numItems_ListWidget(d) * d->itemHeight;

     const iRangei vis = { scrollY / d->itemHeight * d->itemHeight,

                          ((scrollY + bounds.size.y) / d->itemHeight + 1) * d->itemHeight };

     /* Check which parts are invalid. */

     iRangei invalidRange[iElemCount(d->visBuf->buffers)];

     invalidRanges_VisBuf(d->visBuf, (iRangei){ 0, bottom }, invalidRange);

diff --git a/src/ui/listwidget.h b/src/ui/listwidget.h

index d59f11ef..da215b19 100644

--- a/src/ui/listwidget.h

+++ b/src/ui/listwidget.h

@@ -73,7 +73,6 @@ struct Impl_ListWidget {

 iVisBuf       *visBuf;

 enum iScrollMode scrollMode;

 iBool          noHoverWhileScrolling;

};

void init_ListWidget (iListWidget *);

diff --git a/src/ui/visbuf.h b/src/ui/visbuf.h

index 31c2c114..407112dc 100644

--- a/src/ui/visbuf.h

+++ b/src/ui/visbuf.h

@@ -33,7 +33,7 @@ struct Impl_VisBufTexture {

 SDL_Texture *texture;

 int origin;

 iRangei validRange;

};

#define numBuffers_VisBuf ((size_t) 4)

--

2.25.1

Proxy Information
Original URL
gemini://git.skyjake.fi/lagrange/work%2Fv1.12/patch/c8ab67f3408f6e939ce534513adb03cc300a865e.patch
Status Code
Success (20)
Meta
text/plain
Capsule Response Time
70.713735 milliseconds
Gemini-to-HTML Time
1.535413 milliseconds

This content has been proxied by September (3851b).