From 4d55a4250e3cf5dafe79e859b63645be9668adbb Mon Sep 17 00:00:00 2001 From: Aleksandr Rybalko Date: Thu, 6 Feb 2014 15:16:38 +0000 Subject: [PATCH] Add vt_set_border function to help to change border color. Use vt_set_border to reset color after font changed (different font size may change border sizes) Sponsored by: The FreeBSD Foundation --- sys/dev/vt/vt_core.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/sys/dev/vt/vt_core.c b/sys/dev/vt/vt_core.c index d65c442bc8b..368c971199e 100644 --- a/sys/dev/vt/vt_core.c +++ b/sys/dev/vt/vt_core.c @@ -1044,6 +1044,30 @@ vt_change_font(struct vt_window *vw, struct vt_font *vf) return (0); } +static int +vt_set_border(struct vt_window *vw, struct vt_font *vf, term_color_t c) +{ + struct vt_device *vd = vw->vw_device; + int l, r, t, b, w, h; + + if (vd->vd_driver->vd_drawrect == NULL) + return (ENOTSUP); + + w = vd->vd_width - 1; + h = vd->vd_height - 1; + l = vd->vd_offset.tp_col - 1; + r = w - l; + t = vd->vd_offset.tp_row - 1; + b = h - t; + + vd->vd_driver->vd_drawrect(vd, 0, 0, w, t, 1, c); /* Top bar. */ + vd->vd_driver->vd_drawrect(vd, 0, t, l, b, 1, c); /* Left bar. */ + vd->vd_driver->vd_drawrect(vd, r, t, w, b, 1, c); /* Right bar. */ + vd->vd_driver->vd_drawrect(vd, 0, b, w, h, 1, c); /* Bottom bar. */ + + return (0); +} + static int vt_proc_alive(struct vt_window *vw) { @@ -1562,6 +1586,10 @@ skip_thunk: return (error); error = vt_change_font(vw, vf); + if (error == 0) { + /* XXX: replace 0 with current bg color. */ + vt_set_border(vw, vf, 0); + } vtfont_unref(vf); return (error); }