[Xcb-commit] tutorial

XCB site xcb at freedesktop.org
Sat Sep 8 10:42:45 PDT 2012


 tutorial/mousecursors.mdwn |  509 +++++++++++++++++++++------------------------
 1 file changed, 242 insertions(+), 267 deletions(-)

New commits:
commit 7641419dbbe6ea3a998b4ce376fa72f71e1c2243
Author: SurferRosa <SurferRosa at web>
Date:   Sat Sep 8 10:42:44 2012 -0700

    Fixed a few typos in the complete example. Now it is compileable (gcc -std=c99 -lxcb main.c).

diff --git a/tutorial/mousecursors.mdwn b/tutorial/mousecursors.mdwn
index 5b63550..c49041f 100644
--- a/tutorial/mousecursors.mdwn
+++ b/tutorial/mousecursors.mdwn
@@ -72,210 +72,191 @@ The following example displays a window with a button. When entering the window,
 
 		#include <xcb/xcb.h>
 
-		#define WIDTH 300
-		#define HEIGHT 150
+		#define WIDTH 300 
+		#define HEIGHT 150 
 
+		static void testCookie(xcb_void_cookie_t, xcb_connection_t*, char *); 
+		static void drawButton(xcb_connection_t*, xcb_screen_t*, xcb_window_t, int16_t, int16_t, const char*);
+		static void drawText(xcb_connection_t*, xcb_screen_t*, xcb_window_t, int16_t, int16_t, const char*);
+		static xcb_gc_t getFontGC(xcb_connection_t*, xcb_screen_t*, xcb_window_t, const char*);
+		static void setCursor (xcb_connection_t*, xcb_screen_t*, xcb_window_t, int);
 
-		/* ...assume prototypes for function defs below here... */
-
-		
-		/*
-		*/
+		/*  
+		*/  
 		static void
 		testCookie (xcb_void_cookie_t cookie,
-					xcb_connection_t *connection,
-					char *errMessage )
-		{
-			xcb_generic_error_t *error = xcb_request_check (connection, cookie);
-			if (error) {
-				fprintf (stderr, "ERROR: %s : %d\n", errMessage , error->error_code);
-				xcb_disconnect (connection);
-				exit (-1);
-			}
-		}
-		
+		            xcb_connection_t *connection,
+		            char *errMessage )
+		{   
+		    xcb_generic_error_t *error = xcb_request_check (connection, cookie);
+		    if (error) {
+		        fprintf (stderr, "ERROR: %s : %d\n", errMessage , error->error_code);
+		        xcb_disconnect (connection);
+		        exit (-1);
+		    }   
+		}   
 
