Tiny-X: Add mouse matrix to rotate mouse, allow enable to fail, add render

by default
This commit is contained in:
Keith Packard 2000-09-15 15:19:00 +00:00
parent f7421d8361
commit d6e151ce4d
7 changed files with 73 additions and 26 deletions

View File

@ -1,16 +1,20 @@
XCOMM $XConsortium: Imakefile /main/10 1996/12/02 10:20:33 lehors $
XCOMM $XFree86: xc/programs/Xserver/hw/kdrive/Imakefile,v 1.1 1999/11/19 13:53:47 hohndel Exp $
#include <Server.tmpl>
XCOMM $XFree86: xc/programs/Xserver/hw/kdrive/Imakefile,v 1.3 2000/08/26 00:24:37 keithp Exp $
KDRIVE=.
#include "Kdrive.tmpl"
#if BuildRender
RENDERSRCS=kpict.c
RENDEROBJS=kpict.o
#endif
SRCS = kcmap.c kcolor.c kdrive.c kinfo.c kinput.c kmap.c knoop.c ktest.c \
vga.c kasync.c kmode.c kcurscol.c kpict.c
vga.c kasync.c kmode.c kcurscol.c kshadow.c $(RENDERSRCS)
OBJS = kcmap.o kcolor.o kdrive.o kinfo.o kinput.o kmap.o knoop.o ktest.o \
vga.o kasync.o kmode.o kcurscol.o kpict.o
vga.o kasync.o kmode.o kcurscol.o kshadow.o $(RENDEROBJS)
INCLUDES = -I. -I$(XBUILDINCDIR) -I$(FONTINCSRC) \
-I../../fb -I../../mi -I../../render -I../../include -I../../os \
-I$(EXTINCSRC) -I$(XINCLUDESRC)
INCLUDES = $(KDINCS)
NormalLibraryObjectRule()
NormalLibraryTarget(kdrive,$(OBJS))

View File

