svn commit: r346486 - head/lib/libvgl
Bruce Evans
bde at FreeBSD.org
Tue Sep 3 14:08:09 UTC 2019
Author: bde
Date: Sun Apr 21 10:33:09 2019
New Revision: 346486
URL: https://svnweb.freebsd.org/changeset/base/346486
Log:
Fix missing restoring of the mouse cursor position, the border color and the
blank state after a screen switch.
Modified:
head/lib/libvgl/main.c
head/lib/libvgl/mouse.c
head/lib/libvgl/simple.c
head/lib/libvgl/vgl.h
Modified: head/lib/libvgl/main.c
==============================================================================
--- head/lib/libvgl/main.c Sun Apr 21 09:13:56 2019 (r346485)
+++ head/lib/libvgl/main.c Sun Apr 21 10:33:09 2019 (r346486)
@@ -436,6 +436,9 @@ VGLCheckSwitch()
VGLDisplay->Xsize = VGLModeInfo.vi_width;
VGLDisplay->Ysize = VGLModeInfo.vi_height;
VGLSetVScreenSize(VGLDisplay, VGLDisplay->VXsize, VGLDisplay->VYsize);
+ VGLRestoreBlank();
+ VGLRestoreBorder();
+ VGLMouseRestore();
VGLPanScreen(VGLDisplay, VGLDisplay->Xorigin, VGLDisplay->Yorigin);
switch (VGLDisplay->Type) {
case VIDBUF4S:
Modified: head/lib/libvgl/mouse.c
==============================================================================
--- head/lib/libvgl/mouse.c Sun Apr 21 09:13:56 2019 (r346485)
+++ head/lib/libvgl/mouse.c Sun Apr 21 10:33:09 2019 (r346486)
@@ -272,6 +272,22 @@ VGLMouseInit(int mode)
return 0;
}
+void
+VGLMouseRestore(void)
+{
+ struct mouse_info mouseinfo;
+
+ INTOFF();
+ mouseinfo.operation = MOUSE_GETINFO;
+ if (ioctl(0, CONS_MOUSECTL, &mouseinfo) == 0) {
+ mouseinfo.operation = MOUSE_MOVEABS;
+ mouseinfo.u.data.x = VGLMouseXpos;
+ mouseinfo.u.data.y = VGLMouseYpos;
+ ioctl(0, CONS_MOUSECTL, &mouseinfo);
+ }
+ INTON();
+}
+
int
VGLMouseStatus(int *x, int *y, char *buttons)
{
Modified: head/lib/libvgl/simple.c
==============================================================================
--- head/lib/libvgl/simple.c Sun Apr 21 09:13:56 2019 (r346485)
+++ head/lib/libvgl/simple.c Sun Apr 21 10:33:09 2019 (r346486)
@@ -37,6 +37,8 @@ __FBSDID("$FreeBSD$");
#include <sys/endian.h>
#include "vgl.h"
+static int VGLBlank;
+static byte VGLBorderColor;
static byte VGLSavePaletteRed[256];
static byte VGLSavePaletteGreen[256];
static byte VGLSavePaletteBlue[256];
@@ -637,6 +639,12 @@ VGLSetPaletteIndex(byte color, byte red, byte green, b
}
void
+VGLRestoreBorder(void)
+{
+ VGLSetBorder(VGLBorderColor);
+}
+
+void
VGLSetBorder(byte color)
{
if (VGLModeInfo.vi_mem_model == V_INFO_MM_DIRECT && ioctl(0, KDENABIO, 0))
@@ -646,11 +654,18 @@ VGLSetBorder(byte color)
outb(0x3C0,0x11); outb(0x3C0, color);
inb(0x3DA);
outb(0x3C0, 0x20);
+ VGLBorderColor = color;
if (VGLModeInfo.vi_mem_model == V_INFO_MM_DIRECT)
ioctl(0, KDDISABIO, 0);
}
void
+VGLRestoreBlank(void)
+{
+ VGLBlankDisplay(VGLBlank);
+}
+
+void
VGLBlankDisplay(int blank)
{
byte val;
@@ -660,6 +675,7 @@ VGLBlankDisplay(int blank)
VGLCheckSwitch();
outb(0x3C4, 0x01); val = inb(0x3C5); outb(0x3C4, 0x01);
outb(0x3C5, ((blank) ? (val |= 0x20) : (val &= 0xDF)));
+ VGLBlank = blank;
if (VGLModeInfo.vi_mem_model == V_INFO_MM_DIRECT)
ioctl(0, KDDISABIO, 0);
}
Modified: head/lib/libvgl/vgl.h
==============================================================================
--- head/lib/libvgl/vgl.h Sun Apr 21 09:13:56 2019 (r346485)
+++ head/lib/libvgl/vgl.h Sun Apr 21 10:33:09 2019 (r346486)
@@ -130,6 +130,7 @@ void VGLMouseAction(int dummy);
void VGLMouseSetImage(VGLBitmap *AndMask, VGLBitmap *OrMask);
void VGLMouseSetStdImage(void);
int VGLMouseInit(int mode);
+void VGLMouseRestore(void);
int VGLMouseStatus(int *x, int *y, char *buttons);
int VGLMouseFreeze(int x, int y, int width, int hight, u_long color);
void VGLMouseUnFreeze(void);
@@ -142,6 +143,8 @@ void VGLFilledBox(VGLBitmap *object, int x1, int y1, i
void VGLEllipse(VGLBitmap *object, int xc, int yc, int a, int b, u_long color);
void VGLFilledEllipse(VGLBitmap *object, int xc, int yc, int a, int b, u_long color);
void VGLClear(VGLBitmap *object, u_long color);
+void VGLRestoreBlank(void);
+void VGLRestoreBorder(void);
void VGLRestorePalette(void);
void VGLSavePalette(void);
void VGLSetPalette(byte *red, byte *green, byte *blue);
More information about the svn-src-all
mailing list