jcs
/detritus
/amendments
/24
*: Improve drawing
jcs made amendment 24 about 1 year ago
--- browser.c Mon Nov 4 09:29:10 2024
+++ browser.c Mon Nov 4 14:36:26 2024
@@ -58,6 +58,7 @@ void browser_atexit(struct focusable *focusable);
void browser_go(struct browser *browser, short dir);
page_handle browser_create_page(struct browser *browser, char *uristr);
void browser_draw_status(struct browser *browser);
+void browser_finished_loading(struct browser *browser);
void browser_follow_redir(struct browser *browser);
void browser_stop_loading_page(struct browser *browser);
void browser_free_links(struct browser *browser);
@@ -67,24 +68,16 @@ browser_idle(struct focusable *focusable, EventRecord
{
struct browser *browser = (struct browser *)focusable->cookie;
struct uri_handler *handler;
- struct URI *redir;
TEIdle(browser->uri_te);
if (browser->loading_page) {
HLock(browser->loading_page);
handler = (*(browser->loading_page))->handler;
-
- if (!handler->process(browser->loading_page)) {
- if ((*(browser->loading_page))->redir_to)
- browser_follow_redir(browser);
- else {
- browser_stop_loading_page(browser);
- browser->redirs = 0;
- }
- }
-
HUnlock(browser->loading_page);
+
+ if (!handler->process(browser->loading_page))
+ browser_finished_loading(browser);
}
}
@@ -289,6 +282,42 @@ browser_close(struct focusable *focusable)
}
void
+browser_finished_loading(struct browser *browser)
+{
+ struct URI *redir;
+ struct page *page;
+ size_t size;
+
+ HLock(browser->loading_page);
+
+ if ((*(browser->loading_page))->redir_to) {
+ browser_follow_redir(browser);
+ HUnlock(browser->loading_page);
+ return;
+ }
+
+ browser_stop_loading_page(browser);
+ browser->redirs = 0;
+
+ /* release some memory if we can */
+ HLock(browser->current_page);
+ page = *(browser->current_page);
+ if (page->content_size > page->content_len) {
+ size = page->content_len;
+ page->content_size = size;
+ HUnlock(browser->current_page);
+ SetHandleSize(browser->current_page, sizeof(struct page) + size);
+ HLock(browser->current_page);
+ page = *(browser->current_page);
+ }
+
+ browser_statusf(page->browser, "Finished loading %ld bytes",
+ page->content_len);
+
+ HUnlock(browser->current_page);
+}
+
+void
browser_stop_loading_page(struct browser *browser)
{
page_handle pageh;
@@ -647,6 +676,8 @@ browser_go(struct browser *browser, short dir)
struct page *page;
short len;
char *uristr;
+
+ browser_statusf(browser, "");
if (dir == 0) {
HLock(browser->uri_te);
@@ -888,6 +919,7 @@ browser_commit_to_page(struct browser *browser, page_h
HUnlock(browser->uri_te);
TEUpdate(&r, browser->uri_te);
+ TVAutoCalc(browser->output_tv, true);
TVClear(browser->output_tv);
TVUpdateScrollbar(browser->output_tv, browser->output_tv_scroller);
@@ -927,15 +959,16 @@ browser_commit_to_page(struct browser *browser, page_h
size_t
browser_grow_page_content(page_handle pageh, size_t len)
{
- unsigned long size;
+ unsigned long size, gsize;
HLock(pageh);
size = (*pageh)->content_size + MAX(len, PAGE_CONTENT_CHUNK_SIZE);
HUnlock(pageh);
- SetHandleSize(pageh, sizeof(struct page) + size);
+ gsize = sizeof(struct page) + size;
+ SetHandleSize(pageh, gsize);
if (MemError() != 0) {
- warn("Out of memory growing page handle");
+ warn("Out of memory growing page to %ld bytes", gsize);
return 0;
}
--- finger.c Mon Nov 4 11:37:48 2024
+++ finger.c Mon Nov 4 14:28:05 2024
@@ -268,7 +268,6 @@ parse:
TVAutoCalc(page->browser->output_tv, false);
ret = parse_content(page);
- TVAutoCalc(page->browser->output_tv, true);
TVCalcLines(page->browser->output_tv);
TVUpdate(page->browser->output_tv);
TVUpdateScrollbar(page->browser->output_tv,
@@ -279,17 +278,6 @@ parse:
return true;
}
- browser_statusf(page->browser, "Finished loading %ld bytes",
- page->content_len);
-
- /* release some memory if we can */
- if (page->content_size > page->content_len) {
- size = page->content_len;
- page->content_size = size;
- HUnlock(pageh);
- SetHandleSize(pageh, sizeof(struct page) + size);
- }
-
request_fail:
HUnlock(pageh);
return false;
@@ -298,7 +286,7 @@ request_fail:
static bool
parse_content(struct page *page)
{
- long n;
+ long n, plines = 0;
page->browser->style = STYLE_PRE;
@@ -313,6 +301,7 @@ parse_content(struct page *page)
page->content_pos++;
n++;
}
+ plines++;
} else if (page->content[n] == '\n') {
/* lone \n */
if (n > page->content_pos)
@@ -321,6 +310,15 @@ parse_content(struct page *page)
n - page->content_pos);
browser_print(page->browser, "\r", 1);
page->content_pos = n + 1;
+ plines++;
+ }
+
+ if (plines == 25) {
+ TVCalcLines(page->browser->output_tv);
+ TVUpdate(page->browser->output_tv);
+ TVUpdateScrollbar(page->browser->output_tv,
+ page->browser->output_tv_scroller);
+ plines = 0;
}
}
--- gemini.c Mon Nov 4 11:14:02 2024
+++ gemini.c Mon Nov 4 14:28:38 2024
@@ -258,10 +258,7 @@ gemini_process(page_handle pageh)
while (status != 0) {
if ((status & 0x1) && page->content_pos == page->content_len) {
/* closed */
- if (error == 0)
- browser_statusf(page->browser,
- "Finished reading %ld bytes", page->content_len);
- else
+ if (error != 0)
browser_statusf(page->browser,
"Error: TLS handshake failed: %d (TLS status 0x%x)",
error, status);
--- gopher.c Mon Nov 4 13:57:29 2024
+++ gopher.c Mon Nov 4 14:29:11 2024
@@ -289,7 +289,6 @@ parse:
TVAutoCalc(page->browser->output_tv, false);
ret = parse_content(page);
- TVAutoCalc(page->browser->output_tv, true);
TVCalcLines(page->browser->output_tv);
TVUpdate(page->browser->output_tv);
TVUpdateScrollbar(page->browser->output_tv,
@@ -299,17 +298,6 @@ parse:
HUnlock(pageh);
return true;
}
-
- browser_statusf(page->browser, "Finished loading %ld bytes",
- page->content_len);
-
- /* release some memory if we can */
- if (page->content_size > page->content_len) {
- size = page->content_len;
- page->content_size = size;
- HUnlock(pageh);
- SetHandleSize(pageh, sizeof(struct page) + size);
- }
request_fail:
HUnlock(pageh);
@@ -319,7 +307,7 @@ request_fail:
static bool
parse_content(struct page *page)
{
- long n;
+ long n, plines = 0;
if (page->type[0] == '1') {
/* gopher menu */
@@ -330,6 +318,15 @@ parse_content(struct page *page)
gopher_print_menu(page, page->content +
page->content_pos, n - page->content_pos);
page->content_pos = n + 1;
+ plines++;
+
+ if (plines == 25) {
+ TVCalcLines(page->browser->output_tv);
+ TVUpdate(page->browser->output_tv);
+ TVUpdateScrollbar(page->browser->output_tv,
+ page->browser->output_tv_scroller);
+ plines = 0;
+ }
}
}
@@ -352,6 +349,7 @@ parse_content(struct page *page)
page->content_pos++;
n++;
}
+ plines++;
} else if (page->content[n] == '\n') {
/* lone \n */
if (n > page->content_pos)
@@ -360,6 +358,15 @@ parse_content(struct page *page)
n - page->content_pos);
browser_print(page->browser, "\r", 1);
page->content_pos = n + 1;
+ plines++;
+ }
+
+ if (plines == 25) {
+ TVCalcLines(page->browser->output_tv);
+ TVUpdate(page->browser->output_tv);
+ TVUpdateScrollbar(page->browser->output_tv,
+ page->browser->output_tv_scroller);
+ plines = 0;
}
}