@ -21,7 +21,7 @@
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
* PERFORMANCE OF THIS SOFTWARE.
*/
/* $XFree86: xc/programs/Xserver/hw/kdrive/kasync.c,v 1.3 2000/01/21 18:41:49 dawes Exp $ */
/* $XFree86: xc/programs/Xserver/hw/kdrive/kasync.c,v 1.5 2000/08/26 00:24:37 keithp Exp $ */
#include "kdrive.h"
@ -252,6 +252,9 @@ KdScreenInitAsync (ScreenPtr pScreen)
pScreenPriv->BackingStoreFuncs.SaveAreas = KdCheckSaveAreas;
pScreenPriv->BackingStoreFuncs.RestoreAreas = KdCheckRestoreAreas;
#endif
#ifdef RENDER
KdPictureInitAsync (pScreen);
#endif
}
/*

View File

@ -1,5 +1,5 @@
/*
* $XFree86$
* $XFree86: xc/programs/Xserver/hw/kdrive/kcurscol.c,v 1.4 2000/05/11 18:14:13 tsi Exp $
*
* Copyright © 1999 Keith Packard
*
@ -25,7 +25,7 @@
#include "kdrive.h"
#include "cursorstr.h"
static int
int
KdComputeCmapShift (unsigned long mask)
{
int shift;

View File

@ -21,7 +21,7 @@
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
* PERFORMANCE OF THIS SOFTWARE.
*/
/* $XFree86: xc/programs/Xserver/hw/kdrive/kdrive.c,v 1.4 2000/05/06 22:17:39 keithp Exp $ */
/* $XFree86: xc/programs/Xserver/hw/kdrive/kdrive.c,v 1.6 2000/08/26 00:24:37 keithp Exp $ */
#include "kdrive.h"
#ifdef PSEUDO8
@ -224,14 +224,15 @@ KdDisableScreens (void)
}
}
void
Bool
KdEnableScreen (ScreenPtr pScreen)
{
KdScreenPriv (pScreen);
if (pScreenPriv->enabled)
return;
(*pScreenPriv->card->cfuncs->enable) (pScreen);
return TRUE;
if (!(*pScreenPriv->card->cfuncs->enable) (pScreen))
return FALSE;
pScreenPriv->enabled = TRUE;
pScreenPriv->card->selected = pScreenPriv->screen->mynum;
if (!pScreenPriv->screen->softCursor)
@ -632,6 +633,11 @@ KdScreenInit(int index, ScreenPtr pScreen, int argc, char **argv)
pScreen->SaveScreen = KdSaveScreen;
pScreen->CreateWindow = KdCreateWindow;
#ifdef RENDER
if (!fbPictureInit (pScreen, 0, 0))
return FALSE;
#endif
#ifdef FB_OLD_SCREEN
pScreenPriv->BackingStoreFuncs.SaveAreas = fbSaveAreas;
pScreenPriv->BackingStoreFuncs.RestoreAreas = fbSaveAreas;
@ -719,8 +725,6 @@ KdScreenInit(int index, ScreenPtr pScreen, int argc, char **argv)
miDCInitialize(pScreen, &kdPointerScreenFuncs);
}
if (!KdPictureInit (pScreen, 0, 0))
return FALSE;
if (!fbCreateDefColormap (pScreen))
{
@ -739,7 +743,8 @@ KdScreenInit(int index, ScreenPtr pScreen, int argc, char **argv)
if (screen->mynum == card->selected)
{
(*card->cfuncs->preserve) (card);
(*card->cfuncs->enable) (pScreen);
if (!(*card->cfuncs->enable) (pScreen))
return FALSE;
pScreenPriv->enabled = TRUE;
if (!screen->softCursor)
(*card->cfuncs->enableCursor) (pScreen);

View File

@ -21,7 +21,7 @@
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
* PERFORMANCE OF THIS SOFTWARE.
*/
/* $XFree86: xc/programs/Xserver/hw/kdrive/kdrive.h,v 1.4 2000/02/23 20:29:53 dawes Exp $ */
/* $XFree86: xc/programs/Xserver/hw/kdrive/kdrive.h,v 1.6 2000/08/26 00:24:38 keithp Exp $ */
#include <stdio.h>
#include "X.h"
@ -41,6 +41,7 @@
#include "dix.h"
#include "fb.h"
#include "fboverlay.h"
#include "shadow.h"
extern WindowPtr *WindowTable;
@ -115,7 +116,7 @@ typedef struct _KdCardFuncs {
Bool (*scrinit) (KdScreenInfo *);/* initialize screen information */
Bool (*initScreen) (ScreenPtr); /* initialize ScreenRec */
void (*preserve) (KdCardInfo *); /* save graphics card state */
void (*enable) (ScreenPtr); /* set up for rendering */
Bool (*enable) (ScreenPtr); /* set up for rendering */
Bool (*dpms) (ScreenPtr, int); /* set DPMS screen saver */
void (*disable) (ScreenPtr); /* turn off rendering */
void (*restore) (KdCardInfo *); /* restore graphics card state */
@ -210,6 +211,10 @@ typedef struct _KdMonitorTiming {
extern const KdMonitorTiming kdMonitorTimings[];
extern const int kdNumMonitorTimings;
typedef struct _KdMouseMatrix {
int matrix[2][3];
} KdMouseMatrix;
/*
* This is the only completely portable way to
* compute this info.
@ -397,7 +402,7 @@ KdDisableScreen (ScreenPtr pScreen);
void
KdDisableScreens (void);
void
Bool
KdEnableScreen (ScreenPtr pScreen);
void
@ -492,6 +497,9 @@ KdReleaseAllKeys (void);
void
KdSetLed (int led, Bool on);
void
KdSetMouseMatrix (KdMouseMatrix *matrix);
void
KdBlockHandler (int screen,
pointer blockData,
@ -540,6 +548,17 @@ KdTuneMode (KdScreenInfo *screen,
Bool (*supported) (KdScreenInfo *,
const KdMonitorTiming *));
/* kpict.c */
void
KdPictureInitAsync (ScreenPtr pScreen);
/* kshadow.c */
Bool
KdShadowScreenInit (KdScreenInfo *screen);
Bool
KdShadowInitScreen (ScreenPtr pScreen, ShadowUpdateProc update, ShadowWindowProc window);
/* ktest.c */
Bool
KdFrameBufferValid (CARD8 *base, int size);

View File

@ -21,7 +21,7 @@
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
* PERFORMANCE OF THIS SOFTWARE.
*/
/* $XFree86: xc/programs/Xserver/hw/kdrive/kinput.c,v 1.3 2000/02/23 20:29:54 dawes Exp $ */
/* $XFree86: xc/programs/Xserver/hw/kdrive/kinput.c,v 1.5 2000/08/26 00:24:38 keithp Exp $ */
#include "kdrive.h"
#include "inputstr.h"
@ -43,6 +43,10 @@ static int kdBellPitch;
static int kdBellDuration;
static int kdLeds;
static Bool kdInputEnabled;
static KdMouseMatrix kdMouseMatrix = {
1, 0, 0,
0, 1, 0
};
int kdMinScanCode;
int kdMaxScanCode;
@ -270,6 +274,12 @@ KdSetLed (int led, Bool on)
KdSetLeds ();
}
void
KdSetMouseMatrix (KdMouseMatrix *matrix)
{
kdMouseMatrix = *matrix;
}
static void
KdKbdCtrl (DeviceIntPtr pDevice, KeybdCtrl *ctrl)
{
@ -1142,11 +1152,13 @@ KdMouseAccelerate (DeviceIntPtr device, int delta)
}
void
KdEnqueueMouseEvent(unsigned long flags, int x, int y)
KdEnqueueMouseEvent(unsigned long flags, int rx, int ry)
{
CARD32 ms;
xEvent xE;
unsigned char buttons;
int x, y;
int (*matrix)[3] = kdMouseMatrix.matrix;
if (!pKdPointer)
return;
@ -1155,12 +1167,18 @@ KdEnqueueMouseEvent(unsigned long flags, int x, int y)
if (flags & KD_MOUSE_DELTA)
{
x = matrix[0][0] * rx + matrix[0][1] * ry;
y = matrix[1][0] * rx + matrix[1][1] * ry;
x = KdMouseAccelerate (pKdPointer, x);
y = KdMouseAccelerate (pKdPointer, y);
xE.u.keyButtonPointer.pad1 = 1;
}
else
{
x = matrix[0][0] * rx + matrix[0][1] * ry + matrix[0][2];
y = matrix[1][0] * rx + matrix[1][1] * ry + matrix[1][2];
xE.u.keyButtonPointer.pad1 = 0;
}
xE.u.keyButtonPointer.time = ms;
xE.u.keyButtonPointer.rootX = x;
xE.u.keyButtonPointer.rootY = y;

View File

@ -54,13 +54,11 @@ KdCheckComposite (CARD8 op,
height);
}
KdPictureInit (ScreenPtr pScreen, PictFormatPtr formats, int nformats)
void
KdPictureInitAsync (ScreenPtr pScreen)
{
PictureScreenPtr ps;
if (!fbPictureInit (pScreen, formats, nformats))
return FALSE;
ps = GetPictureScreen(pScreen);
ps->Composite = KdCheckComposite;
return TRUE;
}