xserver

xserver with xephyr scale patch
git clone https://git.neptards.moe/u3shit/xserver.git
Log | Files | Refs | README | LICENSE

kdrive.h (10618B)


      1 /*
      2  * Copyright © 1999 Keith Packard
      3  *
      4  * Permission to use, copy, modify, distribute, and sell this software and its
      5  * documentation for any purpose is hereby granted without fee, provided that
      6  * the above copyright notice appear in all copies and that both that
      7  * copyright notice and this permission notice appear in supporting
      8  * documentation, and that the name of Keith Packard not be used in
      9  * advertising or publicity pertaining to distribution of the software without
     10  * specific, written prior permission.  Keith Packard makes no
     11  * representations about the suitability of this software for any purpose.  It
     12  * is provided "as is" without express or implied warranty.
     13  *
     14  * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
     15  * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
     16  * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
     17  * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
     18  * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
     19  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
     20  * PERFORMANCE OF THIS SOFTWARE.
     21  */
     22 
     23 #ifndef _KDRIVE_H_
     24 #define _KDRIVE_H_
     25 
     26 #include <stdio.h>
     27 #include <string.h>
     28 #include <X11/X.h>
     29 #include <X11/Xproto.h>
     30 #include <X11/Xos.h>
     31 #include "scrnintstr.h"
     32 #include "pixmapstr.h"
     33 #include "windowstr.h"
     34 #include "servermd.h"
     35 #include "colormapst.h"
     36 #include "gcstruct.h"
     37 #include "input.h"
     38 #include "mipointer.h"
     39 #include "mi.h"
     40 #include "dix.h"
     41 #include "fb.h"
     42 #include "fboverlay.h"
     43 #include "shadow.h"
     44 #include "randrstr.h"
     45 #include "globals.h"
     46 
     47 #include "xkbstr.h"
     48 
     49 #define KD_DPMS_NORMAL	    0
     50 #define KD_DPMS_STANDBY	    1
     51 #define KD_DPMS_SUSPEND	    2
     52 #define KD_DPMS_POWERDOWN   3
     53 #define KD_DPMS_MAX	    KD_DPMS_POWERDOWN
     54 
     55 #define Status int
     56 
     57 typedef struct _KdCardInfo {
     58     struct _KdCardFuncs *cfuncs;
     59     void *closure;
     60     void *driver;
     61     struct _KdScreenInfo *screenList;
     62     int selected;
     63     struct _KdCardInfo *next;
     64 } KdCardInfo;
     65 
     66 extern KdCardInfo *kdCardInfo;
     67 
     68 /*
     69  * Configuration information per X screen
     70  */
     71 typedef struct _KdFrameBuffer {
     72     CARD8 *frameBuffer;
     73     int depth;
     74     int bitsPerPixel;
     75     int pixelStride;
     76     int byteStride;
     77     Bool shadow;
     78     unsigned long visuals;
     79     Pixel redMask, greenMask, blueMask;
     80     void *closure;
     81 } KdFrameBuffer;
     82 
     83 #define RR_Rotate_All	(RR_Rotate_0|RR_Rotate_90|RR_Rotate_180|RR_Rotate_270)
     84 #define RR_Reflect_All	(RR_Reflect_X|RR_Reflect_Y)
     85 
     86 typedef struct _KdScreenInfo {
     87     struct _KdScreenInfo *next;
     88     KdCardInfo *card;
     89     ScreenPtr pScreen;
     90     void *driver;
     91     Rotation randr;             /* rotation and reflection */
     92     int x;
     93     int y;
     94     int width;
     95     int height;
     96     int rate;
     97     int width_mm;
     98     int height_mm;
     99     int subpixel_order;
    100     Bool dumb;
    101     Bool softCursor;
    102     int mynum;
    103     DDXPointRec origin;
    104     KdFrameBuffer fb;
    105 } KdScreenInfo;
    106 
    107 typedef struct _KdCardFuncs {
    108     Bool (*cardinit) (KdCardInfo *);    /* detect and map device */
    109     Bool (*scrinit) (KdScreenInfo *);   /* initialize screen information */
    110     Bool (*initScreen) (ScreenPtr);     /* initialize ScreenRec */
    111     Bool (*finishInitScreen) (ScreenPtr pScreen);
    112     Bool (*createRes) (ScreenPtr);      /* create screen resources */
    113     void (*scrfini) (KdScreenInfo *);   /* close down screen */
    114     void (*cardfini) (KdCardInfo *);    /* close down */
    115 
    116     Bool (*initCursor) (ScreenPtr);     /* detect and map cursor */
    117 
    118     Bool (*initAccel) (ScreenPtr);
    119     void (*enableAccel) (ScreenPtr);
    120     void (*disableAccel) (ScreenPtr);
    121     void (*finiAccel) (ScreenPtr);
    122 
    123     void (*getColors) (ScreenPtr, int, xColorItem *);
    124     void (*putColors) (ScreenPtr, int, xColorItem *);
    125 
    126     void (*closeScreen) (ScreenPtr);    /* close ScreenRec */
    127 } KdCardFuncs;
    128 
    129 #define KD_MAX_PSEUDO_DEPTH 8
    130 #define KD_MAX_PSEUDO_SIZE	    (1 << KD_MAX_PSEUDO_DEPTH)
    131 
    132 typedef struct {
    133     KdScreenInfo *screen;
    134     KdCardInfo *card;
    135 
    136     Bool enabled;
    137     Bool closed;
    138     int bytesPerPixel;
    139 
    140     int dpmsState;
    141 
    142     ColormapPtr pInstalledmap;  /* current colormap */
    143     xColorItem systemPalette[KD_MAX_PSEUDO_SIZE];       /* saved windows colors */
    144 
    145     CreateScreenResourcesProcPtr CreateScreenResources;
    146     CloseScreenProcPtr CloseScreen;
    147 } KdPrivScreenRec, *KdPrivScreenPtr;
    148 
    149 typedef enum _kdPointerState {
    150     start,
    151     button_1_pend,
    152     button_1_down,
    153     button_2_down,
    154     button_3_pend,
    155     button_3_down,
    156     synth_2_down_13,
    157     synth_2_down_3,
    158     synth_2_down_1,
    159     num_input_states
    160 } KdPointerState;
    161 
    162 #define KD_MAX_BUTTON  32
    163 
    164 #define KD_KEYBOARD 1
    165 #define KD_MOUSE 2
    166 #define KD_TOUCHSCREEN 3
    167 
    168 typedef struct _KdPointerInfo KdPointerInfo;
    169 
    170 typedef struct _KdPointerDriver {
    171     const char *name;
    172      Status(*Init) (KdPointerInfo *);
    173      Status(*Enable) (KdPointerInfo *);
    174     void (*Disable) (KdPointerInfo *);
    175     void (*Fini) (KdPointerInfo *);
    176     struct _KdPointerDriver *next;
    177 } KdPointerDriver;
    178 
    179 struct _KdPointerInfo {
    180     DeviceIntPtr dixdev;
    181     char *name;
    182     char *path;
    183     char *protocol;
    184     InputOption *options;
    185     int inputClass;
    186 
    187     CARD8 map[KD_MAX_BUTTON + 1];
    188     int nButtons;
    189     int nAxes;
    190 
    191     Bool emulateMiddleButton;
    192     unsigned long emulationTimeout;
    193     int emulationDx, emulationDy;
    194 
    195     Bool timeoutPending;
    196     KdPointerState mouseState;
    197     Bool eventHeld;
    198     struct {
    199         int type;
    200         int x;
    201         int y;
    202         int z;
    203         int flags;
    204         int absrel;
    205     } heldEvent;
    206     unsigned char buttonState;
    207     Bool transformCoordinates;
    208     int pressureThreshold;
    209 
    210     KdPointerDriver *driver;
    211     void *driverPrivate;
    212 
    213     struct _KdPointerInfo *next;
    214 };
    215 
    216 void KdAddPointerDriver(KdPointerDriver * driver);
    217 void KdRemovePointerDriver(KdPointerDriver * driver);
    218 KdPointerInfo *KdNewPointer(void);
    219 void KdFreePointer(KdPointerInfo *);
    220 int KdAddPointer(KdPointerInfo * ki);
    221 int KdAddConfigPointer(char *pointer);
    222 void KdRemovePointer(KdPointerInfo * ki);
    223 
    224 #define KD_KEY_COUNT 248
    225 #define KD_MIN_KEYCODE  8
    226 #define KD_MAX_KEYCODE  255
    227 #define KD_MAX_WIDTH    4
    228 #define KD_MAX_LENGTH   (KD_MAX_KEYCODE - KD_MIN_KEYCODE + 1)
    229 
    230 typedef struct {
    231     KeySym modsym;
    232     int modbit;
    233 } KdKeySymModsRec;
    234 
    235 typedef struct _KdKeyboardInfo KdKeyboardInfo;
    236 
    237 typedef struct _KdKeyboardDriver {
    238     const char *name;
    239     Bool (*Init) (KdKeyboardInfo *);
    240     Bool (*Enable) (KdKeyboardInfo *);
    241     void (*Leds) (KdKeyboardInfo *, int);
    242     void (*Bell) (KdKeyboardInfo *, int, int, int);
    243     void (*Disable) (KdKeyboardInfo *);
    244     void (*Fini) (KdKeyboardInfo *);
    245     struct _KdKeyboardDriver *next;
    246 } KdKeyboardDriver;
    247 
    248 struct _KdKeyboardInfo {
    249     struct _KdKeyboardInfo *next;
    250     DeviceIntPtr dixdev;
    251     void *closure;
    252     char *name;
    253     char *path;
    254     int inputClass;
    255     char *xkbRules;
    256     char *xkbModel;
    257     char *xkbLayout;
    258     char *xkbVariant;
    259     char *xkbOptions;
    260     int LockLed;
    261 
    262     int minScanCode;
    263     int maxScanCode;
    264 
    265     int leds;
    266     int bellPitch;
    267     int bellDuration;
    268     InputOption *options;
    269 
    270     KdKeyboardDriver *driver;
    271     void *driverPrivate;
    272 };
    273 
    274 void KdAddKeyboardDriver(KdKeyboardDriver * driver);
    275 void KdRemoveKeyboardDriver(KdKeyboardDriver * driver);
    276 KdKeyboardInfo *KdNewKeyboard(void);
    277 void KdFreeKeyboard(KdKeyboardInfo * ki);
    278 int KdAddConfigKeyboard(char *pointer);
    279 int KdAddKeyboard(KdKeyboardInfo * ki);
    280 void KdRemoveKeyboard(KdKeyboardInfo * ki);
    281 
    282 typedef struct _KdPointerMatrix {
    283     int matrix[2][3];
    284 } KdPointerMatrix;
    285 
    286 extern DevPrivateKeyRec kdScreenPrivateKeyRec;
    287 
    288 #define kdScreenPrivateKey (&kdScreenPrivateKeyRec)
    289 
    290 extern Bool kdEmulateMiddleButton;
    291 extern Bool kdDisableZaphod;
    292 
    293 #define KdGetScreenPriv(pScreen) ((KdPrivScreenPtr) \
    294     dixLookupPrivate(&(pScreen)->devPrivates, kdScreenPrivateKey))
    295 #define KdSetScreenPriv(pScreen,v) \
    296     dixSetPrivate(&(pScreen)->devPrivates, kdScreenPrivateKey, v)
    297 #define KdScreenPriv(pScreen) KdPrivScreenPtr pScreenPriv = KdGetScreenPriv(pScreen)
    298 
    299 /* kcmap.c */
    300 void
    301  KdEnableColormap(ScreenPtr pScreen);
    302 
    303 void
    304  KdDisableColormap(ScreenPtr pScreen);
    305 
    306 void
    307  KdInstallColormap(ColormapPtr pCmap);
    308 
    309 void
    310  KdUninstallColormap(ColormapPtr pCmap);
    311 
    312 int
    313  KdListInstalledColormaps(ScreenPtr pScreen, Colormap * pCmaps);
    314 
    315 void
    316  KdStoreColors(ColormapPtr pCmap, int ndef, xColorItem * pdefs);
    317 
    318 /* kdrive.c */
    319 extern miPointerScreenFuncRec kdPointerScreenFuncs;
    320 
    321 void
    322  KdDisableScreen(ScreenPtr pScreen);
    323 
    324 Bool
    325  KdEnableScreen(ScreenPtr pScreen);
    326 
    327 void
    328  KdEnableScreens(void);
    329 
    330 void
    331  KdProcessSwitch(void);
    332 
    333 Rotation KdAddRotation(Rotation a, Rotation b);
    334 
    335 Rotation KdSubRotation(Rotation a, Rotation b);
    336 
    337 void
    338  KdParseScreen(KdScreenInfo * screen, const char *arg);
    339 
    340 const char *
    341 KdParseFindNext(const char *cur, const char *delim, char *save, char *last);
    342 
    343 void
    344  KdUseMsg(void);
    345 
    346 int
    347  KdProcessArgument(int argc, char **argv, int i);
    348 
    349 void
    350  KdOsAddInputDrivers(void);
    351 
    352 void
    353  KdInitCard(ScreenInfo * pScreenInfo, KdCardInfo * card, int argc, char **argv);
    354 
    355 void
    356  KdInitOutput(ScreenInfo * pScreenInfo, int argc, char **argv);
    357 
    358 void
    359  KdSetSubpixelOrder(ScreenPtr pScreen, Rotation randr);
    360 
    361 void
    362  KdBacktrace(int signum);
    363 
    364 /* kinfo.c */
    365 KdCardInfo *KdCardInfoAdd(KdCardFuncs * funcs, void *closure);
    366 
    367 KdCardInfo *KdCardInfoLast(void);
    368 
    369 void
    370  KdCardInfoDispose(KdCardInfo * ci);
    371 
    372 KdScreenInfo *KdScreenInfoAdd(KdCardInfo * ci);
    373 
    374 void
    375  KdScreenInfoDispose(KdScreenInfo * si);
    376 
    377 /* kinput.c */
    378 void
    379  KdInitInput(void);
    380 void
    381  KdCloseInput(void);
    382 
    383 void
    384 KdEnqueueKeyboardEvent(KdKeyboardInfo * ki, unsigned char scan_code,
    385                        unsigned char is_up);
    386 
    387 #define KD_BUTTON_1	0x01
    388 #define KD_BUTTON_2	0x02
    389 #define KD_BUTTON_3	0x04
    390 #define KD_BUTTON_4	0x08
    391 #define KD_BUTTON_5	0x10
    392 #define KD_BUTTON_8	0x80
    393 #define KD_POINTER_DESKTOP 0x40000000
    394 #define KD_MOUSE_DELTA	0x80000000
    395 
    396 void
    397 KdEnqueuePointerEvent(KdPointerInfo * pi, unsigned long flags, int rx, int ry,
    398                       int rz);
    399 
    400 void
    401  KdSetPointerMatrix(KdPointerMatrix *pointer);
    402 
    403 void
    404 KdComputePointerMatrix(KdPointerMatrix *pointer, Rotation randr, int width,
    405                        int height);
    406 
    407 void
    408 KdBlockHandler(ScreenPtr pScreen, void *timeout);
    409 
    410 void
    411 KdWakeupHandler(ScreenPtr pScreen, int result);
    412 
    413 void
    414  KdDisableInput(void);
    415 
    416 void
    417  KdEnableInput(void);
    418 
    419 /* kshadow.c */
    420 Bool
    421  KdShadowFbAlloc(KdScreenInfo * screen, Bool rotate);
    422 
    423 void
    424  KdShadowFbFree(KdScreenInfo * screen);
    425 
    426 Bool
    427 
    428 KdShadowSet(ScreenPtr pScreen, int randr, ShadowUpdateProc update,
    429             ShadowWindowProc window);
    430 
    431 void
    432  KdShadowUnset(ScreenPtr pScreen);
    433 
    434 /* function prototypes to be implemented by the drivers */
    435 void
    436  InitCard(char *name);
    437 
    438 #endif                          /* _KDRIVE_H_ */