Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 7 Feb 2014 12:39:58 +0000 (UTC)
From:      Aleksandr Rybalko <ray@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r261585 - head/sys/dev/vt/hw/vga
Message-ID:  <201402071239.s17CdwIH007683@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: ray
Date: Fri Feb  7 12:39:58 2014
New Revision: 261585
URL: http://svnweb.freebsd.org/changeset/base/261585

Log:
  Implement vd_drawrect and vd_setpixel for vt(9)'s VGA driver.
  
  Sponsored by:	The FreeBSD Foundation

Modified:
  head/sys/dev/vt/hw/vga/vga.c

Modified: head/sys/dev/vt/hw/vga/vga.c
==============================================================================
--- head/sys/dev/vt/hw/vga/vga.c	Fri Feb  7 11:40:50 2014	(r261584)
+++ head/sys/dev/vt/hw/vga/vga.c	Fri Feb  7 12:39:58 2014	(r261585)
@@ -74,6 +74,8 @@ struct vga_softc {
 static vd_init_t	vga_init;
 static vd_blank_t	vga_blank;
 static vd_bitbltchr_t	vga_bitbltchr;
+static vd_drawrect_t	vga_drawrect;
+static vd_setpixel_t	vga_setpixel;
 static vd_putchar_t	vga_putchar;
 static vd_postswitch_t	vga_postswitch;
 
@@ -81,6 +83,8 @@ static const struct vt_driver vt_vga_dri
 	.vd_init	= vga_init,
 	.vd_blank	= vga_blank,
 	.vd_bitbltchr	= vga_bitbltchr,
+	.vd_drawrect	= vga_drawrect,
+	.vd_setpixel	= vga_setpixel,
 	.vd_putchar	= vga_putchar,
 	.vd_postswitch	= vga_postswitch,
 	.vd_priority	= VD_PRIORITY_GENERIC,
@@ -139,6 +143,31 @@ vga_bitblt_put(struct vt_device *vd, u_l
 	}
 }
 
+static void
+vga_setpixel(struct vt_device *vd, int x, int y, term_color_t color)
+{
+
+	vga_bitblt_put(vd, (y * VT_VGA_WIDTH / 8) + (x / 8), color,
+	    0x80 >> (x % 8));
+}
+
+static void
+vga_drawrect(struct vt_device *vd, int x1, int y1, int x2, int y2, int fill,
+    term_color_t color)
+{
+	int x, y;
+
+	for (y = y1; y <= y2; y++) {
+		if (fill || (y == y1) || (y == y2)) {
+			for (x = x1; x <= x2; x++)
+				vga_setpixel(vd, x, y, color);
+		} else {
+			vga_setpixel(vd, x1, y, color);
+			vga_setpixel(vd, x2, y, color);
+		}
+	}
+}
+
 static inline void
 vga_bitblt_draw(struct vt_device *vd, const uint8_t *src,
     u_long ldst, uint8_t shift, unsigned int width, unsigned int height,



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201402071239.s17CdwIH007683>