The _X_D_r_a_w_L_i_n_e_s function uses the components of the specified GC to draw npoints-1 lines between each pair of points (point[i], point[i+1]) in the array of _X_P_o_i_n_t structures. It draws the lines in the order listed in the array. The lines join correctly at all intermediate points, and if the first and last points coincide, the first and last lines also join correctly. For any given line, _X_D_r_a_w_L_i_n_e_s does not draw a pixel more than once. If thin (zero line-width) lines intersect, the intersecting pixels are drawn multiple times. If wide lines intersect, the intersecting pixels are drawn only once, as though the entire _P_o_l_y_L_i_n_e protocol request were a single, filled shape. _C_o_o_r_d_M_o_d_e_O_r_i_g_i_n treats all coordinates as relative to the origin, and _C_o_o_r_d_M_o_d_e_P_r_e_v_i_o_u_s treats all coordinates after the first as relative to the previous point.
The _X_D_r_a_w_S_e_g_m_e_n_t_s function draws multiple, unconnected lines. For each segment, _X_D_r_a_w_S_e_g_m_e_n_t_s draws a line between (x1, y1) and (x2, y2). It draws the lines in the order listed in the array of _X_S_e_g_m_e_n_t structures and does not perform joining at coincident endpoints. For any given line, _X_D_r_a_w_S_e_g_m_e_n_t_s does not draw a pixel more than once. If lines intersect, the intersecting pixels are drawn multiple times.
All three functions use these GC components: function, plane-mask, line-width, line-style, cap-style, fill-style, subwindow-mode, clip-x-origin, clip-y-origin, and clip-mask. The _X_D_r_a_w_L_i_n_e_s function also uses the join-style GC component. All three functions also use these GC mode-dependent components: foreground, background, tile, stipple, tile-stipple-x-origin, tile-stipple-y-origin, dash-offset, and dash-list.
_X_D_r_a_w_L_i_n_e, _X_D_r_a_w_L_i_n_e_s, and _X_D_r_a_w_S_e_g_m_e_n_t_s can generate _B_a_d_D_r_a_w_a_b_l_e, _B_a_d_G_C, and _B_a_d_M_a_t_c_h errors. _X_D_r_a_w_L_i_n_e_s can also generate a _B_a_d_V_a_l_u_e error.
typedef struct { short x1, y1, x2, y2; } XSegment;
All x and y members are signed integers. The width and height members are 16-bit unsigned integers. You should be careful not to generate coordinates and sizes out of the 16-bit ranges, because the protocol only has 16-bit fields for these values.