[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: [PATCH to gdk] поддержка корректного отображения русскоязычных элементов GUI при отсутствии /etc/gtk/gtkrc.ru



On Wed, 23 Aug 2000, Alexander Kotelnikov wrote:

> On Wed, Aug 23, 2000 at 04:11:51PM +0500, Vlad Harchev wrote:
> > On Wed, 23 Aug 2000, Alexander Kotelnikov wrote:
> > 
> >   Да, неправильно измеряется ширина текста с помощью функции
> > gdk_text_width_wc(). Эта функция вызвывается в функциях виджета GtkLabel
> 
> Ok, с подробностями gtk'шники, надо думать, разберутся
> > 
> >  Чтобы увидеть своими глазами - очевидно временно переименовать
> > /etc/gtkrc/gtkrc.ru в че-нить и перезапустить гном. Очень хорошо эффект виден
> > при нажатии кнопке "пуск" (пятке в левом нижнем углу экрана). Естественно, в
> > gnomecc должен быть при этом выбран русский шрифт.
> 
> По правде, мне настолько наплевать, что переименовывать что-то, запускать 
> gnomecc, gnome-panel, до этого менять LC_-переменные, чтобы gnome был 
> "русским" очень лень. А вообще мне априори не нравится подход "давайте выкинем
> кое что из дистрибутива библиотеки и посмотрим, как после этого все стало 
> плохо". Нельзя ли без этого? вряд ли gdk_text_width_wc() хорошо работает на
> шрифтах iso8859-1 и koi8-r из gtkrc.ru, и плохо на остальных.

  Я ничего не навязвываю. Не интересно - можно не пробовать.

  О природе эффекта: GtkLabel переводит строку, которая она должна рисовать, в 
wide character string. Для измерения ширины текста она вызывает
gdk_text_width_wc(GdkFont* thefont,GdkWChar* wc_string). В свою очередь эта
функция если thefont не является фонтсетом, переводит string в однобайтную
строку просто усечением верхних 24 битов (то есть просто 
	char* str = g_new(char,len+1);
	for(int i=0;i<len;++i)
		str[i] = wc_string[i];
). Если эта строка была русским текстом, после такого "преобразования" str
содержит хрен знает что (но не исходная строка которую должна была нарисовать 
GtkLabel). И вот ширина этого "хрен знает что" в str и измеряется. Естественно
она не совпадает с ширниной оригинальной строки. Для ascii (то бишь латинских
букв) такое преобразование корректно.
 
> -- 
> Alexander Kotelnikov
> Saint-Petersburg, Russia
> 

 Best regards,
  -Vlad



Reply to: