Börjar med att påminna om, även om du redan vet, att X-servern är ett separat program som tar meddelanden från Xlib och hanterar dem asynkront. Man kan missta sig på i vilken ordning saker sker.
Det är också många gånger svårt att läsa ut detta ur manualen.
Att ladda en font kan ta lite tid. Man kan laborera med XFlush, XSync() ...;
En font knyts till GC med t.ex. funktionerna XCreateGC() XLoadQueryFont() XSetFont()...
Använder man GC innan detta är klart kan jag tänka mig att det blir blankt utan att man får felmeddelande. Men det är inte den enda tänkbara förklaringen.
Exakt vad som krävs för att X-servern skall kunna generera Expose eller MapNotify är inte
helt lätt att veta. Men det kostar inte så mycket att knyta en callback till flera händelser.
En god idé är att filtrerat skriva ut alla events för att få se under vilka betingelse de kommer.
Finns också fristående program som xev eller xfontsel.
Observera också att ett event behöver släppas fram med:
XSelectInput (dpy, window, KeyPressMask |
ButtonPressMask | ButtonReleaseMask | PointerMotionMask |
ExposureMask | EnterWindowMask | StructureNotifyMask);
efter att fönstret skapats. create_simple_window (dpy, x, y, w, h);
---
För att få det flimmerfritt skriver man på en (eller ibland två) pixmappar som man sedan
lägger ut mha XCopyArea () i en callback vid lämpligt event.
Man skriver nästan aldrig på skärmen direkt!
Ett problem här är att om man gör det vid motion_event så blir det resurskrävande.
Men hur gör man annars figurer som följer musen?
Qt och Gtk+ är resursgrisar och de löser nog inte heller detta på ett särskilt effektivt sätt(?)
XDrawString() är nog rätt funktion för att skriva text.
---
Vet inte om denna diskussion är till hjälp, men i alla fall ett försök.
Det finns också en del tutorialer med exempel som man kan starta ifrån.
En rätt bra sådan är denna:
https://web.archive.org/web/20060923165 ... mming.html