svn commit: r318326 - head/sys/dev/vt

Jung-uk Kim jkim at FreeBSD.org
Mon May 15 23:12:06 UTC 2017


Author: jkim
Date: Mon May 15 23:12:04 2017
New Revision: 318326
URL: https://svnweb.freebsd.org/changeset/base/318326

Log:
  - Revert r317171. [1]
  - Fix overlapping corners and fix an off-by-one bug.
  
  MFC after:	3 days
  Requested by:	emaste [1]

Modified:
  head/sys/dev/vt/vt_core.c

Modified: head/sys/dev/vt/vt_core.c
==============================================================================
--- head/sys/dev/vt/vt_core.c	Mon May 15 22:52:25 2017	(r318325)
+++ head/sys/dev/vt/vt_core.c	Mon May 15 23:12:04 2017	(r318326)
@@ -1150,30 +1150,33 @@ vt_mark_mouse_position_as_dirty(struct v
 #endif
 
 static void
-vt_set_border(struct vt_device *vd, term_color_t c)
+vt_set_border(struct vt_device *vd, const term_rect_t *area,
+    const term_color_t c)
 {
-	term_rect_t *tarea = &vd->vd_curwindow->vw_draw_area;
-	int x, y;
+	vd_drawrect_t *drawrect = vd->vd_driver->vd_drawrect;
 
-	/* Top bar. */
-	for (y = 0; y < tarea->tr_begin.tp_row; y++)
-		for (x = 0; x < vd->vd_width; x++)
-			vd->vd_driver->vd_setpixel(vd, x, y, c);
-
-	for (y = tarea->tr_begin.tp_row; y < tarea->tr_end.tp_row; y++) {
-		/* Left bar. */
-		for (x = 0; x < tarea->tr_begin.tp_col; x++)
-			vd->vd_driver->vd_setpixel(vd, x, y, c);
-
-		/* Right bar. */
-		for (x = tarea->tr_end.tp_col; x < vd->vd_width; x++)
-			vd->vd_driver->vd_setpixel(vd, x, y, c);
-	}
-
-	/* Bottom bar. */
-	for (y = tarea->tr_end.tp_row; y < vd->vd_height; y++)
-		for (x = 0; x < vd->vd_width; x++)
-			vd->vd_driver->vd_setpixel(vd, x, y, c);
+	if (drawrect == NULL)
+		return;
+
+	/* Top bar */
+	if (area->tr_begin.tp_row > 0)
+		drawrect(vd, 0, 0, vd->vd_width - 1,
+		    area->tr_begin.tp_row - 1, 1, c);
+
+	/* Left bar */
+	if (area->tr_begin.tp_col > 0)
+		drawrect(vd, 0, area->tr_begin.tp_row,
+		    area->tr_begin.tp_col - 1, area->tr_end.tp_row - 1, 1, c);
+
+	/* Right bar */
+	if (area->tr_end.tp_col < vd->vd_width)
+		drawrect(vd, area->tr_end.tp_col, area->tr_begin.tp_row,
+		    vd->vd_width - 1, area->tr_end.tp_row - 1, 1, c);
+
+	/* Bottom bar */
+	if (area->tr_end.tp_row < vd->vd_height)
+		drawrect(vd, 0, area->tr_end.tp_row, vd->vd_width - 1,
+		    vd->vd_height - 1, 1, c);
 }
 
 static int
@@ -1241,7 +1244,7 @@ vt_flush(struct vt_device *vd)
 	if (vd->vd_flags & VDF_INVALID) {
 		vd->vd_flags &= ~VDF_INVALID;
 
-		vt_set_border(vd, TC_BLACK);
+		vt_set_border(vd, &vw->vw_draw_area, TC_BLACK);
 		vt_termrect(vd, vf, &tarea);
 		if (vt_draw_logo_cpus)
 			vtterm_draw_cpu_logos(vd);


More information about the svn-src-all mailing list