diff options
author | Chris Young <chris@unsatisfactorysoftware.co.uk> | 2013-02-06 18:44:41 +0000 |
---|---|---|
committer | Chris Young <chris@unsatisfactorysoftware.co.uk> | 2013-02-06 18:44:41 +0000 |
commit | 02115a8958b28d7d5d27efcb0cebfe7fe8167a56 (patch) | |
tree | 5df326768620e4ed9c1030eb2328662b3a3a7818 | |
parent | 7c671378aa0484ea51bd54a671ea01adac08c434 (diff) | |
download | netsurf-02115a8958b28d7d5d27efcb0cebfe7fe8167a56.tar.gz netsurf-02115a8958b28d7d5d27efcb0cebfe7fe8167a56.tar.bz2 |
Optimise box redraws some more by discarding simple subsets
-rwxr-xr-x | amiga/gui.c | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/amiga/gui.c b/amiga/gui.c index 0c021a677..5aadcc501 100755 --- a/amiga/gui.c +++ b/amiga/gui.c @@ -3818,16 +3818,24 @@ static bool gui_window_update_box_deferred_check(struct MinList *deferred_rects, node = (struct nsObject *)GetHead((struct List *)deferred_rects); do { + nnode=(struct nsObject *)GetSucc((struct Node *)node); rect = (struct rect *)node->objstruct; - if((rect->x0 == new_rect->x0) && - (rect->y0 == new_rect->y0) && - (rect->x1 == new_rect->x1) && - (rect->y1 == new_rect->y1)) { + if((rect->x0 <= new_rect->x0) && + (rect->y0 <= new_rect->y0) && + (rect->x1 >= new_rect->x1) && + (rect->y1 >= new_rect->y1)) { return false; } - - nnode=(struct nsObject *)GetSucc((struct Node *)node); + + if ((new_rect->x0 <= rect->x0) && + (new_rect->y0 <= rect->y0) && + (new_rect->x1 >= rect->x1) && + (new_rect->y1 >= rect->y1)) { + LOG(("Removing queued redraw that is a subset of new box redraw")); + DelObject(node); + /* Don't return - we might find more */ + } } while(node = nnode); return true; @@ -3847,7 +3855,7 @@ void gui_window_update_box(struct gui_window *g, const struct rect *rect) nsobj = AddObject(g->deferred_rects, AMINS_RECT); nsobj->objstruct = deferred_rect; } else { - LOG(("Ignoring duplicate box redraw already queued")); + LOG(("Ignoring duplicate or subset of queued box redraw")); } } |