0% found this document useful (0 votes)
116 views7 pages

X Window

The document describes an X lib programming example that draws points on an X window. It opens a connection to an X server, creates a root window and drawing window, obtains color values, and sets up event handling to draw points in response to button presses or clear the window on expose events. When a key is pressed, the program exits. Similar examples are provided for drawing circles by filling arcs, and lines by connecting points on odd clicks and drawing lines between points on even clicks.

Uploaded by

bernasek
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
116 views7 pages

X Window

The document describes an X lib programming example that draws points on an X window. It opens a connection to an X server, creates a root window and drawing window, obtains color values, and sets up event handling to draw points in response to button presses or clear the window on expose events. When a key is pressed, the program exits. Similar examples are provided for drawing circles by filling arcs, and lines by connecting points on odd clicks and drawing lines between points on even clicks.

Uploaded by

bernasek
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 7

X lib Programming (lecture programs) X server: Controls the Input/Output Resources of a host: Display, Keyboard and Mouse.

. X clients: Applications that runs at any host in the Internet: May be different from the X server's host. TCP/IP: is used for communications between the clients and the server: The default port# for the X server is 6000.

______________________________________________ Examples of X lib Programs Drawing Points: xpoints.c

main(argc,argv) int argc; char **argv; { Display *display; Window root, window;

long fgcolor, bgcolor; int screen, pointx, pointy; long eventmask = ButtonPressMask | ExposureMask | KeyPressMask; XEvent event; XGCValues gcval; GC draw; Colormap cmap; XColor color, ignore; char *colorname = "red"; The above are definitions that will be used throughout the program. ________________________________ if (!(display = XOpenDisplay (argv[1]))) { perror("XOpenDisplay"); exit(1); } Opens a TCP connection to an X server running at the host specified by argv[1]. If argv[1] is NULL, it contacts the server running at the local machine. The format for argv[1] is: host:0

Examples: 128.82.4.67:0 isis.cs.odu.edu:0 localhost:0 (same as NULL). _________________________________ root = RootWindow (display, screen = DefaultScreen(display)); Creates a root window. In X every window must have a parent and this is the parent of all other windows. _________________________________ fgcolor = bgcolor = BlackPixel (display,screen); WhitePixel (display,screen);

Obtains the pixel values for the black and white colors.

_________________________________ window = XCreateSimpleWindow (display, root, 0,0, 200,200, 2, fgcolor, bgcolor); Creates the application main window on dispaly as child for root at position 0,0. The window size is 200x200 with border of 2 pixels. The window's foreground color is black and its background color is white. _________________________________ char *colorname = "red"; cmap = DefaultColormap (display, screen); XAllocNamedColor (display, cmap, colorname, &color, &ignore); fgcolor = color.pixel; gcval.foreground = fgcolor; gcval.background = bgcolor; draw = XCreateGC (display,window,GCForeground|GCBackground,&gcval) ; The above statements are used to create a "red" pen called draw _________________________________ XSelectInput (display, window, eventmask); Ask the server to report the events specified by eventmask _________________________________ XMapWindow (display,window); Make the window visible on the screen. _________________________________ The following loop monitors and process the events sent by the X server

for (;;) { XWindowEvent (display, window, eventmask, &event); This is a "blocking" call, i.e., the program will stop here until an event arrives from the X server. _________________________________

switch (event.type) { case Expose: XClearWindow (display,window); break; Whenever an Expose event arrives, the window is cleared, An expose event can be generated by e.g., covering and uncovering the window, closing and opening the window. _________________________________ case ButtonPress: XDrawPoint (display, window, draw, event.xbutton.x ,event.xbutton.y); break; Whenever any button is pressed a red point is drawn at the x,y position where the event occurred. _________________________________ case KeyPress: exit(0); Whenever any Key is pressed the program exits. default: fprintf(stderr,"Unexpected event: %d\n",event.type); Any other event is unexpected and should not happen.

___________________________________________ Drawing Circles

The program xcircles.c is similar to xpoints.c but it draws filled circles. Here is the code that achieve that: .... int radious = 6; ..... case ButtonPress: pointx = event.xbutton.x - radious; pointy = event.xbutton.y - radious; XFillArc(display, window, draw, pointx, pointy, 2*radious, 2*radious,0, 360*64); break; ________________________________________ Drawing Lines

The program xlines.c is similar to xpoints.c but it draws lines. The user odd clicks (1, 3, ...) draws a point while the even clicks (2, 4, ...) draws lines between the current position and the previous position of the mouse. Here is the code that achieve that:

case ButtonPress: if (FirstPt) { FirstPt=FALSE; pointx = event.xbutton.x; pointy = event.xbutton.y; XDrawPoint (display,window,draw, pointx, pointy); break;

} else { FirstPt=TRUE; XDrawLine (display,window,draw, pointx,pointy, event.xbutton.x, event.xbutton.y); break; Odd clicks draws a point while even clicks draws a line between the previous mouse position and the current position.

You might also like