From d905f10595e3a52b97cd3cb79c26d22ff93ad144 Mon Sep 17 00:00:00 2001 From: Chuan Chen Date: Mon, 7 Aug 2017 16:22:11 -0400 Subject: [PATCH] Remote changes at Mon Aug 7 16:22:11 EDT 2017 by chuan on vivaldi --- graphics/grTCairo2.c | 229 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 229 insertions(+) create mode 100644 graphics/grTCairo2.c diff --git a/graphics/grTCairo2.c b/graphics/grTCairo2.c new file mode 100644 index 00000000..49b9c081 --- /dev/null +++ b/graphics/grTCairo2.c @@ -0,0 +1,229 @@ +/* grTOGL2.c - + * + * Copyright 2003 Open Circuit Design, Inc., for MultiGiG Ltd. + * + * This file contains additional functions to manipulate an X + * color display. Included here are rectangle drawing and color map + * loading. + */ + +#include +char *getenv(); + +#include +#include + +#include "tcltk/tclmagic.h" +#include "utils/magic.h" +#include "textio/textio.h" +#include "utils/geometry.h" +#include "graphics/glyphs.h" +#include "windows/windows.h" +#include "graphics/graphics.h" +#include "graphics/graphicsInt.h" +#include "grTOGLInt.h" + +extern char *DBWStyleType; +extern GLXContext grXcontext; +extern Display *grXdpy; + + +/*--------------------------------------------------------- + * GrOGLSetCMap -- + * + * OpenGL uses RGB values as read from the colormap file, + * directly, so there is no need to install colors into a + * colormap. Therefore, this is a null routine. + * + * Results: None. + * + * Side Effects: None. + * + *--------------------------------------------------------- + */ + +void +GrTOGLSetCMap () +{ +} + +Rect grtoglLines[TOGL_BATCH_SIZE]; +int grtoglNbLines = 0; +TOGLRect grtoglRects[TOGL_BATCH_SIZE]; +int grtoglNbRects = 0; +Rect grtoglDiagonal[TOGL_BATCH_SIZE]; +int grtoglNbDiagonal = 0; + +/*--------------------------------------------------------- + * grtoglDrawLines: + * This routine draws a batch of lines. + * + * Results: None. + * + * Side Effects: + * Draw a bunch of lines. + *--------------------------------------------------------- + */ + +void +grtoglDrawLines(lines, nb) + Rect lines[]; + int nb; +{ + +#ifdef OGL_SERVER_SIDE_ONLY + + int i; + + glBegin(GL_LINES); + for (i = 0; i < nb; i++) + { + glVertex2i(lines[i].r_ll.p_x, lines[i].r_ll.p_y); + glVertex2i(lines[i].r_ur.p_x, lines[i].r_ur.p_y); + } + glEnd(); + +#else + + glVertexPointer(2, GL_INT, 0, (GLvoid *)lines); + glDrawArrays(GL_LINES, 0, nb << 1); + +#endif +} + +/*--------------------------------------------------------- + * grtoglDrawLine: + * This routine draws a line. + * + * Results: None. + * + * Side Effects: + * Draw a line for (x1, y1) to (x2, y2) inclusive. + *--------------------------------------------------------- + */ + +void +grtoglDrawLine (x1, y1, x2, y2) + int x1, y1; /* Screen coordinates of first point. */ + int x2, y2; /* Screen coordinates of second point. */ +{ + /* Treat straight and diagonal lines separately. Some */ + /* implementations of OpenGL make straight lines twice as thick */ + /* when smoothing is enabled. */ + + if ((x1 == x2) || (y1 == y2)) + { + if (grtoglNbLines == TOGL_BATCH_SIZE) GR_TOGL_FLUSH_LINES(); + grtoglLines[grtoglNbLines].r_ll.p_x = x1; + grtoglLines[grtoglNbLines].r_ll.p_y = y1; + grtoglLines[grtoglNbLines].r_ur.p_x = x2; + grtoglLines[grtoglNbLines].r_ur.p_y = y2; + grtoglNbLines++; + } + else + { + if (grtoglNbDiagonal == TOGL_BATCH_SIZE) GR_TOGL_FLUSH_DIAGONAL(); + grtoglDiagonal[grtoglNbDiagonal].r_ll.p_x = x1; + grtoglDiagonal[grtoglNbDiagonal].r_ll.p_y = y1; + grtoglDiagonal[grtoglNbDiagonal].r_ur.p_x = x2; + grtoglDiagonal[grtoglNbDiagonal].r_ur.p_y = y2; + grtoglNbDiagonal++; + } +} + +/*--------------------------------------------------------- + * grtoglFillRects: + * This routine draws a bunch of solid rectangles. + * + * Results: None. + * + * Side Effects: + * Drawing. + *--------------------------------------------------------- + */ + +void +grtoglFillRects(rects, nb) + TOGLRect rects[]; + int nb; +{ + +#ifdef OGL_SERVER_SIDE_ONLY + + int i; + + for (i = 0; i < nb; i++) + { + glRecti(rects[i].r_ll.p_x, rects[i].r_ll.p_y, + rects[i].r_ur.p_x, rects[i].r_ur.p_y); + } + +#else + + glVertexPointer(2, GL_INT, 0, (GLvoid *)rects); + glDrawArrays(GL_QUADS, 0, nb << 2); + +#endif +} + +/*--------------------------------------------------------- + * grtoglFillRect: + * This routine draws a solid rectangle. + * + * Results: None. + * + * Side Effects: + * Drawing. + *--------------------------------------------------------- + */ + +void +grtoglFillRect(r) + Rect *r; /* Address of a rectangle in screen + * coordinates. + */ +{ + if (grtoglNbRects == TOGL_BATCH_SIZE) GR_TOGL_FLUSH_RECTS(); + grtoglRects[grtoglNbRects].r_ll.p_x = r->r_ll.p_x; + grtoglRects[grtoglNbRects].r_ll.p_y = r->r_ll.p_y; + + grtoglRects[grtoglNbRects].r_ur.p_x = r->r_ur.p_x; + grtoglRects[grtoglNbRects].r_ur.p_y = r->r_ur.p_y; + +#ifndef OGL_SERVER_SIDE_ONLY + grtoglRects[grtoglNbRects].r_ul.p_x = r->r_ll.p_x; + grtoglRects[grtoglNbRects].r_ul.p_y = r->r_ur.p_y; + + grtoglRects[grtoglNbRects].r_lr.p_x = r->r_ur.p_x; + grtoglRects[grtoglNbRects].r_lr.p_y = r->r_ll.p_y; +#endif + + grtoglNbRects++; +} + +/*--------------------------------------------------------- + * grtoglFillPolygon: + * This routine draws a solid (convex) polygon + * + * Results: None. + * + * Side Effects: + * Drawing. + *--------------------------------------------------------- + */ + +void +grtoglFillPolygon(tp, np) + Point *tp; + int np; +{ + int i; + + glEnable(GL_POLYGON_SMOOTH); + glBegin(GL_POLYGON); + for (i = 0; i < np; i++) + glVertex2i(tp[i].p_x, tp[i].p_y); + glEnd(); + glDisable(GL_POLYGON_SMOOTH); +} +