Hozzászólások
-
SzerzőBejegyzés
-
zoltan22 wrote:Valoban:
http://cairographics.org/manual/cairo-Text.html#cairo-show-textEloszor utf8-ra kellene atalakitani a szoveget. Itt van egy pelda-kodreszlet: http://www.triptico.com/software/unicode.html#converting_posix_locale_strings_into_wchar_t_(c)
Ha ezt belekakod a programba, es a draw_text-ben uft8-ra alakitod vele kirajzolas elott a karakterlancot, mukodnie kellene.
Nem megy, sajna. A példa szerintem rossz, mert egy szimpla progiba beraktam:
Code:#include
#include
#includewchar_t * locale_to_wchar(char * str)
{
wchar_t * ptr;
size_t s;/* first arg == NULL means ‘calculate needed space’ */
s = mbstowcs(NULL, str, 0);/* a size of -1 is triggered by an error in encoding; never
* happen in ISO-8859-* locales, but possible in UTF-8 */
if(s == -1)
return(NULL);/* malloc the necessary space */
if((ptr = (wchar_t *)malloc((s + 1) * sizeof(wchar_t))) == NULL)
return(NULL);
printf(„%dn”,s);/* really do it */
mbstowcs(ptr, str, 100);/* ensure NULL-termination */
ptr[s] = L”;
/* remember to free() ptr when done */
return(ptr);
}void main () {
char *str;
wchar_t *uni;setlocale(LC_ALL, „hu_HU”);
str=malloc(300);
str=”ödön”;
uni=locale_to_wchar(str);
if (uni==NULL) { printf(„nulln”); } else {printf(„%sn”,uni);}
}Kiírja, hogy 4 hosszú az ödön, de csak egy „ö” betűt nyom ki.
Az LC_ALL=…utf… nem jó, mivel ekkor valami rejtélyes ok miatt a tasklist-ekben SEMMI nem jelenik meg, még akkor se, ha nincs benne semmi fura karakter. A sima szövegdobozokba küldött szövegek jól megjelennek.
Szóval a zoltan22 által ajánlott megoldást akarnám én megvalósítani…Pusztito wrote:Tegnap este még müködöt az xmms most meg már nem indul. Konzole-ból is probálom indítani és csak anyit ír ki hog szegmentes hiba.
Most képzeld el, milyen lenne, ha a hiba mellé még egy szeget is az arcodba vágna! 😉
Egyébként javaslom az audacious-t, pont olyan, mint az xmms, azt leszámítva, hogy ő nem ezeréves készletet használ (amit gyakorlatilag más újnak mondható progi nem – ezért szedték ki pl. az uhu-ból is, hogy csak az xmms miatt ne kelljen gtk1-et felrakni), meg jobban fejlődik.Pusztito wrote:Tegnap este még müködöt az xmms most meg már nem indul. Konzole-ból is probálom indítani és csak anyit ír ki hog szegmentes hiba.
Most képzeld el, milyen lenne, ha a hiba mellé még egy szeget is az arcodba vágna! 😉
Egyébként javaslom az audacious-t, pont olyan, mint az xmms, azt leszámítva, hogy ő nem ezeréves készletet használ (amit gyakorlatilag más újnak mondható progi nem – ezért szedték ki pl. az uhu-ból is, hogy csak az xmms miatt ne kelljen gtk1-et felrakni), meg jobban fejlődik.Nem találtam semmi debug-os opciót. Aztán péntek délután még tovább mentem, megnéztem a draw_text függvényt is. Ő a cairo_show_text függvényt hívja meg. A második paramétere „gyanús”, azaz „const char *utf8”.
Ezután LC_ALL=hu_HU.utf8, a vasárnap (mai nap) szót már utf8-cal írja ki, ezutánCode:echo 0 widget_tell tb_gmail áom | awesome-clientÉs megjelent az „álom”!
Szóval itt az utf8-cal lesz gond, márminthogy a cairo nem utf8-kódolással kapja meg, és innentől kifekszik…Nem találtam semmi debug-os opciót. Aztán péntek délután még tovább mentem, megnéztem a draw_text függvényt is. Ő a cairo_show_text függvényt hívja meg. A második paramétere „gyanús”, azaz „const char *utf8”.
Ezután LC_ALL=hu_HU.utf8, a vasárnap (mai nap) szót már utf8-cal írja ki, ezutánCode:echo 0 widget_tell tb_gmail áom | awesome-clientÉs megjelent az „álom”!
Szóval itt az utf8-cal lesz gond, márminthogy a cairo nem utf8-kódolással kapja meg, és innentől kifekszik…Na, szóval azt csináltam, hogy a widgets/textbox.c fájlt egy kicsit módosítottam.
Van ott még a legelején egy függvény, aminek textbox_draw a neve.
Kezdetben:Code:typedef struct
{
char *text;
int width;
Alignment align;
XColor fg;
XColor bg;
} Data;static int
textbox_draw(Widget *widget, DrawCtx *ctx, int offset,
int used __attribute__ ((unused)))
{
Data *d = widget->data;if(d->width)
widget->area.width = d->width;
else
widget->area.width = draw_textwidth(widget->font, d->text);widget->area.height = widget->statusbar->height;
if(!widget->user_supplied_x)
widget->area.x = widget_calculate_offset(widget->statusbar->width,
widget->area.width,
offset,
widget->alignment);
if(!widget->user_supplied_y)
widget->area.y = 0;if (d->text != NULL) {printf(„%sn”,d->text);}
draw_text(ctx, widget->area.x, widget->area.y, widget->area.width,
widget->statusbar->height, d->align, 0, widget->font,
d->text, d->fg, d->bg);return widget->area.width;
}Az „új”:
Code:typedef struct
{
char *text;
int width;
Alignment align;
XColor fg;
XColor bg;
} Data;static int
textbox_draw(Widget *widget, DrawCtx *ctx, int offset,
int used __attribute__ ((unused)))
{
Data *d = widget->data;if(d->width)
widget->area.width = d->width;
else
widget->area.width = draw_textwidth(widget->font, d->text);widget->area.height = widget->statusbar->height;
if(!widget->user_supplied_x)
widget->area.x = widget_calculate_offset(widget->statusbar->width,
widget->area.width,
offset,
widget->alignment);
if(!widget->user_supplied_y)
widget->area.y = 0;——>>>>> if (d->text != NULL) {printf(„%sn”,d->text);} <<<<<area.x, widget->area.y, widget->area.width,
widget->statusbar->height, d->align, 0, widget->font,
d->text, d->fg, d->bg);return widget->area.width;
}Tehát lényegében a d->text értékét (ami a szöveget hordozza) kinyomom az sdtout-ra. Lefordítom, startx &>X.log módon indítom.
Kiadom az echo … álom | awesome-client parancsot. Majd terminálon:Code:$ grep lom X.log
álom
álom
álom
álomTehát a tanulság: ő még jól megkapja.
Nem vagyok egy nagy C-programozó (de azért az elhatározás megvan, hogy egyszer jobb leszek), de ha jól sejtem, akkor most a draw_text-et kellene szemügyre venni…Na, szóval azt csináltam, hogy a widgets/textbox.c fájlt egy kicsit módosítottam.
Van ott még a legelején egy függvény, aminek textbox_draw a neve.
Kezdetben:Code:typedef struct
{
char *text;
int width;
Alignment align;
XColor fg;
XColor bg;
} Data;static int
textbox_draw(Widget *widget, DrawCtx *ctx, int offset,
int used __attribute__ ((unused)))
{
Data *d = widget->data;if(d->width)
widget->area.width = d->width;
else
widget->area.width = draw_textwidth(widget->font, d->text);widget->area.height = widget->statusbar->height;
if(!widget->user_supplied_x)
widget->area.x = widget_calculate_offset(widget->statusbar->width,
widget->area.width,
offset,
widget->alignment);
if(!widget->user_supplied_y)
widget->area.y = 0;if (d->text != NULL) {printf(„%sn”,d->text);}
draw_text(ctx, widget->area.x, widget->area.y, widget->area.width,
widget->statusbar->height, d->align, 0, widget->font,
d->text, d->fg, d->bg);return widget->area.width;
}Az „új”:
Code:typedef struct
{
char *text;
int width;
Alignment align;
XColor fg;
XColor bg;
} Data;static int
textbox_draw(Widget *widget, DrawCtx *ctx, int offset,
int used __attribute__ ((unused)))
{
Data *d = widget->data;if(d->width)
widget->area.width = d->width;
else
widget->area.width = draw_textwidth(widget->font, d->text);widget->area.height = widget->statusbar->height;
if(!widget->user_supplied_x)
widget->area.x = widget_calculate_offset(widget->statusbar->width,
widget->area.width,
offset,
widget->alignment);
if(!widget->user_supplied_y)
widget->area.y = 0;——>>>>> if (d->text != NULL) {printf(„%sn”,d->text);} <<<<<area.x, widget->area.y, widget->area.width,
widget->statusbar->height, d->align, 0, widget->font,
d->text, d->fg, d->bg);return widget->area.width;
}Tehát lényegében a d->text értékét (ami a szöveget hordozza) kinyomom az sdtout-ra. Lefordítom, startx &>X.log módon indítom.
Kiadom az echo … álom | awesome-client parancsot. Majd terminálon:Code:$ grep lom X.log
álom
álom
álom
álomTehát a tanulság: ő még jól megkapja.
Nem vagyok egy nagy C-programozó (de azért az elhatározás megvan, hogy egyszer jobb leszek), de ha jól sejtem, akkor most a draw_text-et kellene szemügyre venni…majorlacko wrote:„Bízom benne, hogy ezúttal kisbetü sporttárs is megtisztel bennünket jelenlétével.
„
Látni valakit, aki láthatatlan, igazán nagy élmény lehet.
…
Ez nem ellenséges részemről, kisbetut soha senki sem látta. Ő egy entitás.Persze, mert kiderülne róla, hogy raccsol meg affektál meg pösze meg selypes… ;D
majorlacko wrote:„Bízom benne, hogy ezúttal kisbetü sporttárs is megtisztel bennünket jelenlétével.
„
Látni valakit, aki láthatatlan, igazán nagy élmény lehet.
…
Ez nem ellenséges részemről, kisbetut soha senki sem látta. Ő egy entitás.Persze, mert kiderülne róla, hogy raccsol meg affektál meg pösze meg selypes… ;D
-
SzerzőBejegyzés
„