-		/*
-		*/
+		/*  
+		*/  
 		static void
 		drawButton (xcb_connection_t *connection,
-					xcb_screen_t     *screen,
-					xcb_window_t      window,
-					int16_t           x1,
-					int16_t           y1,
-					const char       *label )
-		{
-			uint8_t length = strlen (label);
-			int16_t inset = 2;
-			int16_t width = 7 * length + 2 * (inset + 1);
-			int16_t height = 13 + 2 * (inset + 1);
-
-			xcb_point_t points[5];
-			points[0].x = x1;
-			points[0].y = y1;
-			points[1].x = x1 + width;
-			points[1].y = y1;
-			points[2].x = x1 + width;
-			points[2].y = y1 - height;
-			points[3].x = x1;
-			points[3].y = y1 - height;
-			points[4].x = x1;
-			points[4].y = y1;
-			
-			
-			xcb_gcontext_t gc = getFontGC (connection, screen, window, "7x13");
-
-
-			xcb_void_cookie_t lineCookie = xcb_poly_line_checked (connection,
-																  XCB_COORD_MODE_ORIGIN,
-																  window,
-																  gc,
-																  5,
-																  points );
-			testCookie (lineCookie, connection, "can't draw lines");
-
-
-			xcb_void_cookie_t textCookie = xcb_image_text_8_checked (connection,
-																	 length,
-																	 window,
-																	 gc,
-																	 x1 + inset + 1,
-																	 y1 - inset - 1,
-																	 label );
-			testCookie (textCookie, connection, "can't paste text");
-
-
-			gcCookie = xcb_free_gc (connection, gc);
-			testCookie (gcCookie, connection, "can't free gc");
+		            xcb_screen_t     *screen,
+		            xcb_window_t      window,
+		            int16_t           x1, 
+		            int16_t           y1, 
+		            const char       *label )
+		{   
+		    uint8_t length = strlen (label);
+		    int16_t inset = 2;
+		    int16_t width = 7 * length + 2 * (inset + 1); 
+		    int16_t height = 13 + 2 * (inset + 1); 
+
+		    xcb_point_t points[5];
+		    points[0].x = x1; 
+		    points[0].y = y1; 
+		    points[1].x = x1 + width;
+		    points[1].y = y1; 
+		    points[2].x = x1 + width;
+		    points[2].y = y1 - height;
+		    points[3].x = x1; 
+		    points[3].y = y1 - height;
+		    points[4].x = x1; 
+		    points[4].y = y1; 
+
+		    xcb_gcontext_t gc = getFontGC (connection, screen, window, "7x13");
+		    xcb_void_cookie_t lineCookie = xcb_poly_line_checked (connection,
+		                                                          XCB_COORD_MODE_ORIGIN,
+		                                                          window,
+		                                                          gc,
+		                                                          5,
+		                                                          points );
+		    testCookie (lineCookie, connection, "can't draw lines");
+
+		    xcb_void_cookie_t textCookie = xcb_image_text_8_checked (connection,
+		                                                             length,
+		                                                             window,
+		                                                             gc,
+		                                                             x1 + inset + 1,
+		                                                             y1 - inset - 1,
+		                                                             label );
+		    testCookie (textCookie, connection, "can't paste text");
+
+		    xcb_void_cookie_t gcCookie = xcb_free_gc (connection, gc);
+		    testCookie (gcCookie, connection, "can't free gc");
 		}
-		
-		
+
 		/*
 		*/
 		static void
 		drawText (xcb_connection_t *connection,
-				  xcb_screen_t     *screen,
-				  xcb_window_t      window,
-				  int16_t           x1,
-				  int16_t           y1,
-				  const char       *label )
+		          xcb_screen_t     *screen,
+		          xcb_window_t      window,
+		          int16_t           x1,
+		          int16_t           y1,
+		          const char       *label )
 		{
 
-			xcb_gcontext_t gc = getFontGC (connection, screen, window, "7x13");
-			
-
-			xcb_void_cookie_t textCookie = xcb_image_text_8_checked (connection,
-																	 strlen (label),
-																	 window,
-																	 gc,
-																	 x1,
-																	 y1,
-																	 label );
-			testCookie(textCookie, connection, "can't paste text");
-
-
-			xcb_void_cookie_t gcCookie = xcb_free_gc (connection, gc);
-			testCookie (gcCookie, connection, "can't free gc");
+		    xcb_gcontext_t gc = getFontGC (connection, screen, window, "7x13");
+		    xcb_void_cookie_t textCookie = xcb_image_text_8_checked (connection,
+		                                                             strlen (label),
+		                                                             window,
+		                                                             gc,
+		                                                             x1,
+		                                                             y1,
+		                                                             label );
+		    testCookie(textCookie, connection, "can't paste text");
+
+		    xcb_void_cookie_t gcCookie = xcb_free_gc (connection, gc);
+		    testCookie (gcCookie, connection, "can't free gc");
 		}
 
