Annotation of researchv9/X11/src/X.V11R1/server/ddx/mfb/mfb.h, revision 1.1.1.1

1.1       root        1: /***********************************************************
                      2: Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts,
                      3: and the Massachusetts Institute of Technology, Cambridge, Massachusetts.
                      4: 
                      5:                         All Rights Reserved
                      6: 
                      7: Permission to use, copy, modify, and distribute this software and its 
                      8: documentation for any purpose and without fee is hereby granted, 
                      9: provided that the above copyright notice appear in all copies and that
                     10: both that copyright notice and this permission notice appear in 
                     11: supporting documentation, and that the names of Digital or MIT not be
                     12: used in advertising or publicity pertaining to distribution of the
                     13: software without specific, written prior permission.  
                     14: 
                     15: DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
                     16: ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
                     17: DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
                     18: ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
                     19: WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
                     20: ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
                     21: SOFTWARE.
                     22: 
                     23: ******************************************************************/
                     24: /* $Header: mfb.h,v 1.6 87/09/02 00:30:58 toddb Exp $ */
                     25: /* Monochrome Frame Buffer definitions 
                     26:    written by drewry, september 1986
                     27: */
                     28: #include "pixmap.h"
                     29: #include "region.h"
                     30: #include "gc.h"
                     31: #include "colormap.h"
                     32: #include "miscstruct.h"
                     33: 
                     34: extern int InverseAlu[];
                     35: 
                     36: extern Bool mfbScreenInit();
                     37: extern void mfbQueryBestSize();
                     38: extern Bool mfbCreateWindow();
                     39: extern Bool mfbPositionWindow();
                     40: extern Bool mfbChangeWindowAttributes();
                     41: extern Bool mfbMapWindow();
                     42: extern Bool mfbUnmapWindow();
                     43: extern Bool mfbDestroyWindow();
                     44: 
                     45: extern Bool mfbRealizeFont();
                     46: extern Bool mfbUnrealizeFont();
                     47: extern Bool mfbRealizeCursor();
                     48: extern Bool mfbUnrealizeCursor();
                     49: extern Bool mfbScreenSaver();
                     50: extern Bool mfbCreateGC();
                     51: 
                     52: extern PixmapPtr mfbCreatePixmap();
                     53: extern Bool mfbDestroyPixmap();
                     54: 
                     55: extern void mfbCopyWindow();
                     56: 
                     57: /* window painters */
                     58: extern void mfbPaintWindowNone();
                     59: extern void mfbPaintWindowPR();
                     60: extern void mfbPaintWindowSolid();
                     61: extern void mfbPaintWindow32();
                     62: 
                     63: /* rectangle painters */
                     64: extern void mfbSolidWhiteArea();
                     65: extern void mfbStippleWhiteArea();
                     66: extern void mfbSolidBlackArea();
                     67: extern void mfbStippleBlackArea();
                     68: extern void mfbSolidInvertArea();
                     69: extern void mfbStippleInvertArea();
                     70: extern void mfbTileArea32();
                     71: 
                     72: 
                     73: extern void mfbPolyFillRect();
                     74: extern void mfbCopyArea();
                     75: extern void mfbPolyPoint();
                     76: extern void mfbCopyPlane();
                     77: 
                     78: extern void mfbDestroyGC();
                     79: extern void mfbValidateGC();
                     80: 
                     81: extern void mfbSetSpans();
                     82: extern unsigned int *mfbGetSpans();
                     83: extern void mfbWhiteSolidFS();
                     84: extern void mfbBlackSolidFS();
                     85: extern void mfbInvertSolidFS();
                     86: extern void mfbWhiteStippleFS();
                     87: extern void mfbBlackStippleFS();
                     88: extern void mfbInvertStippleFS();
                     89: extern void mfbTileFS();
                     90: extern void mfbUnnaturalTileFS();
                     91: extern void mfbUnnaturalStippleFS();
                     92: 
                     93: extern void mfbGetImage();
                     94: extern void mfbPutImage();
                     95: 
                     96: extern void mfbLineSS();       /* solid single-pixel wide line */
                     97:                                /* calls mfb{Bres|Horz|Vert}S() */
                     98: extern void mfbDashLine();     /* dashed zero-width line */
                     99: extern void mfbImageText8();
                    100: extern void mfbImageText16();
                    101: extern int mfbPolyText16();
                    102: extern int mfbPolyText8();
                    103: extern PixmapPtr mfbCopyPixmap();
                    104: extern RegionPtr mfbPixmapToRegion();
                    105: extern void mfbPushPixels();
                    106: 
                    107: /* text for glyphs <= 32 bits wide */
                    108: extern void mfbImageGlyphBltWhite();
                    109: extern void mfbImageGlyphBltBlack();
                    110: extern void mfbPolyGlyphBltWhite();
                    111: extern void mfbPolyGlyphBltBlack();
                    112: extern void mfbPolyGlyphBltInvert();
                    113: 
                    114: /* text for terminal emulator fonts */
                    115: extern void mfbTEGlyphBltWhite();      /* fg = 1, bg = 0 */
                    116: extern void mfbTEGlyphBltBlack();      /* fg = 0, bg = 1 */
                    117: 
                    118: extern void mfbChangeClip();
                    119: extern void mfbDestroyClip();
                    120: extern void mfbCopyClip();
                    121: 
                    122: extern int mfbListInstalledColormaps();
                    123: extern void mfbInstallColormap();
                    124: extern void mfbUninstallColormap();
                    125: 
                    126: extern void mfbResolveColor();
                    127: 
                    128: extern void mfbCopyGCDest();
                    129: 
                    130: /*
                    131:    private filed of pixmap
                    132:    pixmap.devPrivate = (unsigned int *)pointer_to_bits
                    133:    pixmap.devKind = width_of_pixmap_in_bytes
                    134: 
                    135:    private field of screen
                    136:    a pixmap, for which we allocate storage.  devPrivate is a pointer to
                    137: the bits in the hardware framebuffer.  note that devKind can be poked to
                    138: make the code work for framebuffers that are wider than their
                    139: displayable screen (e.g. the early vsII, which displayed 960 pixels
                    140: across, but was 1024 in the hardware.)  this is left to the
                    141: code that calls mfbScreenInit(), rather than having mfbScreenInit()
                    142: take yet another parameter.
                    143: 
                    144:    private field of GC 
                    145:        pAbsClientRegion is always a real region, although perhaps
                    146: an empty one.
                    147:        Freeing pCompositeClip is done based on the value of
                    148: freeCompClip; if freeCompClip is not carefully maintained, we will end
                    149: up losing storage or freeing something that isn't ours.
                    150: */
                    151: 
                    152: typedef struct {
                    153:     unsigned char      rop;            /* reduction of rasterop to 1 of 3 */
                    154:     unsigned char      ropOpStip;      /* rop for opaque stipple */
                    155:     unsigned char      ropFillArea;    /*  == alu, rop, or ropOpStip */
                    156:     short      fExpose;                /* callexposure handling ? */
                    157:     short      freeCompClip;
                    158:     PixmapPtr  pRotatedTile;           /* tile/stipple  rotated to align */
                    159:     PixmapPtr  pRotatedStipple;        /* with window and using offsets */
                    160:     RegionPtr  pAbsClientRegion;       /* client region in screen coords */
                    161:     RegionPtr  pCompositeClip;         /* free this based on freeCompClip
                    162:                                           flag rather than NULLness */
                    163:     void       (* FillArea)();         /* fills regions; look at the code */
                    164:     PixmapPtr   *ppPixmap;             /* points to the pixmapPtr to
                    165:                                           use for tiles and stipples */
                    166:     } mfbPrivGC;
                    167: typedef mfbPrivGC      *mfbPrivGCPtr;
                    168: 
                    169: /* freeCompositeClip values */
                    170: #define REPLACE_CC     0               /* compsite clip is a copy of a
                    171:                                           pointer, so it doesn't need to 
                    172:                                           be freed; just overwrite it.
                    173:                                           this happens if there is no
                    174:                                           client clip and the gc has
                    175:                                           ClipByChildren in it.
                    176:                                        */
                    177: #define FREE_CC                1               /* composite clip is a real
                    178:                                           region that we need to free
                    179:                                        */
                    180: 
                    181: /* private field of window */
                    182: typedef struct {
                    183:     int                fastBorder;     /* non-zero if border tile is 32 bits wide */
                    184:     int                fastBackground;
                    185:     DDXPointRec        oldRotate;
                    186:     PixmapPtr  pRotatedBackground;
                    187:     PixmapPtr  pRotatedBorder;
                    188:     } mfbPrivWin;
                    189: 
                    190: /* precomputed information about each glyph for GlyphBlt code.
                    191:    this saves recalculating the per glyph information for each
                    192: box.
                    193: */
                    194: typedef struct _pos{
                    195:     int xpos;          /* xposition of glyph's origin */
                    196:     int xchar;         /* x position mod 32 */
                    197:     int leftEdge;
                    198:     int rightEdge;
                    199:     int topEdge;
                    200:     int bottomEdge;
                    201:     unsigned int *pdstBase;    /* longword with character origin */
                    202:     int widthGlyph;    /* width in bytes of this glyph */
                    203: } TEXTPOS;
                    204: 
                    205: /* reduced raster ops for mfb */
                    206: #define RROP_BLACK     GXclear
                    207: #define RROP_WHITE     GXset
                    208: #define RROP_NOP       GXnoop
                    209: #define RROP_INVERT    GXinvert
                    210: 
                    211: /* out of clip region codes */
                    212: #define OUT_LEFT 0x08
                    213: #define OUT_RIGHT 0x04
                    214: #define OUT_ABOVE 0x02
                    215: #define OUT_BELOW 0x01
                    216: 
                    217: /* major axis for bresenham's line */
                    218: #define X_AXIS 0
                    219: #define Y_AXIS 1
                    220: 
                    221: /* optimization codes for FONT's devPrivate field */
                    222: #define FT_VARPITCH    0
                    223: #define FT_SMALLPITCH  1
                    224: #define FT_FIXPITCH    2
                    225: 
                    226: /* macros for mfbbitblt.c, mfbfillsp.c
                    227:    these let the code do one switch on the rop per call, rather
                    228: than a switch on the rop per item (span or rectangle.)
                    229: */
                    230: 
                    231: #define fnCLEAR(src, dst)      (0)
                    232: #define fnAND(src, dst)        (src & dst)
                    233: #define fnANDREVERSE(src, dst) (src & ~dst)
                    234: #define fnCOPY(src, dst)       (src)
                    235: #define fnANDINVERTED(src, dst)        (~src & dst)
                    236: #define fnNOOP(src, dst)       (dst)
                    237: #define fnXOR(src, dst)                (src ^ dst)
                    238: #define fnOR(src, dst)         (src | dst)
                    239: #define fnNOR(src, dst)                (~(src | dst))
                    240: #define fnEQUIV(src, dst)      (~src ^ dst)
                    241: #define fnINVERT(src, dst)     (~dst)
                    242: #define fnORREVERSE(src, dst)  (src | ~dst)
                    243: #define fnCOPYINVERTED(src, dst)(~src)
                    244: #define fnORINVERTED(src, dst) (~src | dst)
                    245: #define fnNAND(src, dst)       (~(src & dst))
                    246: #define fnSET(src, dst)                (~0)
                    247: 
                    248: /* Binary search to figure out what to do for the raster op.  It may
                    249:  * do 5 comparisons, but at least it does no function calls 
                    250:  * Special cases copy because it's so frequent 
                    251:  */
                    252: #define DoRop(alu, src, dst) \
                    253: ( ((alu) == GXcopy) ? (src) : \
                    254:     (((alu) >= GXnor) ? \
                    255:      (((alu) >= GXcopyInverted) ? \
                    256:        (((alu) >= GXnand) ? \
                    257:          (((alu) == GXnand) ? ~((src) & (dst)) : ~0) : \
                    258:          (((alu) == GXcopyInverted) ? ~(src) : (~(src) | (dst)))) : \
                    259:        (((alu) >= GXinvert) ? \
                    260:         (((alu) == GXinvert) ? ~(dst) : ((src) | ~(dst))) : \
                    261:         (((alu) == GXnor) ? ~((src) | (dst)) : (~(src) ^ (dst)))) ) : \
                    262:      (((alu) >= GXandInverted) ? \
                    263:        (((alu) >= GXxor) ? \
                    264:         (((alu) == GXxor) ? ((src) ^ (dst)) : ((src) | (dst))) : \
                    265:         (((alu) == GXnoop) ? (dst) : (~(src) & (dst)))) : \
                    266:        (((alu) >= GXandReverse) ? \
                    267:         (((alu) == GXandReverse) ? ((src) & ~(dst)) : (src)) : \
                    268:         (((alu) == GXand) ? ((src) & (dst)) : 0)))  ) )
                    269: 
                    270: 
                    271: #define DoRRop(alu, src, dst) \
                    272: (((alu) == RROP_BLACK) ? ((dst) & ~(src)) : \
                    273:  ((alu) == RROP_WHITE) ? ((dst) | (src)) : \
                    274:  ((alu) == RROP_INVERT) ? ((dst) ^ (src)) : \
                    275:   (dst))

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.