summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--xlib/xgc.c193
1 files changed, 190 insertions, 3 deletions
diff --git a/xlib/xgc.c b/xlib/xgc.c
index 6dea7be..d50acea 100644
--- a/xlib/xgc.c
+++ b/xlib/xgc.c
@@ -9,7 +9,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * RCS: @(#) $Id: xgc.c,v 1.3 1999/04/16 01:51:55 stanton Exp $
+ * RCS: @(#) $Id: xgc.c,v 1.4 1999/12/14 06:55:39 hobbs Exp $
*/
#include <tkInt.h>
@@ -46,7 +46,15 @@ XCreateGC(display, d, mask, values)
{
GC gp;
- gp = (XGCValues *)ckalloc(sizeof(XGCValues));
+/*
+ * In order to have room for a dash list, MAX_DASH_LIST_SIZE extra chars are
+ * defined, which is invisible from the outside. The list is assumed to end
+ * with a 0-char, so this must be set explicitely during initialization.
+ */
+
+#define MAX_DASH_LIST_SIZE 10
+
+ gp = (XGCValues *)ckalloc(sizeof(XGCValues) + MAX_DASH_LIST_SIZE);
if (!gp) {
return None;
}
@@ -73,6 +81,7 @@ XCreateGC(display, d, mask, values)
gp->clip_y_origin = (mask & GCClipYOrigin) ?values->clip_y_origin :0;
gp->dash_offset = (mask & GCDashOffset) ?values->dash_offset :0;
gp->dashes = (mask & GCDashList) ?values->dashes :4;
+ (&(gp->dashes))[1] = 0;
if (mask & GCClipMask) {
gp->clip_mask = (Pixmap)ckalloc(sizeof(TkpClipMask));
@@ -131,7 +140,7 @@ XChangeGC(d, gc, mask, values)
if (mask & GCClipYOrigin) { gc->clip_y_origin = values->clip_y_origin; }
if (mask & GCClipMask) { XSetClipMask(d, gc, values->clip_mask); }
if (mask & GCDashOffset) { gc->dash_offset = values->dash_offset; }
- if (mask & GCDashList) { gc->dashes = values->dashes; }
+ if (mask & GCDashList) { gc->dashes = values->dashes; (&(gc->dashes))[1] = 0;}
}
/*
@@ -198,6 +207,30 @@ XSetBackground(display, gc, background)
}
void
+XSetDashes(display, gc, dash_offset, dash_list, n)
+ Display* display;
+ GC gc;
+ int dash_offset;
+ _Xconst char* dash_list;
+ int n;
+{
+ char *p = &(gc->dashes);
+
+#ifdef TkWinDeleteBrush
+ TkWinDeleteBrush(gc->fgBrush);
+ TkWinDeletePen(gc->fgPen);
+ TkWinDeleteBrush(gc->bgBrush);
+ TkWinDeletePen(gc->fgExtPen);
+#endif
+ gc->dash_offset = dash_offset;
+ if (n > MAX_DASH_LIST_SIZE) n = MAX_DASH_LIST_SIZE;
+ while (n-- > 0) {
+ *p++ = *dash_list++;
+ }
+ *p = 0;
+}
+
+void
XSetFunction(display, gc, function)
Display *display;
GC gc;
@@ -350,3 +383,157 @@ XSetClipMask(display, gc, pixmap)
((TkpClipMask*)gc->clip_mask)->type = TKP_CLIP_PIXMAP;
((TkpClipMask*)gc->clip_mask)->value.pixmap = pixmap;
}
+
+/*
+ * Some additional dummy functions (hopefully implemented soon).
+ */
+
+Cursor
+XCreateFontCursor(display, shape)
+ Display* display;
+ unsigned int shape;
+{
+ return (Cursor) 0;
+}
+
+void
+XDrawImageString(display, d, gc, x, y, string, length)
+ Display* display;
+ Drawable d;
+ GC gc;
+ int x;
+ int y;
+ _Xconst char* string;
+ int length;
+{
+}
+
+void
+XDrawPoint(display, d, gc, x, y)
+ Display* display;
+ Drawable d;
+ GC gc;
+ int x;
+ int y;
+{
+ XDrawLine(display, d, gc, x, y, x, y);
+}
+
+void
+XDrawPoints(display, d, gc, points, npoints, mode)
+ Display* display;
+ Drawable d;
+ GC gc;
+ XPoint* points;
+ int npoints;
+ int mode;
+{
+ int i;
+
+ for (i=0; i<npoints; i++) {
+ XDrawPoint(display, d, gc, points[i].x, points[i].y);
+ }
+}
+
+void
+XDrawSegments(display, d, gc, segments, nsegments)
+ Display* display;
+ Drawable d;
+ GC gc;
+ XSegment* segments;
+ int nsegments;
+{
+}
+
+char *
+XFetchBuffer(display, nbytes_return, buffer)
+ Display* display;
+ int* nbytes_return;
+ int buffer;
+{
+ return (char *) 0;
+}
+
+Status XFetchName(display, w, window_name_return)
+ Display* display;
+ Window w;
+ char** window_name_return;
+{
+ return (Status) 0;
+}
+
+Atom *XListProperties(display, w, num_prop_return)
+ Display* display;
+ Window w;
+ int* num_prop_return;
+{
+ return (Atom *) 0;
+}
+
+void
+XMapRaised(display, w)
+ Display* display;
+ Window w;
+{
+}
+
+void
+XPutImage(display, d, gc, image, src_x, src_y, dest_x, dest_y, width, height)
+ Display* display;
+ Drawable d;
+ GC gc;
+ XImage* image;
+ int src_x;
+ int src_y;
+ int dest_x;
+ int dest_y;
+ unsigned int width;
+ unsigned int height;
+{
+}
+
+void XQueryTextExtents(display, font_ID, string, nchars, direction_return,
+ font_ascent_return, font_descent_return, overall_return)
+ Display* display;
+ XID font_ID;
+ _Xconst char* string;
+ int nchars;
+ int* direction_return;
+ int* font_ascent_return;
+ int* font_descent_return;
+ XCharStruct* overall_return;
+{
+}
+
+void
+XReparentWindow(display, w, parent, x, y)
+ Display* display;
+ Window w;
+ Window parent;
+ int x;
+ int y;
+{
+}
+
+void
+XRotateBuffers(display, rotate)
+ Display* display;
+ int rotate;
+{
+}
+
+void
+XStoreBuffer(display, bytes, nbytes, buffer)
+ Display* display;
+ _Xconst char* bytes;
+ int nbytes;
+ int buffer;
+{
+}
+
+void
+XUndefineCursor(display, w)
+ Display* display;
+ Window w;
+{
+}