summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
fc5a96b)
line when the window size changes.
git-svn-id: svn://svn.tartarus.org/sgt/putty@4631
cda61777-01e9-0310-a592-
d414129be87e
sfree(term->wcTo);
for (i = 0; i < term->bidi_cache_size; i++) {
sfree(term->wcTo);
for (i = 0; i < term->bidi_cache_size; i++) {
- sfree(term->pre_bidi_cache[i]);
- sfree(term->post_bidi_cache[i]);
+ sfree(term->pre_bidi_cache[i].chars);
+ sfree(term->post_bidi_cache[i].chars);
}
sfree(term->pre_bidi_cache);
sfree(term->post_bidi_cache);
}
sfree(term->pre_bidi_cache);
sfree(term->post_bidi_cache);
if (line >= term->bidi_cache_size)
return FALSE; /* cache doesn't have this many lines */
if (line >= term->bidi_cache_size)
return FALSE; /* cache doesn't have this many lines */
- if (!term->pre_bidi_cache[line])
+ if (!term->pre_bidi_cache[line].chars)
return FALSE; /* cache doesn't contain _this_ line */
return FALSE; /* cache doesn't contain _this_ line */
+ if (term->pre_bidi_cache[line].width != width)
+ return FALSE; /* line is wrong width */
+
for (i = 0; i < width; i++)
for (i = 0; i < width; i++)
- if (!termchars_equal(term->pre_bidi_cache[line] + i, lbefore + i))
+ if (!termchars_equal(term->pre_bidi_cache[line].chars+i, lbefore+i))
return FALSE; /* line doesn't match cache */
return TRUE; /* it didn't match. */
return FALSE; /* line doesn't match cache */
return TRUE; /* it didn't match. */
term->bidi_cache_size = line+1;
term->pre_bidi_cache = sresize(term->pre_bidi_cache,
term->bidi_cache_size,
term->bidi_cache_size = line+1;
term->pre_bidi_cache = sresize(term->pre_bidi_cache,
term->bidi_cache_size,
+ struct bidi_cache_entry);
term->post_bidi_cache = sresize(term->post_bidi_cache,
term->bidi_cache_size,
term->post_bidi_cache = sresize(term->post_bidi_cache,
term->bidi_cache_size,
+ struct bidi_cache_entry);
while (j < term->bidi_cache_size) {
while (j < term->bidi_cache_size) {
- term->pre_bidi_cache[j] = term->post_bidi_cache[j] = NULL;
+ term->pre_bidi_cache[j].chars =
+ term->post_bidi_cache[j].chars = NULL;
+ term->pre_bidi_cache[j].width =
+ term->post_bidi_cache[j].width = -1;
- sfree(term->pre_bidi_cache[line]);
- sfree(term->post_bidi_cache[line]);
+ sfree(term->pre_bidi_cache[line].chars);
+ sfree(term->post_bidi_cache[line].chars);
- term->pre_bidi_cache[line] = snewn(width, termchar);
- term->post_bidi_cache[line] = snewn(width, termchar);
+ term->pre_bidi_cache[line].width = width;
+ term->pre_bidi_cache[line].chars = snewn(width, termchar);
+ term->post_bidi_cache[line].width = width;
+ term->post_bidi_cache[line].chars = snewn(width, termchar);
- memcpy(term->pre_bidi_cache[line], lbefore, width * TSIZE);
- memcpy(term->post_bidi_cache[line], lafter, width * TSIZE);
+ memcpy(term->pre_bidi_cache[line].chars, lbefore, width * TSIZE);
+ memcpy(term->post_bidi_cache[line].chars, lafter, width * TSIZE);
lchars = term->ltemp;
} else {
lchars = term->ltemp;
} else {
- lchars = term->post_bidi_cache[i];
+ lchars = term->post_bidi_cache[i].chars;
}
} else
lchars = ldata->chars;
}
} else
lchars = ldata->chars;
struct termchar *chars;
};
struct termchar *chars;
};
+struct bidi_cache_entry {
+ int width;
+ struct termchar *chars;
+};
+
struct terminal_tag {
int compatibility_level;
struct terminal_tag {
int compatibility_level;
int ltemp_size;
bidi_char *wcFrom, *wcTo;
int wcFromTo_size;
int ltemp_size;
bidi_char *wcFrom, *wcTo;
int wcFromTo_size;
- termchar **pre_bidi_cache, **post_bidi_cache;
+ struct bidi_cache_entry *pre_bidi_cache, *post_bidi_cache;