Gitweb links:
...log
http://git.netsurf-browser.org/netsurf.git/shortlog/53962009da5eb95a7c314...
...commit
http://git.netsurf-browser.org/netsurf.git/commit/53962009da5eb95a7c3146c...
...tree
http://git.netsurf-browser.org/netsurf.git/tree/53962009da5eb95a7c3146cdc...
The branch, master has been updated
via 53962009da5eb95a7c3146cdcce59c588d9bf3ce (commit)
via cc4411c0c7452968349725bf1edbcd1731422180 (commit)
from 7de97e8d6a2899a4811b494f74064989eeac1b00 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commitdiff
http://git.netsurf-browser.org/netsurf.git/commit/?id=53962009da5eb95a7c3...
commit 53962009da5eb95a7c3146cdcce59c588d9bf3ce
Author: Michael Drake <tlsa(a)netsurf-browser.org>
Commit: Michael Drake <tlsa(a)netsurf-browser.org>
Trivial redraw optimisation for multiline textareas. Only redraw the line that was
changed and below.
diff --git a/desktop/textarea.c b/desktop/textarea.c
index 81af9f8..e614cc4 100644
--- a/desktop/textarea.c
+++ b/desktop/textarea.c
@@ -861,7 +861,8 @@ static bool textarea_reflow_singleline(struct textarea *ta, size_t
b_off,
* \param b_start 0-based byte offset in ta->text to start of modification
* \return true on success false otherwise
*/
-static bool textarea_reflow_multiline(struct textarea *ta, size_t b_start)
+static bool textarea_reflow_multiline(struct textarea *ta, const size_t b_start,
+ struct rect *r)
{
char *text;
unsigned int len;
@@ -907,9 +908,9 @@ static bool textarea_reflow_multiline(struct textarea *ta, size_t
b_start)
do {
/* Set line count to start point */
if (restart)
- line = 0;
- else
- line = start;
+ start = 0;
+
+ line = start;
/* Find available width */
avail_width = ta->vis_width - 2 * ta->border_width -
@@ -1098,6 +1099,14 @@ static bool textarea_reflow_multiline(struct textarea *ta, size_t
b_start)
ta->v_extent = v_extent;
ta->line_count = line;
+ /* Don't need to redraw above changes, so update redraw request rect*/
+ if (ta->lines[start].b_start + ta->lines[start].b_length < b_start &&
+ restart == false)
+ /* Start line is unchanged */
+ start++;
+ r->y0 = max(r->y0, (signed)(ta->line_height * start +
+ ta->text_y_offset - ta->scroll_y));
+
return true;
}
@@ -1249,7 +1258,7 @@ static bool textarea_insert_text(struct textarea *ta, const char
*text,
/* See to reflow */
if (ta->flags & TEXTAREA_MULTILINE) {
- if (!textarea_reflow_multiline(ta, show_b_off))
+ if (!textarea_reflow_multiline(ta, show_b_off, r))
return false;
} else {
if (!textarea_reflow_singleline(ta, show_b_off, r))
@@ -1401,7 +1410,7 @@ static bool textarea_replace_text(struct textarea *ta, size_t
b_start,
/* See to reflow */
if (ta->flags & TEXTAREA_MULTILINE) {
- if (!textarea_reflow_multiline(ta, b_start))
+ if (!textarea_reflow_multiline(ta, b_start, r))
return false;
} else {
if (!textarea_reflow_singleline(ta, show_b_off, r))
@@ -1606,7 +1615,7 @@ struct textarea *textarea_create(const textarea_flags flags,
textarea_setup_text_offsets(ret);
if (flags & TEXTAREA_MULTILINE)
- textarea_reflow_multiline(ret, 0);
+ textarea_reflow_multiline(ret, 0, &r);
else
textarea_reflow_singleline(ret, 0, &r);
@@ -1654,7 +1663,7 @@ bool textarea_set_text(struct textarea *ta, const char *text)
textarea_normalise_text(ta, 0, len);
if (ta->flags & TEXTAREA_MULTILINE) {
- if (!textarea_reflow_multiline(ta, 0))
+ if (!textarea_reflow_multiline(ta, 0, &r))
return false;
} else {
if (!textarea_reflow_singleline(ta, 0, &r))
@@ -2810,7 +2819,7 @@ void textarea_set_dimensions(struct textarea *ta, int width, int
height)
textarea_setup_text_offsets(ta);
if (ta->flags & TEXTAREA_MULTILINE) {
- textarea_reflow_multiline(ta, 0);
+ textarea_reflow_multiline(ta, 0, &r);
} else {
textarea_reflow_singleline(ta, 0, &r);
}
@@ -2833,7 +2842,7 @@ void textarea_set_layout(struct textarea *ta, int width, int
height,
textarea_setup_text_offsets(ta);
if (ta->flags & TEXTAREA_MULTILINE) {
- textarea_reflow_multiline(ta, 0);
+ textarea_reflow_multiline(ta, 0, &r);
} else {
textarea_reflow_singleline(ta, 0, &r);
}
commitdiff
http://git.netsurf-browser.org/netsurf.git/commit/?id=cc4411c0c7452968349...
commit cc4411c0c7452968349725bf1edbcd1731422180
Author: Michael Drake <tlsa(a)netsurf-browser.org>
Commit: Michael Drake <tlsa(a)netsurf-browser.org>
Remove some spaces.
diff --git a/desktop/textarea.c b/desktop/textarea.c
index 15d35e1..81af9f8 100644
--- a/desktop/textarea.c
+++ b/desktop/textarea.c
@@ -1249,11 +1249,11 @@ static bool textarea_insert_text(struct textarea *ta, const char
*text,
/* See to reflow */
if (ta->flags & TEXTAREA_MULTILINE) {
- if (!textarea_reflow_multiline(ta, show_b_off))
- return false;
+ if (!textarea_reflow_multiline(ta, show_b_off))
+ return false;
} else {
- if (!textarea_reflow_singleline(ta, show_b_off, r))
- return false;
+ if (!textarea_reflow_singleline(ta, show_b_off, r))
+ return false;
}
return true;
@@ -1401,11 +1401,11 @@ static bool textarea_replace_text(struct textarea *ta, size_t
b_start,
/* See to reflow */
if (ta->flags & TEXTAREA_MULTILINE) {
- if (!textarea_reflow_multiline(ta, b_start))
- return false;
+ if (!textarea_reflow_multiline(ta, b_start))
+ return false;
} else {
- if (!textarea_reflow_singleline(ta, show_b_off, r))
- return false;
+ if (!textarea_reflow_singleline(ta, show_b_off, r))
+ return false;
}
return true;
-----------------------------------------------------------------------
Summary of changes:
desktop/textarea.c | 41 +++++++++++++++++++++++++----------------
1 files changed, 25 insertions(+), 16 deletions(-)
diff --git a/desktop/textarea.c b/desktop/textarea.c
index 15d35e1..e614cc4 100644
--- a/desktop/textarea.c
+++ b/desktop/textarea.c
@@ -861,7 +861,8 @@ static bool textarea_reflow_singleline(struct textarea *ta, size_t
b_off,
* \param b_start 0-based byte offset in ta->text to start of modification
* \return true on success false otherwise
*/
-static bool textarea_reflow_multiline(struct textarea *ta, size_t b_start)
+static bool textarea_reflow_multiline(struct textarea *ta, const size_t b_start,
+ struct rect *r)
{
char *text;
unsigned int len;
@@ -907,9 +908,9 @@ static bool textarea_reflow_multiline(struct textarea *ta, size_t
b_start)
do {
/* Set line count to start point */
if (restart)
- line = 0;
- else
- line = start;
+ start = 0;
+
+ line = start;
/* Find available width */
avail_width = ta->vis_width - 2 * ta->border_width -
@@ -1098,6 +1099,14 @@ static bool textarea_reflow_multiline(struct textarea *ta, size_t
b_start)
ta->v_extent = v_extent;
ta->line_count = line;
+ /* Don't need to redraw above changes, so update redraw request rect*/
+ if (ta->lines[start].b_start + ta->lines[start].b_length < b_start &&
+ restart == false)
+ /* Start line is unchanged */
+ start++;
+ r->y0 = max(r->y0, (signed)(ta->line_height * start +
+ ta->text_y_offset - ta->scroll_y));
+
return true;
}
@@ -1249,11 +1258,11 @@ static bool textarea_insert_text(struct textarea *ta, const char
*text,
/* See to reflow */
if (ta->flags & TEXTAREA_MULTILINE) {
- if (!textarea_reflow_multiline(ta, show_b_off))
- return false;
+ if (!textarea_reflow_multiline(ta, show_b_off, r))
+ return false;
} else {
- if (!textarea_reflow_singleline(ta, show_b_off, r))
- return false;
+ if (!textarea_reflow_singleline(ta, show_b_off, r))
+ return false;
}
return true;
@@ -1401,11 +1410,11 @@ static bool textarea_replace_text(struct textarea *ta, size_t
b_start,
/* See to reflow */
if (ta->flags & TEXTAREA_MULTILINE) {
- if (!textarea_reflow_multiline(ta, b_start))
- return false;
+ if (!textarea_reflow_multiline(ta, b_start, r))
+ return false;
} else {
- if (!textarea_reflow_singleline(ta, show_b_off, r))
- return false;
+ if (!textarea_reflow_singleline(ta, show_b_off, r))
+ return false;
}
return true;
@@ -1606,7 +1615,7 @@ struct textarea *textarea_create(const textarea_flags flags,
textarea_setup_text_offsets(ret);
if (flags & TEXTAREA_MULTILINE)
- textarea_reflow_multiline(ret, 0);
+ textarea_reflow_multiline(ret, 0, &r);
else
textarea_reflow_singleline(ret, 0, &r);
@@ -1654,7 +1663,7 @@ bool textarea_set_text(struct textarea *ta, const char *text)
textarea_normalise_text(ta, 0, len);
if (ta->flags & TEXTAREA_MULTILINE) {
- if (!textarea_reflow_multiline(ta, 0))
+ if (!textarea_reflow_multiline(ta, 0, &r))
return false;
} else {
if (!textarea_reflow_singleline(ta, 0, &r))
@@ -2810,7 +2819,7 @@ void textarea_set_dimensions(struct textarea *ta, int width, int
height)
textarea_setup_text_offsets(ta);
if (ta->flags & TEXTAREA_MULTILINE) {
- textarea_reflow_multiline(ta, 0);
+ textarea_reflow_multiline(ta, 0, &r);
} else {
textarea_reflow_singleline(ta, 0, &r);
}
@@ -2833,7 +2842,7 @@ void textarea_set_layout(struct textarea *ta, int width, int
height,
textarea_setup_text_offsets(ta);
if (ta->flags & TEXTAREA_MULTILINE) {
- textarea_reflow_multiline(ta, 0);
+ textarea_reflow_multiline(ta, 0, &r);
} else {
textarea_reflow_singleline(ta, 0, &r);
}
--
NetSurf Browser