Subject:
Re: [nanogui] Cyrillic font buit-in
From:
Cristian Chiarello ####@####.####
Date:
15 May 2008 06:18:39 -0000
Message-Id: <482BD5F9.7030703@fimm.com>
Greg Haerr:
> : return MwExtTextOut(hdc, x, y, 0, NULL, lpszString, cbString, NULL,
> : MWTF_UTF8 );
> :
> : Debugging, the function is called but the symbols are still wrong (the
> : same as MWTF_UC16).
>
> You should write a test program that displays text in a window
> directly using this same function. If it works, then there are
> issues with how the edit box control stores text. Otherwise,
> there are still other issues.
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 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)
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?
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)