/* * Draw.h -- Header for common drawing routines. * * Authors : Patrick Lecoanet. * Creation date : Sat Dec 10 12:51:30 1994 * * $Id$ */ /* * Copyright (c) 1993 - 1999 CENA, Patrick Lecoanet -- * * This code is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This code is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this code; if not, write to the Free * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * */ #ifndef _Draw_h #define _Draw_h #include "List.h" #include "Types.h" #include "Color.h" #include "Attrs.h" #include #define LIGHTNING_POINTS 4 #define CORNER_POINTS 3 #define DOUBLE_CORNER_POINTS 4 #define STRAIGHT_POINTS 2 #define LINE_SHAPE_POINTS 4 /* Maximum of all above */ struct _WidgetInfo; struct _ImageBits; #ifdef GLX #define GLX_START_CLIP(num_clips, render) { \ if (!num_clips) { \ glEnable(GL_STENCIL_TEST); \ } \ glStencilFunc(GL_EQUAL, num_clips, 0xFF); \ glStencilOp(GL_KEEP, GL_INCR, GL_INCR); \ if (!render) { \ glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); \ } \ } #define GLX_RENDER_CLIPPED() { \ glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); \ glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); \ } #define GLX_RESTORE_STENCIL(num_clips, render) { \ glStencilFunc(GL_EQUAL, num_clips+1, 0xFF); \ glStencilOp(GL_KEEP, GL_DECR, GL_DECR); \ if (render) { \ glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); \ } \ else { \ glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); \ } \ } #define GLX_END_CLIP(num_clips) { \ glStencilFunc(GL_EQUAL, num_clips, 0xFF); \ glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); \ glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); \ if (!num_clips) { \ glDisable(GL_STENCIL_TEST); \ } \ } #endif void SetLineStyle(struct _WidgetInfo *wi, LineStyle line_style); void GetLineShape(ZnPoint *p1, ZnPoint *p2, unsigned int line_width, LineShape shape, ZnBBox *bbox, ZnList to_points); void DrawLineShape(struct _WidgetInfo *wi, ZnPoint *points, int num_points, LineStyle line_style, ZnColor line_foreground, unsigned int line_width, LineShape shape); int PolygonReliefInBBox(ZnPoint *points, int num_points, int line_width, ZnBBox *bbox); void GetPolygonReliefBBox(ZnPoint *points, int num_points, int line_width, ZnBBox *bbox); double PolygonReliefToPointDist(ZnPoint *points, int num_points, int line_width, ZnPoint *pp); void DrawRectangleRelief(struct _WidgetInfo *wi, ReliefStyle relief, ZnGradient *gradient, XRectangle *bbox, unsigned int line_width); void DrawPolygonRelief(struct _WidgetInfo *wi, ReliefStyle relief, ZnGradient *gradient, ZnPoint *points, int num_points, int line_width); #ifdef GLX void RenderPolygonRelief(struct _WidgetInfo *wi, ReliefStyle relief, ZnGradient *gradient, int alpha, ZnBool smooth, ZnPoint *points, int num_points, int line_width); void RenderPolyline(struct _WidgetInfo *wi, ZnPoint *points, int num_points, int line_width, ZnBool closed, LineStyle line_style, int cap_style, int join_style, ZnLineEnd first_end, ZnLineEnd last_end, ZnGradient *gradient); void ComputeAxialGradient(struct _WidgetInfo *wi, ZnPoly *shape, int angle, ZnPoint *grad_geo); void ComputeRadialGradient(struct _WidgetInfo *wi, ZnPoly *shape, ZnBBox *bbox, ZnPoint *center, ZnPoint *grad_geo); void RenderGradient(struct _WidgetInfo *wi, ZnGradient *gradient, void cb(void *), void *closure, ZnPoint *quad, ZnPoly *poly); void RenderTile(struct _WidgetInfo *wi, struct _ImageBits *tile, ZnGradient *gradient, void cb(void *), void *closure, ZnPoint *quad); void RenderImage(struct _WidgetInfo *wi, struct _ImageBits *image, ZnGradient *gradient, ZnPoint *origin, ZnBool modulate); void RenderHollowDot(struct _WidgetInfo *wi, ZnPoint *p, ZnReal size); #endif #ifdef GLX /* Copyright (c) Mark J. Kilgard, 1997. */ /* This program is freely distributable without licensing fees and is provided without guarantee or warrantee expressed or implied. This program is -not- in the public domain. */ #include typedef struct { unsigned short c; /* Potentially support 16-bit glyphs. */ unsigned char width; unsigned char height; signed char xoffset; signed char yoffset; signed char advance; char dummy; /* Space holder for alignment reasons. */ short x; short y; } TexGlyphInfo; typedef struct { GLfloat t0[2]; GLshort v0[2]; GLfloat t1[2]; GLshort v1[2]; GLfloat t2[2]; GLshort v2[2]; GLfloat t3[2]; GLshort v3[2]; GLfloat advance; } TexGlyphVertexInfo; typedef struct { GLuint texobj; int tex_width; int tex_height; int max_ascent; int max_descent; int num_glyphs; int min_glyph; int range; unsigned char *teximage; TexGlyphInfo *tgi; TexGlyphVertexInfo *tgvi; TexGlyphVertexInfo **lut; } TexFont; extern void txfRenderGlyph(TexFont */* txf */, int /* c */); extern void txfRenderString(TexFont */* txf */, unsigned char */* string */, int /* len */); extern void txfRenderFancyString(TexFont */* txf */, unsigned char */* string */, int /* len */); #endif #endif /* _Draw_h */