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 $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 $ XCOMM $XFree86: xc/programs/Xserver/hw/kdrive/Imakefile,v 1.3 2000/08/26 00:24:37 keithp Exp $
#include <Server.tmpl> 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 \ 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 \ 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) \ INCLUDES = $(KDINCS)
-I../../fb -I../../mi -I../../render -I../../include -I../../os \
-I$(EXTINCSRC) -I$(XINCLUDESRC)
NormalLibraryObjectRule() NormalLibraryObjectRule()
NormalLibraryTarget(kdrive,$(OBJS)) NormalLibraryTarget(kdrive,$(OBJS))

View File

@ -21,7 +21,7 @@
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
* PERFORMANCE OF THIS SOFTWARE. * 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" #include "kdrive.h"
@ -252,6 +252,9 @@ KdScreenInitAsync (ScreenPtr pScreen)
pScreenPriv->BackingStoreFuncs.SaveAreas = KdCheckSaveAreas; pScreenPriv->BackingStoreFuncs.SaveAreas = KdCheckSaveAreas;
pScreenPriv->BackingStoreFuncs.RestoreAreas = KdCheckRestoreAreas; pScreenPriv->BackingStoreFuncs.RestoreAreas = KdCheckRestoreAreas;
#endif #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 * Copyright © 1999 Keith Packard
* *
@ -25,7 +25,7 @@
#include "kdrive.h" #include "kdrive.h"
#include "cursorstr.h" #include "cursorstr.h"
static int int
KdComputeCmapShift (unsigned long mask) KdComputeCmapShift (unsigned long mask)
{ {
int shift; int shift;

View File

@ -21,7 +21,7 @@
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
* PERFORMANCE OF THIS SOFTWARE. * 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" #include "kdrive.h"
#ifdef PSEUDO8 #ifdef PSEUDO8
@ -224,14 +224,15 @@ KdDisableScreens (void)
} }
} }
void Bool
KdEnableScreen (ScreenPtr pScreen) KdEnableScreen (ScreenPtr pScreen)
{ {
KdScreenPriv (pScreen); KdScreenPriv (pScreen);
if (pScreenPriv->enabled) if (pScreenPriv->enabled)
return; return TRUE;
(*pScreenPriv->card->cfuncs->enable) (pScreen); if (!(*pScreenPriv->card->cfuncs->enable) (pScreen))
return FALSE;
pScreenPriv->enabled = TRUE; pScreenPriv->enabled = TRUE;
pScreenPriv->card->selected = pScreenPriv->screen->mynum; pScreenPriv->card->selected = pScreenPriv->screen->mynum;
if (!pScreenPriv->screen->softCursor) if (!pScreenPriv->screen->softCursor)
@ -632,6 +633,11 @@ KdScreenInit(int index, ScreenPtr pScreen, int argc, char **argv)
pScreen->SaveScreen = KdSaveScreen; pScreen->SaveScreen = KdSaveScreen;
pScreen->CreateWindow = KdCreateWindow; pScreen->CreateWindow = KdCreateWindow;
#ifdef RENDER
if (!fbPictureInit (pScreen, 0, 0))
return FALSE;
#endif
#ifdef FB_OLD_SCREEN #ifdef FB_OLD_SCREEN
pScreenPriv->BackingStoreFuncs.SaveAreas = fbSaveAreas; pScreenPriv->BackingStoreFuncs.SaveAreas = fbSaveAreas;
pScreenPriv->BackingStoreFuncs.RestoreAreas = fbSaveAreas; pScreenPriv->BackingStoreFuncs.RestoreAreas = fbSaveAreas;
@ -719,8 +725,6 @@ KdScreenInit(int index, ScreenPtr pScreen, int argc, char **argv)
miDCInitialize(pScreen, &kdPointerScreenFuncs); miDCInitialize(pScreen, &kdPointerScreenFuncs);
} }
if (!KdPictureInit (pScreen, 0, 0))
return FALSE;
if (!fbCreateDefColormap (pScreen)) if (!fbCreateDefColormap (pScreen))
{ {
@ -739,7 +743,8 @@ KdScreenInit(int index, ScreenPtr pScreen, int argc, char **argv)
if (screen->mynum == card->selected) if (screen->mynum == card->selected)
{ {
(*card->cfuncs->preserve) (card); (*card->cfuncs->preserve) (card);
(*card->cfuncs->enable) (pScreen); if (!(*card->cfuncs->enable) (pScreen))
return FALSE;
pScreenPriv->enabled = TRUE; pScreenPriv->enabled = TRUE;
if (!screen->softCursor) if (!screen->softCursor)
(*card->cfuncs->enableCursor) (pScreen); (*card->cfuncs->enableCursor) (pScreen);

View File

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

View File

@ -21,7 +21,7 @@
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
* PERFORMANCE OF THIS SOFTWARE. * 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 "kdrive.h"
#include "inputstr.h" #include "inputstr.h"
@ -43,6 +43,10 @@ static int kdBellPitch;
static int kdBellDuration; static int kdBellDuration;
static int kdLeds; static int kdLeds;
static Bool kdInputEnabled; static Bool kdInputEnabled;
static KdMouseMatrix kdMouseMatrix = {
1, 0, 0,
0, 1, 0
};
int kdMinScanCode; int kdMinScanCode;
int kdMaxScanCode; int kdMaxScanCode;
@ -270,6 +274,12 @@ KdSetLed (int led, Bool on)
KdSetLeds (); KdSetLeds ();
} }
void
KdSetMouseMatrix (KdMouseMatrix *matrix)
{
kdMouseMatrix = *matrix;
}
static void static void
KdKbdCtrl (DeviceIntPtr pDevice, KeybdCtrl *ctrl) KdKbdCtrl (DeviceIntPtr pDevice, KeybdCtrl *ctrl)
{ {
@ -1142,11 +1152,13 @@ KdMouseAccelerate (DeviceIntPtr device, int delta)
} }
void void
KdEnqueueMouseEvent(unsigned long flags, int x, int y) KdEnqueueMouseEvent(unsigned long flags, int rx, int ry)
{ {
CARD32 ms; CARD32 ms;
xEvent xE; xEvent xE;
unsigned char buttons; unsigned char buttons;
int x, y;
int (*matrix)[3] = kdMouseMatrix.matrix;
if (!pKdPointer) if (!pKdPointer)
return; return;
@ -1155,12 +1167,18 @@ KdEnqueueMouseEvent(unsigned long flags, int x, int y)
if (flags & KD_MOUSE_DELTA) 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); x = KdMouseAccelerate (pKdPointer, x);
y = KdMouseAccelerate (pKdPointer, y); y = KdMouseAccelerate (pKdPointer, y);
xE.u.keyButtonPointer.pad1 = 1; xE.u.keyButtonPointer.pad1 = 1;
} }
else 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.pad1 = 0;
}
xE.u.keyButtonPointer.time = ms; xE.u.keyButtonPointer.time = ms;
xE.u.keyButtonPointer.rootX = x; xE.u.keyButtonPointer.rootX = x;
xE.u.keyButtonPointer.rootY = y; xE.u.keyButtonPointer.rootY = y;

View File

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