-
 		/*
 		*/
 		static xcb_gc_t
 		getFontGC (xcb_connection_t *connection,
-				   xcb_screen_t     *screen,
-				   xcb_window_t      window,
-				   const char       *fontName )
+		           xcb_screen_t     *screen,
+		           xcb_window_t      window,
+		           const char       *fontName )
 		{
 
-			xcb_font_t font = xcb_generate_id (connection);
-			xcb_void_cookie_t fontCookie = xcb_open_font_checked (cookie,
-																  font,
-																  strlen (fontName),
-																  font_name );
-			testCookie (fontCookie, connection, "can't open font");
-
-			
-			xcb_gcontext_t gc = xcb_generate_id (c);
-			uint32_t  mask = XCB_GC_FOREGROUND | XCB_GC_BACKGROUND | XCB_GC_FONT;
-			uint32_t value_list[3];
-			value_list[0] = screen->black_pixel;
-			value_list[1] = screen->white_pixel;
-			value_list[2] = font;
-			
-			
-			xcb_void_cookie_t gcCookie = xcb_create_gc_checked (connection,
-																gc,
-																window,
-																mask,
-																value_list );
-			testCookie (gcCookie, connection, "can't create gc");
-
-
-			fontCookie = xcb_close_font_checked (connection, font);
-			testCookie (fontCookie, connection, "can't close font");
-
-			return gc;
+		    xcb_font_t font = xcb_generate_id (connection);
+		    xcb_void_cookie_t fontCookie = xcb_open_font_checked (connection,
+		                                                          font,
+		                                                          strlen (fontName),
+		                                                          fontName );
+		    testCookie (fontCookie, connection, "can't open font");
+
+		    xcb_gcontext_t gc = xcb_generate_id (connection);
+		    uint32_t  mask = XCB_GC_FOREGROUND | XCB_GC_BACKGROUND | XCB_GC_FONT;
+		    uint32_t value_list[3];
+		    value_list[0] = screen->black_pixel;
+		    value_list[1] = screen->white_pixel;
+		    value_list[2] = font;
+
+		    xcb_void_cookie_t gcCookie = xcb_create_gc_checked (connection,
+		                                                        gc,
+		                                                        window,
+		                                                        mask,
+		                                                        value_list );
+		    testCookie (gcCookie, connection, "can't create gc");
+
+		    fontCookie = xcb_close_font_checked (connection, font);
+		    testCookie (fontCookie, connection, "can't close font");
+
+		    return gc;
 		}
 
-
 		/*
 		*/
 		static void
 		setCursor (xcb_connection_t *connection,
-					xcb_screen_t     *screen,
-					xcb_window_t      window,
-					int               cursorId )
+		            xcb_screen_t     *screen,
+		            xcb_window_t      window,
+		            int               cursorId )
 		{
-			xcb_font_t font = xcb_generate_id (connection);
-			xcb_void_cookie_t fontCookie = xcb_open_font_checked (connection,
-																  font,
-																  strlen ("cursor"),
-																  "cursor" );
-			testCookie (fontCookie, connection, "can't open font");
-
-
-			xcb_cursor_t cursor = xcb_generate_id (connection);
-			xcb_create_glyph_cursor (connection,
-									 cursor,
-									 font,
-									 font,
-									 cursorId,
-									 cursorId + 1,
-									 0, 0, 0, 0, 0, 0 );
-
-
-			xcb_gcontext_t gc = xcb_generate_id (connection);
-
-			uint32_t mask = XCB_GC_FOREGROUND | XCB_GC_BACKGROUND | XCB_GC_FONT;
-			uint32_t values_list[3];
-			values_list[0] = screen->black_pixel;
-			values_list[1] = screen->white_pixel;
-			values_list[2] = font;
-
-			xcb_void_cookie_t gcCookie = xcb_create_gc_checked (connection, gc, window, mask, values_list);
-			testCookie (gcCookie, connection, "can't create gc");
-
-
-			uint32_t mask = XCB_CW_CURSOR;
-			uint32_t value_list = cursor;
-			xcb_change_window_attributes (connection, window, mask, &value_list);
-
-
-			xcb_free_cursor (connection, cursor);
-
-
-			fontCookie = xcb_close_font_checked (connection, font);
-			testCookie (fontCookie, connection, "can't close font");
+		    xcb_font_t font = xcb_generate_id (connection);
+		    xcb_void_cookie_t fontCookie = xcb_open_font_checked (connection,
+		                                                          font,
+		                                                          strlen ("cursor"),
+		                                                          "cursor" );
+		    testCookie (fontCookie, connection, "can't open font");
+
+		    xcb_cursor_t cursor = xcb_generate_id (connection);
+		    xcb_create_glyph_cursor (connection,
+		                             cursor,
+		                             font,
+		                             font,
+		                             cursorId,
+		                             cursorId + 1,
+		                             0, 0, 0, 0, 0, 0 );
+
+		    xcb_gcontext_t gc = xcb_generate_id (connection);
+
+		    uint32_t mask = XCB_GC_FOREGROUND | XCB_GC_BACKGROUND | XCB_GC_FONT;
+		    uint32_t values_list[3];
+		    values_list[0] = screen->black_pixel;
+		    values_list[1] = screen->white_pixel;
+		    values_list[2] = font;
+
+		    xcb_void_cookie_t gcCookie = xcb_create_gc_checked (connection, gc, window, mask, values_list);
+		    testCookie (gcCookie, connection, "can't create gc");
+
+		    mask = XCB_CW_CURSOR;
+		    uint32_t value_list = cursor;
+		    xcb_change_window_attributes (connection, window, mask, &value_list);
+
+		    xcb_free_cursor (connection, cursor);
+
+		    fontCookie = xcb_close_font_checked (connection, font);
+		    testCookie (fontCookie, connection, "can't close font");
 		}
 
 		/*
 		*/
