Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Программирование под Unix/Linux > Xlib + окно без рамки и русские шрифты


Автор: NAYakaSL 12.5.2008, 04:40
Пишу, используя только Xlib. Надо сделать так, чтоб окно было без рамки. И еще один вопрос: как теми же средствами Xlib вывести русские буквы? Просто, если бы проблема была в шрифтах, то тогда почему заголовок тоже по-русски не пишется (пробовал созранять исходники в файлах с различной кодировкой). Может надо не символы писать, а прям коды?
P.S.: Просмотрел форум на наличие смежных вопросов, но ответа нигде не нашел. Так что поднимаю эту тему вновь.
P.P.S.: Всем, кто поможет, заранее, спасибо.

Автор: NAYakaSL 17.5.2008, 01:28
Я, конечно, понимаю, что тут люди занятые и все такое. Но, может быть, все-таки поможете интересующемуся человеку. Ответьте, пожалуйста на мой вопрос. Еще раз повторяю: поиск по форуму ничего не дал!

Автор: nickless 17.5.2008, 15:12
На Xlib мало кто пишет, ибо есть намного более удобные обёртки. Попробуй посмотреть исходники Qt или GTK+, они используют utf8, так что проблем с русским текстом там нет.

Автор: Ken 17.5.2008, 17:49
Какой функцией пользуетесь для вывода текста? 
Xutf8DrawString () пробовали? 
Есть еще XwcDrawString (), в этом случае строку надо перевести в wchar_t* перед выводом.

Автор: NAYakaSL 18.5.2008, 21:38
Спасибо, попробую, во только тогда вопрос: а для заголовка окна как сделать? Там же, вроде, передаешь параметр типа char*. Или есть другие варианты? Для оконных менеджеров можно и по-другому?

Автор: Ken 19.5.2008, 07:14
Цитата(NAYakaSL @ 18.5.2008,  21:38)
Спасибо, попробую, во только тогда вопрос: а для заголовка окна как сделать? Там же, вроде, передаешь параметр типа char*. Или есть другие варианты? Для оконных менеджеров можно и по-другому?

Там тоже есть другие функции, например, XSetWMName. Который вроде берет строку с другой кодировкой. Посмотрите параметры. Я бегло попробовал, если честно, у меня тоже не получилось. Было бы время поиграться, анализировал бы как Qt или Gtk делают это. Кстати, кажется, результат еще зависит от оконного менеджера. Потому что видел случаев, когда, например, в КДЕ (kwin) русские заголовки нормально отображались, а у другого оконного менеджера нет.

Автор: NAYakaSL 19.5.2008, 20:34
Еще раз, спасибо. Обязательно попробую. Недавно нашел информацию по созданию приложений без рамок: как оказалось - для каждого оконного менеджера это реализуется несколько разными параметрами. Видимо, с заголовками, да и вообще со всем, что касается WM, нужно реализвывать решения для их различных реинкарнаций.

Автор: NAYakaSL 29.5.2008, 03:01
С рамками вроде бы проканало, а вот с русскими шрифтами - не совсем. Он грузит непонятно какие. И только если через XLoadQueryFont(), а если загружать шрифты для вывода строк utf8 или wchar_t, то он вообще никакие шрифты не обнаруживает. Может кто из знающих пороется?

Автор: NAYakaSL 12.6.2008, 05:06
Судя по всему, из знающих - я сам. Впрочем, кое-что получилось, оказывается, что нобходимо специально указывать пути к папкам со шрифтами. Но это еще пол беды. Теперь такой вопос: можно ли стандартными средствами Xlib сделать прозрачность. Но не только полностью окон, а такую, чтоб некоторые части окна были не видны, как, например скины для того же xine'а. Жду ответов.
Понимаю, что в последнее время программирование на Xlib неактуально, но если все разучатся писать на xlib, то кто же будет создавать новые версии qt и gtk+?
P.S.: Еще один вопросик: получается так, что при работе данного приложения, оно постоянно мерцает, постоянно обновляется. Как это обойти? Если я не ошибаюсь, то какая-то подобная проблема есть и в WinAPI. Там она достаточно просто решается. Если подскажите, опять-таки, буду благодарен.

