Annotation of 43BSDTahoe/new/X/doc/Xlib/ch06b.t, revision 1.1.1.1

1.1       root        1: .NH 2
                      2: Line Drawing and Fill Operations
                      3: .FD
                      4: .IN "Definitions" "XLine"
                      5: .IN "XLine"
                      6: .IN "Line" "Drawing"
                      7: XLine (w, x1, y1, x2, y2, width, height, pixel, func, planes)
                      8:        Window w;
                      9:        int width, height;      /* brush */
                     10:        int x1, y1, x2, y2;     /* beginning and end points */
                     11:        int pixel;      /* pixel value */
                     12:        int func;       /* display function */
                     13:        int planes;     /* plane mask */
                     14: .FN
                     15: \fIXLine\fP draws a line from pixel (\fIx1\fP,\fIy1\fP) to pixel
                     16: (\fIx2\fP,\fIy2\fP) inclusive
                     17: in the specified window, using the specified display function \fIfunc\fP.
                     18: .PP
                     19: The line will be drawn in the color specified by the \fIpixel\fP value.
                     20: .PP
                     21: \fIWidth\fP and \fIheight\fP
                     22: specify the size of a brush to be drawn along the line.
                     23: See the description of brushes at the beginning of this section.
                     24: .PP
                     25: The plane mask \fIplanes\fP
                     26: specifies which planes of the display will be modified.
                     27: .FD
                     28: .IN "Definitions" "XDraw"
                     29: .IN "XDraw"
                     30: .IN "Line" "Drawing"
                     31: XDraw (w, vlist, vcount, width, height, pixel, func, planes)
                     32:        Window w;
                     33:        int vcount;     /* number of vertices */
                     34:        Vertex *vlist;
                     35:        int height, width;      /* brush */
                     36:        int pixel;      /* pixel value */
                     37:        int func;       /* display function */
                     38:        int planes;     /* plane mask */
                     39: .FN
                     40: \fIXDraw\fP draws an arbitrary polygon or curve using the specified function.
                     41: The figure drawn is defined by the list of Vertexes \fIvlist\fP
                     42: that the caller supplies.
                     43: The points will be connected by lines as specified in the flags
                     44: in the vertex structure.
                     45: .PP
                     46: \fIWidth\fP and \fIheight\fP
                     47: specify the size of a brush to be drawn along the line.
                     48: See the description of brushes at the beginning of this section.
                     49: .PP
                     50: The plane mask \fIplanes\fP
                     51: specifies which planes of the display will be modified.
                     52: .PP
                     53: .IN "File" "<X/X.h>"
                     54: Each Vertex is a structure (defined in \fI<X/X.h>\fP):
                     55: .IN "Data Structures" "Vertex"
                     56: .IN "Vertex"
                     57: .nf
                     58: .sp
                     59:    typedef struct _Vertex {
                     60:        short x, y;
                     61:        unsigned short flags;
                     62:    } Vertex;
                     63: .fi
                     64: .LP
                     65: \fIX\fP and \fIy\fP are the coordinates of the vertex,
                     66: relative to either the upper
                     67: .IN "Vertex" "Flags"
                     68: left inside corner of the window (if the \fIVertexRelative\fP
                     69: bit in \fIflags\fP
                     70:  is 0) or
                     71: the previous vertex (if \fIVertexRelative\fP is 1).
                     72: .PP
                     73: .IN "File" "<X/X.h>"
                     74: .IN "Vertex" "Flags"
                     75: The flags, as defined in \fI<X/X.h>\fP, are as follows:
                     76: .LP
                     77: .TS
                     78: center;
                     79: l c l.
                     80: VertexRelative 0x0001  else absolute
                     81: VertexDontDraw 0x0002  else draw
                     82: VertexCurved   0x0004  else straight
                     83: VertexStartClosed      0x0008  else not
                     84: VertexEndClosed        0x0010  else not
                     85: VertexDrawLastPoint    0x0020  else don't
                     86: .TE
                     87: .IN "VertexRelative"
                     88: \fIVertexRelative\fP is described above.
                     89: If bit 0 is not set, the coordinates are absolute (relative to the window).
                     90: The first vertex must be an absolute vertex.
                     91: .PP
                     92: .IN "VertexDontDraw"
                     93: If the \fIVertexDontDraw\fP bit is 1, no line or curve is drawn from the previous
                     94: vertex to this one.  This is analogous to picking up the pen and moving
                     95: to another place before drawing another line.
                     96: .PP
                     97: .IN "VertexCurved"
                     98: If the \fIVertexCurved\fP bit is 1, a spline algorithm is used to draw a smooth
                     99: curve from the previous vertex, through this one, to the next vertex.
                    100: Otherwise, a straight line is drawn from the previous vertex.
                    101: It makes
                    102: sense to set \fIVertexCurved\fP to 1 only if a previous and next vertex are
                    103: both defined (either explicitly in the array, or through the definition
                    104: of a closed curve--see below.)
                    105: .PP
                    106: It is permissible for \fIVertexDontDraw\fP
                    107: bits and \fIVertexCurved\fP bits to both be 1; 
                    108: this is useful if you want to define the `previous point' for the smooth
                    109: curve, but don't want an actual curve drawing to start until this
                    110: point.
                    111: .PP
                    112: .IN "VertexStartClosed"
                    113: If \fIVertexStartClosed\fP bit is 1, then this point marks the beginning of a
                    114: closed curve.  
                    115: This vertex MUST be followed later in the array by
                    116: another vertex whose absolute coordinates are identical, and which has
                    117: .IN "VertexEndClosed"
                    118: \fIVertexEndClosed\fP bit of 1.
                    119: The points in between form a cycle for the purpose
                    120: of determining predecessor and successor vertices for the spline
                    121: algorithm.
                    122: It makes sense to set \fIVertexStartClosed\fP bit or \fIVertexEndClosed\fP bit
                    123: to 1 only if \fIVertexCurved\fP is also 1.
                    124: .PP
                    125: Normally, the end point of a curve or line is not drawn, since it is
                    126: probably the beginning point of the next curve or line.
                    127: .IN "Display Functions"
                    128: This is important if
                    129: a display function such as \fIGXinvert\fP or \fIGXxor\fP
                    130: is used, since drawing a
                    131: point twice with such a function produces a different result than
                    132: drawing it just once.
                    133: If \fIVertexDrawLastPoint\fP is 1, the end point is drawn.  
                    134: .PP
                    135: .PP
                    136: The line will be drawn in the color specified by the pixel value.
                    137: .FD
                    138: .IN "Definitions" "XAppendVertex"
                    139: .IN "XAppendVertex"
                    140: int XAppendVertex(vertices,nvert)
                    141:        Vertex vertices[];
                    142:        int nvert;
                    143: .FN
                    144: This function appends \fIvertices\fP to the output buffer.
                    145: It is the responsibility of higher level subroutines to determine
                    146: if the previous draw command was of the same type.
                    147: This subroutine is NOT intended for normal users of this library,
                    148: but as a hook for certain libraries built on this library.
                    149: This function returns a 0 if there is no Draw command currently in
                    150: the output buffer, -1 if the vertices would not fit before the end of
                    151: the buffer, or \fInvert\fP if it was successful at appending the vertices.
                    152: .FD
                    153: .IN "Definitions" "XClearVertexFlag"
                    154: .IN "XClearVertexFlag"
                    155: XClearVertexFlag()
                    156: .FN
                    157: This routine clears the state of the flag marking if it is safe to
                    158: append vertices.
                    159: Again, this is principally for use of more sophisticated libraries.
                    160: .sp 2
                    161: .PP
                    162: When drawing lines, one may want to draw `dashed' or `dotted' lines.
                    163: This means you want to be able to some how specify the length of the
                    164: dashes, and the distance between them.
                    165: These functions therefore take  a `pattern' specifier.
                    166: .PP
                    167: .IN "Macro" "DashedLine"
                    168: .IN "Macro" "DottedLine"
                    169: .IN "Macro" "SolidLine"
                    170: \fIXlib.h\fP has some predefined pattern values (actually macro invocations)
                    171: of \fIDashedLine\fP, \fIDottedLine\fP,
                    172: \fISolidLine\fP.
                    173: .IN "Definitions" "Patterns"
                    174: .IN "Patterns"
                    175: Since these predefined patterns are macro invocations and evaluate
                    176: to an integer,
                    177: you can use the predefined patterns to initialize static data.
                    178: .FD
                    179: .IN "Definitions" "XMakePattern"
                    180: .IN "XMakePattern"
                    181: .IN "Patterns"
                    182: Pattern XMakePattern(pattern, length, multiplier)
                    183:        int pattern, length, multiplier;
                    184: .FN
                    185: In this macro, \fIpattern\fP is a bit string of the specified \fIlength\fP (at
                    186: most 16 bits).
                    187: The \fImultiplier\fP specifies how many times each bit in the
                    188: string should be repeated before moving to the next bit.
                    189: It cannot be more than 4096.
                    190: The bits are used least significant bit first, and repeated as many times
                    191: as needed.
                    192: .FD
                    193: .IN "Definitions" "XDrawPatterned"
                    194: .IN "Definitions" "XDrawDashed"
                    195: .IN "XDrawPatterned"
                    196: .IN "XDrawDashed"
                    197: .IN "Patterns"
                    198: XDrawPatterned (w, vlist, vcount, width, height, pixel, altpix, pattern, func, planes)
                    199:        int altpix;
                    200: 
                    201: XDrawDashed (w, vlist, vcount, width, height, pixel, pattern, func, planes)
                    202:        Window w;
                    203:        int pixel;      /* pixel value */
                    204:        int height, width;      /* brush size */
                    205:        int vcount;     /* number of vertices */
                    206:        Vertex *vlist;
                    207:        Pattern pattern;        /* pattern specification */
                    208:        int func;       /* display function */
                    209:        int planes;     /* plane mask */
                    210: .FN
                    211: .IN "XDraw"
                    212: These functions are similar to \fIXDraw\fP,
                    213: except they draw a dashed rather than a
                    214: solid line.
                    215: The pattern is a value encoding the pattern to be used.
                    216: .PP
                    217: For a dashed line, the destination is only updated when the pattern bit
                    218: is one.
                    219: .PP
                    220: For a patterned line,
                    221: the alternate source pixel value is used when the pattern bit is zero.
                    222: .FD
                    223: .IN "Definitions" "XDrawTiled"
                    224: .IN "Definitions" "XDrawFilled"
                    225: .IN "XDrawTiled"
                    226: .IN "XDrawFilled"
                    227: XDrawTiled (w, vlist, vcount, tile, func, planes)
                    228:        Pixmap tile;
                    229: 
                    230: XDrawFilled (w, vlist, vcount, pixel, func, planes)
                    231:        Window w;
                    232:        Vertex *vlist;
                    233:        int vcount;     /* number of vertices */
                    234:        int pixel;      /* pixel value */
                    235:        int func;       /* display function */
                    236:        int planes;     /* plane mask */
                    237: .FN
                    238: .IN "Polygons"
                    239: \fIXDrawFilled\fP draws arbitrary polygons or curves and fills them with 
                    240: the specified \fIpixel\fP value.
                    241: .IN "Filled Polygons"
                    242: XDrawTiled draws arbitrary polygons or curves and fills them with 
                    243: the specified \fItile\fP Pixmap.
                    244: .IN "XDraw"
                    245: The \fIvlist\fP, \fIvcount\fP, \fIfunc\fP and \fIplanes\fP
                    246: arguments are identical to \fIXDraw\fP.
                    247: Note that there may be implementation restrictions on the
                    248: nature of the \fItile\fP Pixmap.
                    249: (See \fIXQueryTileShape\fP.)
                    250: The vertex list should consist only of one or more closed regions.
                    251: A point is defined to be inside a region if an infinite ray with the point
                    252: as an origin crosses the path of the region an odd number of times.
                    253: .IN "XQueryTileShape"
                    254: .FD
                    255: .IN "Definitions" "XQueryBrushShape"
                    256: .IN "XQueryBrushShape"
                    257: .IN "Limitations" "Brush Shape"
                    258: XQueryBrushShape (width, height, cwidth, height)
                    259:        int width, height;
                    260:        int *cwidth, *cheight;  /* RETURN of `closest' legal size */
                    261: .FN
                    262: This function returns the `closest' shape actually supported by the
                    263: display hardware for brushes, since not all hardware is capable of supporting
                    264: arbitrary size brushes.
                    265: Painting lines using brushes of widths not supported by the hardware
                    266: has unpredictable results.

unix.superglobalmegacorp.com

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