-		int 
+		int
 		main ()
 		{
-			/* get the connection */
-
+		    /* get the connection */
 		    int screenNum;
 		    xcb_connection_t *connection = xcb_connect (NULL, &screenNum);
 		    if (!connection) {
@@ -283,7 +264,6 @@ The following example displays a window with a button. When entering the window,
 		        return -1;
 		    }
 
-
 		    /* get the current screen */
 
 		    xcb_screen_iterator_t iter = xcb_setup_roots_iterator (xcb_get_setup (connection));
@@ -300,101 +280,96 @@ The following example displays a window with a button. When entering the window,
 		        xcb_disconnect (connection);
 		        return -1;
 		    }
-		    
-
-			/* create the window */
-			
-			xcb_window_t window = xcb_generate_id (connection);
-			uint32_t mask = XCB_CW_BACK_PIXEL | XCB_CW_EVENT_MASK;
-			uint32_t values[2];
-			values[0] = screen->white_pixel;
-			values[1] = XCB_EVENT_MASK_KEY_RELEASE |
-						XCB_EVENT_MASK_BUTTON_PRESS |
-						XCB_EVENT_MASK_EXPOSURE |
-						XCB_EVENT_MASK_POINTER_MOTION;
-			
-			
-			windowCookie = xcb_create_window_checked (connection,
-													  screen->root_depth,
-													  window,
-													  screen->root,
-													  20, 200, WIDTH, HEIGHT,
-													  0,
-													  XCB_WINDOW_CLASS_INPUT_OUTPUT,
-													  screen->root_visual,
-													  mask, values );
-			testCookie (windowCookie, connection, "can't create window");
-			
-			
-			mapCookie = xcb_map_window_checked (connection, window);
-			testCookie (mapCookie, connection, "can't map window");
-
-
-			setCursor (connection, screen, window, 68);
-
-			xcb_flush(connection);
-			
-			
-			/* event loop */
-			
-			uint8_t isHand = 0;
-			
-			while (1) {
-				xcb_generic_event_t *event = xcb_poll_for_event (connection);
-				if (event) {
-					switch (event->response_type & ~0x80) {
-						case XCB_EXPOSE: {
-							char *text = "click here to change cursor";
-							drawButton (connection, 
-										screen,
-										window,
-										(WIDTH - 7 * strlen(text)) / 2,
-										(HEIGHT - 16) / 2,
-										text );
-
-							text = "Press ESC key to exit...";
-							drawText (connection,
-									  screen,
-									  window,
-									  10,
-									  HEIGHT - 10,
-									  text );
-							break;
-						}
-						case XCB_BUTTON_PRESS: {
-							xcb_button_press_event_t *press = (xcb_button_press_event_t *)event;
-							
-							int length = strlen ("click here to change cursor");
-							if ((press->event_x >= (WIDTH - 7 * length) / 2) &&
-									(press->event_x <= ((WIDTH - 7 * length) / 2 + 7 * length + 6)) &&
-									(press->event_y >= (HEIGHT - 16) / 2 - 19) &&
-									(press->event_y <= ((HEIGHT - 16) / 2))) {
-								is_hand = 1 - is_hand;
-							}
-
-							if (isHand) {
-								cursor_set (connection, screen, window, 58)
-							}
-							else {
-								cursor_set (connection, screen, window, 68);
-							}
-						}
-						case XCB_KEY_RELEASE: {
-							xcb_key_release_event_t *kr = (xcb_key_release_event_t *)event;
-
-							switch (kr->detail) {
-								/* ESC */
-								case 9:
-									free (event);
-									xcb_disconnect (connection);
-									return 0;
-							}
-						}
-					}
-					free (event);
-				}
-			}
-
-			return 0;
-		}
 
