Follow, Greg relpy. I have forgot to CC to the ML. Sorry, Cristian.
Starting from pcfdemo.c, I have write builtinfont.c that use GrText function that also call GdText function: I'm not be able to see the right symbols
You're switching from win32 to nano-X API, so you're introducing new code paths to debug. You should write the demo in win32.
but I have some new questions: 1) UTF8 use 1 2 and sometimes 4 bytes for one symbol: I use a char array for store the text file. Is this correct? (see attach for source code)
The "tmp" variable should be short not int since you're specifying UC16, not UC32. Taking an address of an int doesn't guarantee working especially on big-endian archs.
2) with fontforge I have open the .bdf and I have see that first cyrillic symbol is the 1024 (unicode). I have try to show this only one but I get an error (see attach char_utf8.txt). Why?
Pretty strange. You might try turning off background painting with GrSetGCUseBackground(FALSE) before the GrText call, we need to debug why a drawhorzline call is being made for text, I think its for text field area clearing... a gdb stack trace would be a good idea, there is something wrong here. Could have something to do with the converted builtin bdf file. Make sure you're running CVS code by the way, since there were some bugs fixed in the convbdf program some months ago. Regards, Greg
Tnx. Regards, Cristian
---------------------------------------------------------------------------- ----
/* * pcfdemo - demonstrate PCF font loading for Nano-X */ #include <stdio.h> #include <stdlib.h> #define MWINCLUDECOLORS #include "nano-X.h" GR_FONT_ID font = 0; GR_WINDOW_ID main_wid; GR_FONT_INFO finfo; static void draw_string(void) { int count = 0; int x = 10; int y = 10; unsigned char ch; int tmp = 1024; GR_GC_ID gc = GrNewGC(); GrSetGCFont(gc, font); GrSetGCForeground(gc, GR_RGB(255, 255, 255)); GrSetGCBackground(gc, GR_RGB(0, 0, 0)); printf("First char = %d, last char = %d\n", finfo.firstchar, finfo.lastchar); printf("Max width = %d, max height = %d\n", finfo.maxwidth, finfo.height); GrText(main_wid, gc, x, y, &tmp, 1, GR_TFTOP | GR_TFUC16); //this cause an
assert error
/* for (ch = 0; ch < 255; ch++) { if (ch < finfo.firstchar || ch > finfo.lastchar) GrFillRect(main_wid, gc, x, y, finfo.maxwidth, finfo.height); else GrText(main_wid, gc, x, y, &ch, 1, GR_TFTOP | GR_TFASCII); if (++count >= 16) { x = 0; y += finfo.height; count = 0; } else x += finfo.maxwidth + 2; } */ GrDestroyGC(gc); } static void drawFile(const char * fname){ char buf[20]; //or int... unsigned? int count = 0; int x = 0; int y = 10; unsigned char ch; FILE * pfile; GR_GC_ID gc = GrNewGC(); GrSetGCFont(gc, font); GrSetGCForeground(gc, GR_RGB(255, 255, 255)); GrSetGCBackground(gc, GR_RGB(0, 0, 0)); pfile = fopen(fname, "r"); if( pfile > 0 ){ fread(buf, 1, 20, pfile); GrText(main_wid, gc, x, y, buf, 20, GR_TFTOP | GR_TFUTF8); } GrDestroyGC(gc); } int main(int argc, char **argv) { int width, height; if (GrOpen() == -1) return (-1); font = GrCreateFont("DejaVuLGCSans", 19, 0); //This is a builtin fonts
generated by convbdf
if (!font) printf("Unable to load font\n"); GrGetFontInfo(font, &finfo); width = ((finfo.maxwidth + 2) * 16); height = (((finfo.lastchar - finfo.firstchar) / 16) + 5) * finfo.height; main_wid = GrNewWindowEx(GR_WM_PROPS_APPWINDOW, "builtinfont", GR_ROOT_WINDOW_ID, 0, 0, width, height, BLACK); GrSelectEvents(main_wid, GR_EVENT_MASK_EXPOSURE|GR_EVENT_MASK_CLOSE_REQ); GrMapWindow(main_wid); while (1) { GR_EVENT event; GrGetNextEvent(&event); if (event.type == GR_EVENT_TYPE_EXPOSURE) draw_string(); // drawFile("utf8.txt"); // drawFile("unicode.txt"); if(event.type == GR_EVENT_TYPE_CLOSE_REQ) { GrClose(); exit(0); } } }
---------------------------------------------------------------------------- ----
[EMAIL PROTECTED]:~/src/x86/microwin_cvs/src/bin$ ./builtinfont XDefaultVisual: Visual class: TrueColor (4) id: 35 bits_per_rgb: 8 map_entries: 256 red_mask: 0x00ff0000 green_mask: 0x0000ff00 blue_mask: 0x000000ff Screen RootDepth: 24 Screen RootVisual Visual class: TrueColor (4) id: 35 bits_per_rgb: 8 map_entries: 256 red_mask: 0x00ff0000 green_mask: 0x0000ff00 blue_mask: 0x000000ff Depth: 24 Visual: 0 Visual class: TrueColor (4) id: 35 bits_per_rgb: 8 map_entries: 256 red_mask: 0x00ff0000 green_mask: 0x0000ff00 blue_mask: 0x000000ff Visual: 1 Visual class: TrueColor (4) id: 36 bits_per_rgb: 8 map_entries: 256 red_mask: 0x00ff0000 green_mask: 0x0000ff00 blue_mask: 0x000000ff Visual: 2 Visual class: TrueColor (4) id: 37 bits_per_rgb: 8 map_entries: 256 red_mask: 0x00ff0000 green_mask: 0x0000ff00 blue_mask: 0x000000ff Visual: 3 Visual class: TrueColor (4) id: 38 bits_per_rgb: 8 map_entries: 256 red_mask: 0x00ff0000 green_mask: 0x0000ff00 blue_mask: 0x000000ff Visual: 4 Visual class: TrueColor (4) id: 39 bits_per_rgb: 8 map_entries: 256 red_mask: 0x00ff0000 green_mask: 0x0000ff00 blue_mask: 0x000000ff Visual: 5 Visual class: TrueColor (4) id: 40 bits_per_rgb: 8 map_entries: 256 red_mask: 0x00ff0000 green_mask: 0x0000ff00 blue_mask: 0x000000ff Visual: 6 Visual class: TrueColor (4) id: 41 bits_per_rgb: 8 map_entries: 256 red_mask: 0x00ff0000 green_mask: 0x0000ff00 blue_mask: 0x000000ff Visual: 7 Visual class: TrueColor (4) id: 42 bits_per_rgb: 8 map_entries: 256 red_mask: 0x00ff0000 green_mask: 0x0000ff00 blue_mask: 0x000000ff Visual: 8 Visual class: DirectColor (5) id: 43 bits_per_rgb: 8 map_entries: 256 red_mask: 0x00ff0000 green_mask: 0x0000ff00 blue_mask: 0x000000ff Visual: 9 Visual class: DirectColor (5) id: 44 bits_per_rgb: 8 map_entries: 256 red_mask: 0x00ff0000 green_mask: 0x0000ff00 blue_mask: 0x000000ff Visual: 10 Visual class: DirectColor (5) id: 45 bits_per_rgb: 8 map_entries: 256 red_mask: 0x00ff0000 green_mask: 0x0000ff00 blue_mask: 0x000000ff Visual: 11 Visual class: DirectColor (5) id: 46 bits_per_rgb: 8 map_entries: 256 red_mask: 0x00ff0000 green_mask: 0x0000ff00 blue_mask: 0x000000ff Visual: 12 Visual class: DirectColor (5) id: 47 bits_per_rgb: 8 map_entries: 256 red_mask: 0x00ff0000 green_mask: 0x0000ff00 blue_mask: 0x000000ff Visual: 13 Visual class: DirectColor (5) id: 48 bits_per_rgb: 8 map_entries: 256 red_mask: 0x00ff0000 green_mask: 0x0000ff00 blue_mask: 0x000000ff Visual: 14 Visual class: DirectColor (5) id: 49 bits_per_rgb: 8 map_entries: 256 red_mask: 0x00ff0000 green_mask: 0x0000ff00 blue_mask: 0x000000ff Visual: 15 Visual class: DirectColor (5) id: 50 bits_per_rgb: 8 map_entries: 256 red_mask: 0x00ff0000 green_mask: 0x0000ff00 blue_mask: 0x000000ff Depth: 1 Depth: 4 Depth: 8 Depth: 15 Depth: 16 Depth: 32 Visual: 0 Visual class: TrueColor (4) id: 96 bits_per_rgb: 8 map_entries: 256 red_mask: 0x00ff0000 green_mask: 0x0000ff00 blue_mask: 0x000000ff Selected Visual: Visual class: TrueColor (4) id: 35 bits_per_rgb: 8 map_entries: 256 red_mask: 0x00ff0000 green_mask: 0x0000ff00 blue_mask: 0x000000ff createfont: (height == 0) found builtin font System (0) createfont: (height == 0) found builtin font System (0) fnt_createfont: DejaVuLGCSans,19 not found pcf_createfont: DejaVuLGCSans,19 not found createfont: (height != 0) using builtin font DejaVuLGCSans (4) First char = 32, last char = 65533 Max width = 74, max height = 19 builtinfont: /home/tfb800/src/x86/microwin_cvs/src/drivers/fblin32.c:68:
linear32_drawhorzline: Assertion `x2 >= x1' failed.
Aborted (core dumped)
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]