diff options
| author | Bruce Evans <bde@FreeBSD.org> | 2019-03-29 16:30:19 +0000 |
|---|---|---|
| committer | Bruce Evans <bde@FreeBSD.org> | 2019-03-29 16:30:19 +0000 |
| commit | a32dbad556b5ea33a1a2d400b18eb2cd95f51123 (patch) | |
| tree | 7cbe12e21c99485d71265de344bb902fe92ed69f /lib/libvgl/main.c | |
| parent | f322b7b058a42bab4cebef2ec103b2c175eb0cba (diff) | |
Notes
Diffstat (limited to 'lib/libvgl/main.c')
| -rw-r--r-- | lib/libvgl/main.c | 32 |
1 files changed, 16 insertions, 16 deletions
diff --git a/lib/libvgl/main.c b/lib/libvgl/main.c index 1408ddb53753..d0d7442e32f2 100644 --- a/lib/libvgl/main.c +++ b/lib/libvgl/main.c @@ -61,12 +61,14 @@ static int VGLAbortPending; static int VGLOnDisplay; static unsigned int VGLCurWindow; static int VGLInitDone = 0; +static video_info_t VGLOldModeInfo; static vid_info_t VGLOldVInfo; void VGLEnd() { struct vt_mode smode; + int size[3]; if (!VGLInitDone) return; @@ -81,18 +83,15 @@ struct vt_mode smode; munmap(VGLMem, VGLAdpInfo.va_window_size); } - if (VGLOldMode >= M_VESA_BASE) { - /* ugly, but necessary */ + if (VGLOldMode >= M_VESA_BASE) ioctl(0, _IO('V', VGLOldMode - M_VESA_BASE), 0); - if (VGLOldMode == M_VESA_800x600) { - int size[3]; - size[0] = VGLOldVInfo.mv_csz; - size[1] = VGLOldVInfo.mv_rsz; - size[2] = 16; - ioctl(0, KDRASTER, size); - } - } else { + else ioctl(0, _IO('S', VGLOldMode), 0); + if (VGLOldModeInfo.vi_flags & V_INFO_GRAPHICS) { + size[0] = VGLOldVInfo.mv_csz; + size[1] = VGLOldVInfo.mv_rsz; + size[2] = VGLOldVInfo.font_size;; + ioctl(0, KDRASTER, size); } ioctl(0, KDDISABIO, 0); ioctl(0, KDSETMODE, KD_TEXT); @@ -165,12 +164,13 @@ VGLInit(int mode) if (ioctl(0, CONS_MODEINFO, &VGLModeInfo)) /* FBIO_MODEINFO */ return -1; - /* If current mode is VESA_800x600 then save its geometry to restore later */ - if ((VGLOldMode >= M_VESA_BASE) && (VGLOldMode == M_VESA_800x600)) { - VGLOldVInfo.size = sizeof(VGLOldVInfo); - if (ioctl(0, CONS_GETINFO, &VGLOldVInfo)) - return -1; - } + /* Save info for old mode to restore font size if old mode is graphics. */ + VGLOldModeInfo.vi_mode = VGLOldMode; + if (ioctl(0, CONS_MODEINFO, &VGLOldModeInfo)) + return -1; + VGLOldVInfo.size = sizeof(VGLOldVInfo); + if (ioctl(0, CONS_GETINFO, &VGLOldVInfo)) + return -1; VGLDisplay = (VGLBitmap *)malloc(sizeof(VGLBitmap)); if (VGLDisplay == NULL) |