+
+		    /* create the window */
+
+		    xcb_window_t window = xcb_generate_id (connection);
+		    uint32_t mask = XCB_CW_BACK_PIXEL | XCB_CW_EVENT_MASK;
+		    uint32_t values[2];
+		    values[0] = screen->white_pixel;
+		    values[1] = XCB_EVENT_MASK_KEY_RELEASE |
+		                XCB_EVENT_MASK_BUTTON_PRESS |
+		                XCB_EVENT_MASK_EXPOSURE |
+		                XCB_EVENT_MASK_POINTER_MOTION;
+
+		    xcb_void_cookie_t windowCookie = xcb_create_window_checked (connection,
+		                                                                screen->root_depth,
+		                                                                window,
+		                                                                screen->root,
+		                                                                20, 200, WIDTH, HEIGHT,
+		                                                                0,
+		                                                                XCB_WINDOW_CLASS_INPUT_OUTPUT,
+		                                                                screen->root_visual,
+		                                                                mask, values );
+		    testCookie (windowCookie, connection, "can't create window");
+
+		    xcb_void_cookie_t mapCookie = xcb_map_window_checked (connection, window);
+		    testCookie (mapCookie, connection, "can't map window");
+
+		    setCursor (connection, screen, window, 68);
+
+		    xcb_flush(connection);
+
+		    /* event loop */
+
+		    uint8_t isHand = 0;
+
+		    while (1) {
+		        xcb_generic_event_t *event = xcb_poll_for_event (connection);
+		        if (event) {
+		            switch (event->response_type & ~0x80) {
+		                case XCB_EXPOSE: {
+		                    char *text = "click here to change cursor";
+		                    drawButton (connection,
+		                                screen,
+		                                window,
+		                                (WIDTH - 7 * strlen(text)) / 2,
+		                                (HEIGHT - 16) / 2,
+		                                text );
+
+		                    text = "Press ESC key to exit...";
+		                    drawText (connection,
+		                              screen,
+		                              window,
+		                              10,
+		                              HEIGHT - 10,
+		                              text );
+		                    break;
+		                }
+		                case XCB_BUTTON_PRESS: {
+		                    xcb_button_press_event_t *press = (xcb_button_press_event_t *)event;
+
+		                    int length = strlen ("click here to change cursor");
+		                    if ((press->event_x >= (WIDTH - 7 * length) / 2) &&
+		                            (press->event_x <= ((WIDTH - 7 * length) / 2 + 7 * length + 6)) &&
+		                            (press->event_y >= (HEIGHT - 16) / 2 - 19) &&
+		                            (press->event_y <= ((HEIGHT - 16) / 2))) {
+		                        isHand = 1 - isHand;
+		                    }
+
+		                    if (isHand) {
+		                        setCursor (connection, screen, window, 58);
+		                    }
+		                    else {
+		                        setCursor (connection, screen, window, 68);
+		                    }
+		                }
+		                case XCB_KEY_RELEASE: {
+		                    xcb_key_release_event_t *kr = (xcb_key_release_event_t *)event;
+
+		                    switch (kr->detail) {
+		                        /* ESC */
+		                        case 9:
+		                            free (event);
+		                            xcb_disconnect (connection);
+		                            return 0;
+		                    }
+		                }
+		            }
+		            free (event);
+		        }
+		    }
+
+		    return 0;
+		}


More information about the xcb-commit mailing list