1
1

Allow draw a part of line if some coordinares are out of screen boundaries.

Signed-off-by: Andrew Borodin <aborodin@vmail.ru>
Этот коммит содержится в:
Andrew Borodin 2011-01-14 20:52:40 +03:00
родитель 140d4ea117
Коммит 62fc80f5f7
6 изменённых файлов: 97 добавлений и 37 удалений

Просмотреть файл

@ -330,31 +330,59 @@ tty_getyx (int *py, int *px)
} }
/* --------------------------------------------------------------------------------------------- */ /* --------------------------------------------------------------------------------------------- */
/* if x < 0 or y < 0, draw line starting from current position */
void void
tty_draw_hline (int y, int x, int ch, int len) tty_draw_hline (int y, int x, int ch, int len)
{ {
int x1;
if (y < 0 || y >= LINES || x >= COLS)
return;
x1 = x;
if (x < 0)
{
len += x;
if (len <= 0)
return;
x = 0;
}
if ((chtype) ch == ACS_HLINE) if ((chtype) ch == ACS_HLINE)
ch = mc_tty_frm[MC_TTY_FRM_HORIZ]; ch = mc_tty_frm[MC_TTY_FRM_HORIZ];
if ((y >= 0) && (x >= 0))
move (y, x); move (y, x);
hline (ch, len); hline (ch, len);
move (y, x1);
} }
/* --------------------------------------------------------------------------------------------- */ /* --------------------------------------------------------------------------------------------- */
/* if x < 0 or y < 0, draw line starting from current position */
void void
tty_draw_vline (int y, int x, int ch, int len) tty_draw_vline (int y, int x, int ch, int len)
{ {
int y1;
if (x < 0 || x >= COLS || y >= LINES)
return;
y1 = y;
if (y < 0)
{
len += y;
if (len <= 0)
return;
y = 0;
}
if ((chtype) ch == ACS_VLINE) if ((chtype) ch == ACS_VLINE)
ch = mc_tty_frm[MC_TTY_FRM_VERT]; ch = mc_tty_frm[MC_TTY_FRM_VERT];
if ((y >= 0) && (x >= 0))
move (y, x); move (y, x);
vline (ch, len); vline (ch, len);
move (y1, x);
} }
/* --------------------------------------------------------------------------------------------- */ /* --------------------------------------------------------------------------------------------- */

Просмотреть файл

@ -509,54 +509,68 @@ tty_getyx (int *py, int *px)
} }
/* --------------------------------------------------------------------------------------------- */ /* --------------------------------------------------------------------------------------------- */
/* if x < 0 or y < 0, draw line staring from current position */
void void
tty_draw_hline (int y, int x, int ch, int len) tty_draw_hline (int y, int x, int ch, int len)
{ {
int x1;
if (y < 0 || y >= LINES || x >= COLS)
return;
x1 = x;
if (x < 0)
{
len += x;
if (len <= 0)
return;
x = 0;
}
if (ch == ACS_HLINE) if (ch == ACS_HLINE)
ch = mc_tty_frm[MC_TTY_FRM_HORIZ]; ch = mc_tty_frm[MC_TTY_FRM_HORIZ];
if ((y < 0) || (x < 0))
{
y = SLsmg_get_row ();
x = SLsmg_get_column ();
}
else
SLsmg_gotorc (y, x);
if (ch == 0) if (ch == 0)
ch = ACS_HLINE; ch = ACS_HLINE;
SLsmg_gotorc (y, x);
if (ch == ACS_HLINE) if (ch == ACS_HLINE)
SLsmg_draw_hline (len); SLsmg_draw_hline (len);
else else
while (len-- != 0) while (len-- != 0)
tty_print_char (ch); tty_print_char (ch);
SLsmg_gotorc (y, x); SLsmg_gotorc (y, x1);
} }
/* --------------------------------------------------------------------------------------------- */ /* --------------------------------------------------------------------------------------------- */
/* if x < 0 or y < 0, draw line staring from current position */
void void
tty_draw_vline (int y, int x, int ch, int len) tty_draw_vline (int y, int x, int ch, int len)
{ {
int y1;
if (x < 0 || x >= COLS || y >= LINES)
return;
y1 = y;
if (y < 0)
{
len += y;
if (len <= 0)
return;
y = 0;
}
if (ch == ACS_VLINE) if (ch == ACS_VLINE)
ch = mc_tty_frm[MC_TTY_FRM_VERT]; ch = mc_tty_frm[MC_TTY_FRM_VERT];
if ((y < 0) || (x < 0))
{
y = SLsmg_get_row ();
x = SLsmg_get_column ();
}
else
SLsmg_gotorc (y, x);
if (ch == 0) if (ch == 0)
ch = ACS_VLINE; ch = ACS_VLINE;
SLsmg_gotorc (y, x);
if (ch == ACS_VLINE) if (ch == ACS_VLINE)
SLsmg_draw_vline (len); SLsmg_draw_vline (len);
else else
@ -571,7 +585,7 @@ tty_draw_vline (int y, int x, int ch, int len)
} }
} }
SLsmg_gotorc (y, x); SLsmg_gotorc (y1, x);
} }
/* --------------------------------------------------------------------------------------------- */ /* --------------------------------------------------------------------------------------------- */

