[Xcb] drawing a font
Vincent Torri
Vincent.Torri at iecn.u-nancy.fr
Mon Dec 6 01:16:52 PST 2004
I don't think it's needed, as i flush the buffer with XCBSync. Just test
the same program with drawing a point (it works for me, i've just tested).
regards
Vincent TORRI
On Mon, 6 Dec 2004, Jeremy Kolb wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> I think you need to handle the window's expose event. When that event
> is received you need to copy the buffer into the window.
>
> Jeremy
>
> Vincent Torri wrote:
> | Hello,
> |
> | Easy question: how to draw a string with xcb ?? i've spent quite a lot of
> | time trying to do that, without success.
> |
> | What i do is a bit like Xlib:
> |
> | * I query a font
> | * I assign the font to a GC
> | * I draw a string (in a pixmap) using this GC
> | * I copy the pixmap onto my window
> |
> | but, nothing is drawn. The code that i use is attached.
> |
> | Does someone see what is wrong ?
> |
> | Vincent TORRI
> |
> |
> | ------------------------------------------------------------------------
> |
> | /* gcc -O2 -Wall `pkg-config --cflags --libs xcb` -o xcb_test_font
> xcb_test_font.c */
> |
> | #include <stdio.h>
> | #include <stdlib.h>
> | #include <string.h>
> |
> | #include <X11/XCB/xcb.h>
> | #include <X11/XCB/xcbint.h>
> |
> | int
> | get_depth(XCBConnection *c,
> | XCBSCREEN *root)
> | {
> | XCBDRAWABLE drawable = { root->root };
> | XCBGetGeometryRep *geom;
> | geom = XCBGetGeometryReply(c, XCBGetGeometry(c, drawable), 0);
> | int depth;
> |
> | if(!geom)
> | {
> | perror("GetGeometry(root) failed");
> | exit (0);
> | }
> |
> | depth = geom->depth;
> | fprintf(stderr, "Root 0x%lx: %dx%dx%d\n",
> | root->root.xid, geom->width, geom->height, geom->depth);
> | free(geom);
> |
> | return depth;
> | }
> |
> | int
> | main (int argc, char *argv[])
> | {
> | XCBConnection *c;
> | XCBSCREEN *screen;
> | XCBDRAWABLE win;
> | CARD32 mask = 0;
> | CARD32 values[2];
> |
> | XCBGCONTEXT bgcolor, fgcolor;
> | XCBRECTANGLE rect = { 0, 0, 300, 300};
> | CARD32 valgc[2];
> | XCBDRAWABLE p;
> |
> | XCBGCONTEXT gcfont;
> | CARD32 valfont[1];
> | XCBFONTABLE fontable;
> | XCBQueryFontRep *fontrep;
> | char *fontname;
> | char *str = "toto";
> |
> | /* Open the connexion to the X server */
> | c = XCBConnectBasic ();
> |
> | /* Get the first screen */
> | screen = XCBConnSetupSuccessRepRootsIter (c->setup).data;
> |
> | win.window = screen->root;
> |
> | fgcolor = XCBGCONTEXTNew(c);
> | mask = GCForeground | GCGraphicsExposures;
> | valgc[0] = screen->black_pixel;
> | valgc[1] = 0; /* no graphics exposures */
> | XCBCreateGC(c, fgcolor, win, mask, valgc);
> |
> | bgcolor = XCBGCONTEXTNew(c);
> | mask = GCForeground | GCGraphicsExposures;
> | valgc[0] = screen->white_pixel;
> | valgc[1] = 0; /* no graphics exposures */
> | XCBCreateGC(c, bgcolor, win, mask, valgc);
> |
> | p.pixmap = XCBPIXMAPNew (c);
> | XCBCreatePixmap(c, get_depth (c, screen), p.pixmap, win, 300, 300);
> | XCBPolyFillRectangle(c, p, bgcolor, 1, &rect);
> |
> | /* Ask for our window's Id */
> | win.window = XCBWINDOWNew(c);
> |
> | /* Create the window */
> | mask = XCBCWBackPixel | XCBCWEventMask;
> | values[0] = screen->white_pixel;
> | values[1] = ExposureMask | ButtonPressMask | ButtonReleaseMask |
> | PointerMotionMask | ButtonMotionMask | EnterWindowMask |
> | LeaveWindowMask | KeyPressMask | KeyReleaseMask;
> | XCBCreateWindow (c, /* Connection */
> | get_depth (c, screen), /* depth */
> | win.window, /* window Id */
> | screen->root, /* parent window */
> | 0, 0, /* x, y */
> | 300, 300, /* width, height */
> | 10, /* border_width */
> | InputOutput, /* class */
> | screen->root_visual, /* visual */
> | mask, values); /* masks */
> |
> | /* Map the window on the screen */
> | XCBMapWindow (c, win.window);
> |
> | /* The font stuff */
> |
> | fontable.font = XCBFONTNew (c);
> | fontname = "*-helvetica-*-12-*";
> | XCBOpenFont(c, fontable.font, strlen(fontname), fontname);
> | fontrep = XCBQueryFontReply (c, XCBQueryFont (c, fontable), 0);
> |
> | mask = GCForeground | GCFont;
> | valfont[0] = screen->black_pixel;
> | valfont[1] = fontable.font.xid;
> | gcfont = XCBGCONTEXTNew (c);
> | XCBCreateGC (c, gcfont, p, mask, valfont);
> |
> | XCBPolyText8(c, p, gcfont, 10, 10, strlen(str), str);
> |
> | XCBCopyArea(c, p, win, fgcolor,
> | 0, 0, 0, 0, 300, 300);
> |
> | XCBSync (c, 0);
> |
> | free (fontrep);
> |
> | while (1) {}
> |
> | return 1;
> | }
> |
> |
> |
> | ------------------------------------------------------------------------
> |
> | _______________________________________________
> | xcb mailing list
> | xcb at lists.freedesktop.org
> | http://lists.freedesktop.org/mailman/listinfo/xcb
>
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.2.6 (GNU/Linux)
>
> iD8DBQFBtBriAEY/Fayy6lYRAhSpAJ4z7QnHjN4XQ6deAw7ApsqnvM1pXgCfVKe7
> /+1NC3IXG0u6MDCIKcKgFuw=
> =O7O/
> -----END PGP SIGNATURE-----
>
More information about the xcb
mailing list