update_sbar();
term_update();
+ back->size();
}
/*
break;
case 3: /* 80/132 columns */
deselect();
- request_resize(state ? 132 : 80, rows, 1);
+ request_resize(state ? 132 : 80, rows);
reset_132 = state;
break;
case 5: /* reverse video */
width = wcwidth((wchar_t) c);
switch (width) {
case 2:
- if (curs.x + 1 != cols) {
- *cpos++ = c | ATTR_WIDE | curr_attr;
- *cpos++ = UCSWIDE | curr_attr;
- curs.x++;
- break;
+ *cpos++ = c | curr_attr;
+ if (++curs.x == cols) {
+ *cpos |= LATTR_WRAPPED;
+ if (curs.y == marg_b)
+ scroll(marg_t, marg_b, 1, TRUE);
+ else if (curs.y < rows - 1)
+ curs.y++;
+ curs.x = 0;
+ fix_cpos;
}
+ *cpos++ = UCSWIDE | curr_attr;
+ break;
case 1:
*cpos++ = c | curr_attr;
break;
compatibility(VT100);
power_on();
if (reset_132) {
- request_resize(80, rows, 1);
+ request_resize(80, rows);
reset_132 = 0;
}
fix_cpos;
compatibility(VT340TEXT);
if (esc_nargs <= 1
&& (esc_args[0] < 1 || esc_args[0] >= 24)) {
- request_resize(cols, def(esc_args[0], 24), 0);
+ request_resize(cols, def(esc_args[0], 24));
deselect();
}
break;
*/
compatibility(VT420);
if (esc_nargs == 1 && esc_args[0] > 0) {
- request_resize(cols,
- def(esc_args[0], cfg.height),
- 0);
+ request_resize(cols, def(esc_args[0], cfg.height));
deselect();
}
break;
*/
compatibility(VT340TEXT);
if (esc_nargs <= 1) {
- request_resize(def(esc_args[0], cfg.width),
- rows, 0);
+ request_resize(def(esc_args[0], cfg.width), rows);
deselect();
}
break;
*/
if (!has_compat(VT420) && has_compat(VT100)) {
if (reset_132)
- request_resize(132, 24, 1);
+ request_resize(132, 24);
else
- request_resize(80, 24, 1);
+ request_resize(80, 24);
}
#endif
break;
if (dispcurs && (curstype != cursor ||
dispcurs !=
disptext + our_curs_y * (cols + 1) + curs.x)) {
- if (dispcurs > disptext && (dispcurs[-1] & ATTR_WIDE))
+ if (dispcurs > disptext &&
+ (*dispcurs & (CHAR_MASK | CSET_MASK)) == UCSWIDE)
dispcurs[-1] |= ATTR_INVALID;
- if ((*dispcurs & ATTR_WIDE))
+ if ( (dispcurs[1] & (CHAR_MASK | CSET_MASK)) == UCSWIDE)
dispcurs[1] |= ATTR_INVALID;
*dispcurs |= ATTR_INVALID;
curstype = 0;
}
tattr |= (tchar & CSET_MASK);
tchar &= CHAR_MASK;
+ if ((d[1] & (CHAR_MASK | CSET_MASK)) == UCSWIDE)
+ tattr |= ATTR_WIDE;
/* Video reversing things */
tattr = (tattr ^ rv
tattr &= ~ATTR_BLINK;
}
+ /*
+ * Check the font we'll _probably_ be using to see if
+ * the character is wide when we don't want it to be.
+ */
+ if ((tchar | tattr) != (disptext[idx]& ~ATTR_NARROW)) {
+ if ((tattr & ATTR_WIDE) == 0 &&
+ CharWidth(ctx, (tchar | tattr) & 0xFFFF) == 2)
+ tattr |= ATTR_NARROW;
+ } else if (disptext[idx]&ATTR_NARROW)
+ tattr |= ATTR_NARROW;
+
/* Cursor here ? Save the 'background' */
if (i == our_curs_y && j == curs.x) {
cursor_background = tattr | tchar;
/*
* Paint the window in response to a WM_PAINT message.
*/
-void term_paint(Context ctx, int l, int t, int r, int b)
+void term_paint(Context ctx, int left, int top, int right, int bottom)
{
- int i, j, left, top, right, bottom;
+ int i, j;
+ if (left < 0) left = 0;
+ if (top < 0) top = 0;
+ if (right >= cols) right = cols-1;
+ if (bottom >= rows) bottom = rows-1;
- left = l / font_width;
- right = (r - 1) / font_width;
- top = t / font_height;
- bottom = (b - 1) / font_height;
for (i = top; i <= bottom && i < rows; i++) {
if ((disptext[i * (cols + 1) + cols] & LATTR_MODE) == LATTR_NORM)
for (j = left; j <= right && j < cols; j++)
/* This should happen soon enough, also for some reason it sometimes
* fails to actually do anything when re-sizing ... painting the wrong
* window perhaps ?
- do_paint (ctx, FALSE);
*/
+ if (alt_pressed)
+ do_paint (ctx, FALSE);
}
/*
break;
}
+ /* For DBCS font's I can't do anything usefull. Even this will sometimes
+ * fail as there's such a thing as a double width space. :-(
+ */
+ if (dbcs_screenfont && font_codepage == line_codepage)
+ return (uc != ' ');
+
if (uc < 0x80)
return wordness[uc];