Просмотреть файл

@ -177,20 +177,25 @@ tty_print_one_vline (gboolean single)
void void
tty_draw_box (int y, int x, int ys, int xs, gboolean single) tty_draw_box (int y, int x, int ys, int xs, gboolean single)
{ {
int y2, x2;
ys--; ys--;
xs--; xs--;
y2 = y + ys;
x2 = x + xs;
tty_draw_vline (y, x, mc_tty_frm[single ? MC_TTY_FRM_VERT : MC_TTY_FRM_DVERT], ys); tty_draw_vline (y, x, mc_tty_frm[single ? MC_TTY_FRM_VERT : MC_TTY_FRM_DVERT], ys);
tty_draw_vline (y, x + xs, mc_tty_frm[single ? MC_TTY_FRM_VERT : MC_TTY_FRM_DVERT], ys); tty_draw_vline (y, x2, mc_tty_frm[single ? MC_TTY_FRM_VERT : MC_TTY_FRM_DVERT], ys);
tty_draw_hline (y, x, mc_tty_frm[single ? MC_TTY_FRM_HORIZ : MC_TTY_FRM_DHORIZ], xs); tty_draw_hline (y, x, mc_tty_frm[single ? MC_TTY_FRM_HORIZ : MC_TTY_FRM_DHORIZ], xs);
tty_draw_hline (y + ys, x, mc_tty_frm[single ? MC_TTY_FRM_HORIZ : MC_TTY_FRM_DHORIZ], xs); tty_draw_hline (y2, x, mc_tty_frm[single ? MC_TTY_FRM_HORIZ : MC_TTY_FRM_DHORIZ], xs);
tty_gotoyx (y, x); tty_gotoyx (y, x);
tty_print_alt_char (ACS_ULCORNER, single); tty_print_alt_char (ACS_ULCORNER, single);
tty_gotoyx (y + ys, x); tty_gotoyx (y2, x);
tty_print_alt_char (ACS_LLCORNER, single); tty_print_alt_char (ACS_LLCORNER, single);
tty_gotoyx (y, x + xs); tty_gotoyx (y, x2);
tty_print_alt_char (ACS_URCORNER, single); tty_print_alt_char (ACS_URCORNER, single);
tty_gotoyx (y + ys, x + xs); tty_gotoyx (y2, x2);
tty_print_alt_char (ACS_LRCORNER, single); tty_print_alt_char (ACS_LRCORNER, single);
} }

Просмотреть файл

@ -121,11 +121,14 @@ menubar_paint_idx (WMenuBar * menubar, unsigned int idx, int color)
} }
else else
{ {
int yt, xt;
/* menu text */ /* menu text */
tty_setcolor (color); tty_setcolor (color);
widget_move (&menubar->widget, y, x); widget_move (&menubar->widget, y, x);
tty_print_char ((unsigned char) entry->first_letter); tty_print_char ((unsigned char) entry->first_letter);
tty_draw_hline (-1, -1, ' ', menu->max_entry_len + 2); /* clear line */ tty_getyx (&yt, &xt);
tty_draw_hline (yt, xt, ' ', menu->max_entry_len + 2); /* clear line */
tty_print_string (entry->text.start); tty_print_string (entry->text.start);
if (entry->text.hotkey != NULL) if (entry->text.hotkey != NULL)

Просмотреть файл

@ -864,7 +864,12 @@ format_file (char *dest, int limit, WPanel * panel, int file_index, int width, i
} }
if (length < width) if (length < width)
tty_draw_hline (-1, -1, ' ', width - length); {
int y, x;
tty_getyx (&y, &x);
tty_draw_hline (y, x, ' ', width - length);
}
return res; return res;
} }
@ -1583,7 +1588,12 @@ paint_frame (WPanel * panel)
g_string_free (format_txt, TRUE); g_string_free (format_txt, TRUE);
if (width > 0) if (width > 0)
tty_draw_hline (-1, -1, ' ', width); {
int y, x;
tty_getyx (&y, &x);
tty_draw_hline (y, x, ' ', width);
}
} }
if (panel->list_type != list_long) if (panel->list_type != list_long)

Просмотреть файл

@ -141,7 +141,7 @@ mcview_display_status (mcview_t * view)
tty_setcolor (STATUSBAR_COLOR); tty_setcolor (STATUSBAR_COLOR);
widget_move (view, top, left); widget_move (view, top, left);
tty_draw_hline (-1, -1, ' ', width); tty_draw_hline (top, left, ' ', width);
file_label = file_label =
view->filename_vpath != NULL ? view->filename_vpath != NULL ?