Автор: andrew_121 13.6.2008, 21:56
Цитата(NAYakaSL @  12.6.2008,  05:06 Найти цитируемый пост)
Судя по всему, из знающих - я сам.

А после такой фразы, думаю, никто и не поможет.

Автор: nickless 16.6.2008, 01:07
Цитата(NAYakaSL @  12.6.2008,  04:06 Найти цитируемый пост)
постоянно обновляется. Как это обойти? Если я не ошибаюсь, то какая-то подобная проблема есть и в WinAPI. Там она достаточно просто решается

Называется double buffering,т.е. рисуем в буфер, потом его целиком показываем.
Собственно повторюсь, ИМХО нигде лучше чем в документации к Xlib и сорцам GUI-библиотек это не описано, просто потому, что никто кроме авторов этих самых библиотек на чистых иксах уже давно не пишет smile Мне бы например тоже хотелось покопатся в том как оно работает (копался в WinApi пару лет назад), но тупо нет времени...
Так что Use the Source, Luke smile 

Автор: NAYakaSL 16.6.2008, 18:05
nickless: спасибо.
Да именно в документации я и искал, вот только нужно было конкретно знать, что нужно искать. Иначе - поиск не дает результатов. Теперь, надеюсь, получится.
andrew_121: Обидеть никого не хотел, а сказал так лишь потому, что никто не ответил. Правда, теперь, благодаря nickless'у ситуация изменилась.

Добавлено через 6 минут и 41 секунду
По мере изучения появился еще один вопросик. Хочу пришить в прогу стили оформления, которые оформлялись бы в виде внешних файлов (формат не важен). Вопрос в следующем: как это лучше сделать - чтобы была функция, которая создает объект и заполняет его данными из файла (это я так, условно), или как-нибудь иначе можно? (использую язык c++). Как, например, реализована поддержка стилей в qt или gtk+? Если знает кто-нибудь.

Автор: NAYakaSL 18.6.2008, 18:04
Тук-тук-тук! Попытайтесь ответить, пожалуйста. Перерыл все, что смог по последнему вопросу, но ответа не нашел.

Автор: nickless 19.6.2008, 01:54
Цитата(NAYakaSL @  16.6.2008,  17:05 Найти цитируемый пост)
Как, например, реализована поддержка стилей в qt

http://doc.trolltech.com/4.4/stylesheet.html

Цитата(NAYakaSL @  16.6.2008,  17:05 Найти цитируемый пост)
как это лучше сделать - чтобы была функция, которая создает объект и заполняет его данными из файла (это я так, условно), или как-нибудь иначе можно? 

Делать можно как больше нравится, я бы сделал методы в классах для виджетов, для записи/чтения нужных данных (а так же рекурсивно данных всех детей) в/из файла.
Можно подсмотреть принцип в сорцах Qt итд.

Автор: gustavomarginale 6.7.2008, 00:14
У меня топикстартеровские вопросы касательно шрифтов. Я их нахожу вот так:

Код

        char pattern[] = "*koi8-r*";
        this -> fonts_number_loaded = 0;
        list_fonts_ptr = XListFonts ( display, pattern, 4096, &fonts_number_loaded );


Находится что-то, в имени чего есть коивосемьар. На одной системе есть, на другой нет, в этом и печаль линуксическая. Как с собой шрифт таскать - незнаю.

 smile

Добавлено через 12 минут и 39 секунд
 smile  smile  smile  smile  smile  smile  smile  smile  smile  smile  smile 

Хоть свой изготавливай и свою рендерилку впридачу. Всё вокруг GPL, но мне как-то идеология билла гейтса ближе, чем эта крокодиловая GPL.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)