Subject:
Re: [nanogui] Cyrillic font buit-in
From:
Cristian Chiarello ####@####.####
Date:
15 May 2008 06:21:04 -0000
Message-Id: <482BD67C.1010808@fimm.com>
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);
> }
> }
> }
>
----------------------------------------------------------------------------
----
> tfb800@utfb800:~/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)
>