kearns@elrond.CalComp.COM (Arlene S. Kearns) (02/24/88)
I am using a Sun 3/160 with the release MIT version of X11V1.
Wide Lines and Dashed Lines do not work with a color frame buffer but do
with a monochrome frame buffer.
Also Stipples of size less than 32x32 do not work with a color frame buffer
but do with a monochrome frame buffer. The image on the displayed
is correct where the 16x16 box falls but it is rounded up to 32 in the x
direction. Tile of this size work fine.
Attached are the two programs, the first tests the lines and the second
tests stipples.
**************************************************************************
********************************lines*************************************
**************************************************************************
#include <stdio.h>
#include <math.h>
#include <strings.h>
#include <signal.h>
#include <X11/Xlib.h>
#include <X11/Xatom.h>
#include <X11/Xutil.h>
#include <sys/time.h>
extern char *getenv();
/* objects */
Display *dpy;
Window theWindow,theInputWindow;
Window theNextWindow;
#define WIDTH 512
#define HEIGHT 512
#define BORDER 1
XEvent event;
XSetWindowAttributes xswa;
XGCValues xgcv;
GContext gc;
Visual visual;
Colormap colors;
XColor xcsd, xced;
/**************/
main(argc, argv)
int argc;
char *argv[];
/**************/
{
int x,y;
int height,width,border;
int offset;
int ForeColor,BackColor,Color;
char *display = NULL;
char *p; /* get environment variable */
/*****************************************************/
/* Open up the display. */
if ((dpy = XOpenDisplay(display)) == NULL) {
fprintf(stderr, "%s: Can't open display '%s'\n",argv[0], display);
exit(1);
}
/* Open the main window output. */
x = 0;
y = 0;
width = WIDTH;
height = HEIGHT;
border = BORDER;
xswa.background_pixel = BlackPixel(dpy, DefaultScreen(dpy)); /* */
xswa.border_pixel = WhitePixel(dpy, DefaultScreen(dpy));
xswa.event_mask = ExposureMask | ButtonPressMask; /* see what you get */
visual.visualid = CopyFromParent;
theWindow = XCreateWindow(dpy, RootWindow(dpy, DefaultScreen(dpy)),
x, y, width, height, border,
CopyFromParent, InputOutput, &visual,
CWEventMask | CWBackPixel | CWBorderPixel,
&xswa );
xgcv.function = GXcopy;
xgcv.foreground = WhitePixel(dpy, DefaultScreen(dpy));
xgcv.line_style = LineSolid;
xgcv.line_width = 0;
gc = (GContext)XCreateGC(dpy, theWindow, GCFunction|GCLineStyle|GCLineWidth|GCForeground, &xgcv);
XMapWindow(dpy, theWindow);
/**************** Main loop *****************/
while (1) {
XNextEvent(dpy, &event);
switch (event.type) {
case ButtonPress:
switch( event.xbutton.button ) {
case Button1:
xgcv.line_width = 0;
printf(" line_width %d \n",xgcv.line_width);
XChangeGC(dpy, gc, GCLineWidth, &xgcv);
break;
case Button2:
xgcv.line_width++;
printf(" line_width %d \n",xgcv.line_width);
XChangeGC(dpy, gc, GCLineWidth, &xgcv);
break;
case Button3:
xgcv.line_width--;
printf(" line_width %d \n",xgcv.line_width);
XChangeGC(dpy, gc, GCLineWidth, &xgcv);
break;
}
XClearWindow( dpy, theWindow );
XDrawLine( dpy, theWindow, gc, x, y, width, height );
XDrawLine( dpy, theWindow, gc, x, height, width, y );
XDrawLine( dpy, theWindow, gc, x, height/2, width, height/2 );
XDrawLine( dpy, theWindow, gc, width/2, y, width/2, height );
break;
case Expose:
XDrawLine( dpy, theWindow, gc, x, y, width, height );
XDrawLine( dpy, theWindow, gc, x, height, width, y );
XDrawLine( dpy, theWindow, gc, x, height/2, width, height/2 );
XDrawLine( dpy, theWindow, gc, width/2, y, width/2, height );
break;
default:
break;
} /* end of switch */
} /* end while loop */
}
/***********************************/
**************************************************************************
******************************stipple*************************************
**************************************************************************
/*
*/
#include <stdio.h>
#include <math.h>
#include <strings.h>
#include <signal.h>
#include <X11/Xlib.h>
#include <X11/Xatom.h>
#include <X11/Xutil.h>
#include <sys/time.h>
#include <Xmacro.h>
extern char *getenv();
/* objects */
Display *dpy;
Window theWindow,theInputWindow;
Pixmap pix;
#define WIDTH 512
#define HEIGHT 512
#define BORDER 1
XEvent event;
XSetWindowAttributes xswa;
XGCValues xgcv;
GC gc,gc2;
Visual visual;
Colormap colors;
XColor xcsd, xced;
/**************/
main(argc, argv)
int argc;
char *argv[];
/**************/
{
int x,y;
int height,width,border;
int offset;
int ForeColor,BackColor,Color;
char *display = NULL;
int XDEBUG;
char *p; /* get environment variable */
/*****************************************************/
p = getenv("XDEBUG");
if(p)
sscanf(p, "%x", &XDEBUG );
else
XDEBUG = 0;
/* Open up the display. */
if ((dpy = XOpenDisplay(display)) == NULL) {
fprintf(stderr, "%s: Can't open display '%s'\n",argv[0], display);
exit(1);
}
XPrintDisplayInfo(dpy,0);
/* Open the main window output. */
x = 0;
y = 0;
width = WIDTH;
height = HEIGHT;
border = BORDER;
colors = DefaultColormap(dpy, DefaultScreen(dpy));
XAllocNamedColor(dpy, colors, "red",&xcsd, &xced);
Color = xcsd.pixel;
printf("color %d \n",Color);
pix = XCreatePixmap(dpy, RootWindow(dpy, DefaultScreen(dpy)), 16, 16, 1 );
xgcv.function = GXxor;
xgcv.background = WhitePixel(dpy, DefaultScreen(dpy)); /* */
xgcv.foreground = BlackPixel(dpy, DefaultScreen(dpy));
printf("color %d \n",xgcv.foreground);
printf("color %d \n",xgcv.background);
xgcv.line_style = FillSolid;
gc = XCreateGC(dpy, pix, GCFunction|GCLineStyle|GCForeground|GCBackground, &xgcv);
XFillRectangle(dpy, pix, gc, 0, 0, 16, 16 );
XFillArc(dpy, pix, gc, 0, 0, 16, 16, 0, 360*64 );
XFreeGC( dpy, gc );
xswa.background_pixel = BlackPixel(dpy, DefaultScreen(dpy)); /* */
xswa.border_pixel = WhitePixel(dpy, DefaultScreen(dpy));
xswa.event_mask = ExposureMask|ButtonPressMask;
visual.visualid = CopyFromParent;
theWindow = XCreateWindow(dpy, RootWindow(dpy, DefaultScreen(dpy)),
x, y, width, height, border,
CopyFromParent, InputOutput, &visual,
CWBackPixel | CWBorderPixel | CWEventMask,
&xswa );
xgcv.function = GXxor /*GXor*/;
xgcv.foreground = Color; /*color*/
xgcv.background = BlackPixel(dpy, DefaultScreen(dpy));
xgcv.stipple = pix; /*color*/
xgcv.fill_style = FillStippled;
xgcv.ts_x_origin = 0;
xgcv.ts_y_origin = 0;
gc = XCreateGC(dpy, RootWindow(dpy, DefaultScreen(dpy)),
GCFunction|GCForeground|GCBackground|GCStipple|GCFillStyle|GCTileStipXOrigin|GCTileStipYOrigin, &xgcv);
gc2 = XCreateGC(dpy, RootWindow(dpy, DefaultScreen(dpy)),
GCFunction|GCForeground|GCBackground, &xgcv);
XMapWindow(dpy, theWindow);
/**************** Main loop *****************/
while (1) {
XNextEvent(dpy, &event);
XPrintEventType(event);
XClearWindow(dpy, theWindow );
XFillRectangle(dpy, theWindow, gc2, WIDTH/4, 0, WIDTH/2, HEIGHT );
sleep(1);
XClearWindow(dpy, theWindow );
XFillRectangle(dpy, theWindow, gc, 0, 0, WIDTH/2, HEIGHT );
} /* end while loop */
}
/***********************************/