hinzufügen Ich mache eine Anwendung, die Texte nach Stil auf dem Bildschirm mit X Windows System und Xft genannten Rendern rendert. Mein Code funktioniert gut, wie unten gezeigt.Wie kann ich Zeilenumbrüche beim Rendern von Text mit X11,
#include <X11/Xlib.h>
#include <X11/Xft/Xft.h>
char * nowShowing()
{
return strdup("This is a sample text This is rendered with new Driver installed This is a sample text his is rendered with new Driver installed");
}
int main()
{
XftFont *font;
XftDraw *draw;
XRenderColor render_color;
XftColor xft_color;
char *str;
str = nowShowing();
int x = 70;
int y = 150;
Display *dis = XOpenDisplay (0);
int screen = DefaultScreen (dis);
Window w = XCreateSimpleWindow (dis, RootWindow (dis, screen),
0, 0, 1200, 300, 1,
BlackPixel (dis, screen),
WhitePixel (dis, screen));
XEvent ev;
render_color.red = 0;
render_color.green =0;
render_color.blue = 0;
render_color.alpha = 0xffff;
XftColorAllocValue (dis,
DefaultVisual(dis, screen),
DefaultColormap(dis, screen),
&render_color,
&xft_color);
//font = XftFontOpen(dis, screen,
// XFT_FAMILY, XftTypeString, "charter",
// XFT_SIZE, XftTypeDouble, 20.0,
// NULL);
font = XftFontOpenName(dis,screen,"URW Palladio L:style=Bold Italic"); //it takes a Fontconfig pattern string
draw = XftDrawCreate(dis, w,
DefaultVisual(dis, screen),
DefaultColormap(dis, screen));
XSelectInput (dis, w, ExposureMask);
XMapWindow (dis, w);
for (;;)
{
XNextEvent (dis, &ev);
if (ev.type == Expose)
XftDrawString8(draw, &xft_color, font, x, y, (XftChar8 *) str,
strlen(str));
}
return 0;
}
Aber ich frage mich, wie kann ich Zeilenumbrüche in den eingegebenen Text hinzufügen. Ich habe versucht mit "/ n" und versuchte auch Array und Loops zu machen, aber es hat nicht funktioniert.
Idk X11 eingehend, aber normalerweise funktionieren solche Grafiksysteme nicht wie eine Konsole oder ein Textfeld von GUI Toolkits. Ich bin mir ziemlich sicher, dass Sie jede Zeile einzeln an den von Ihnen gewünschten Koordinaten rendern müssen. Wie sonst würde X11 wissen, an welcher X-Koordinate (ausgehend von horizontalem Text) der Textbereich beginnt? – Olaf
@Olaf Wir können das mit Xft definieren, wo es Text in einem neuen Fenster zeichnen soll. mit "XftDrawString8" Funktion oder so –
Sie haben den Punkt nicht verstanden. Sie geben den ** Startpunkt ** an, an den Sie zeichnen möchten. Aber das ist nicht unbedingt der Ausgangspunkt der Linie. Was passiert auf der Konsole für 'printf (" Hallo "); printf ("World \ nnice thing!"); '? – Olaf