miline.h revision 61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4cc
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncCopyright 1994, 1998 The Open Group
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncPermission to use, copy, modify, distribute, and sell this software and its
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncdocumentation for any purpose is hereby granted without fee, provided that
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncthe above copyright notice appear in all copies and that both that
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsynccopyright notice and this permission notice appear in supporting
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncdocumentation.
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncThe above copyright notice and this permission notice shall be included in
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncall copies or substantial portions of the Software.
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncOPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncAN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncExcept as contained in this notice, the name of The Open Group shall not be
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncused in advertising or otherwise to promote the sale, use or other dealings
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncin this Software without prior written authorization from The Open Group.
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * Public definitions used for configuring basic pixelization aspects
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * of the sample implementation line-drawing routines provided in
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * {mfb,mi,cfb*} at run-time.
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync#define OCTANT3 (1 << (XDECREASING|YDECREASING|YMAJOR))
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync#define XMAJOROCTANTS (OCTANT1 | OCTANT4 | OCTANT5 | OCTANT8)
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync#define DEFAULTZEROLINEBIAS (OCTANT2 | OCTANT3 | OCTANT4 | OCTANT5)
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * Devices can configure the rendering of routines in mi, mfb, and cfb*
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * by specifying a thin line bias to be applied to a particular screen
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * using the following function. The bias parameter is an OR'ing of
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * the appropriate OCTANT constants defined above to indicate which
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * octants to bias a line to prefer an axial step when the Bresenham
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * error term is exactly zero. The octants are mapped as follows:
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * \ 3 | 2 /
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * 4 \ | / 1
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * -----------
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * 5 / | \ 8
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * / 6 | 7 \
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * For more information, see "Ambiguities in Incremental Line Rastering,"
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * Jack E. Bresenham, IEEE CG&A, May 1987.
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncextern _X_EXPORT void miSetZeroLineBias(ScreenPtr /* pScreen */ ,
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync unsigned int /* bias */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * Private definitions needed for drawing thin (zero width) lines
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * Used by the mi, mfb, and all cfb* components.
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync else if ( (_x) >= (_pbox)->x2) (_result) |= OUT_RIGHT; \
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync else if ( (_y) >= (_pbox)->y2) (_result) |= OUT_BELOW;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync#define MIOUTCODES(outcode, x, y, xmin, ymin, xmax, ymax) \
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync#define SWAPINT(i, j) \
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync#define SWAPPT(i, j) \
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync#define miGetZeroLineBias(_pScreen) ((unsigned long) (unsigned long*)\
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync dixLookupPrivate(&(_pScreen)->devPrivates, miZeroLineScreenKey))
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync#define CalcLineDeltas(_x1,_y1,_x2,_y2,_adx,_ady,_sx,_sy,_SX,_SY,_octant) \
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync#define SetYMajorOctant(_octant) ((_octant) |= YMAJOR)
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync#define IsXMajorOctant(_octant) (!((_octant) & YMAJOR))
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync#define IsYMajorOctant(_octant) ((_octant) & YMAJOR)
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync#define IsXDecreasingOctant(_octant) ((_octant) & XDECREASING)
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync#define IsYDecreasingOctant(_octant) ((_octant) & YDECREASING)
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsyncextern _X_EXPORT DevPrivateKeyRec miZeroLineScreenKeyRec;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync#define miZeroLineScreenKey (&miZeroLineScreenKeyRec)
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync int /*ymin */ ,
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync int /*xmax */ ,
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync int /*ymax */ ,
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync int * /*new_x1 */ ,
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync int * /*new_y1 */ ,
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync int * /*new_x2 */ ,
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync int * /*new_y2 */ ,
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync unsigned int /*adx */ ,
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync unsigned int /*ady */ ,
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync int * /*pt1_clipped */ ,
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync int * /*pt2_clipped */ ,
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync int /*octant */ ,
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync unsigned int /*bias */ ,
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync int /*oc1 */ ,
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync int /*oc2 */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync#endif /* MILINE_H */