LINUX.ORG.RU

GTK+. Нарисовать текст, отсекая «лишнее»?..


0

0

GTK+ Проблема в следующем. Нужно нарисовать прямоугольник на виджете, а в нем (в прямоугольнике) текст. Текст надо расположить в левом верхнем углу прямоугольника. Причем, если текст не помещается в прямоугольник, он должен обрезаться. Итак, нарисовать прямоугольник у меня получилось (gdk_draw_rectangle(..)), текст тоже (создал PangoLayout с нужным мне текстом и отрисовал с помощью gdk_draw_layout(..)) Но вот как обрезать "лишний" текст - не понимаю. Пытаюсь найти, как изменить размеры PangoLayout'а. Чтоб подогнать их (размеры) под размеры прямоугольника - но пока никак. :( Может, кто-нибудь встречался с подобной проблемой?


Ответ на: комментарий от ananas

Хм.. Я видел эти функции, но не понимаю, как они мне помогут.
Вот, делаю так:
PangoLayout* titleLayout = gtk_widget_create_pango_layout (_drawArea, "Test!!!");
...
pango_layout_set_width(titleLayout, _width);
gdk_draw_rectangle(_drawArea->window, _drawArea->style->black_gc, FALSE, _left, _top, _width, _height);
gdk_draw_layout(_drawArea->window,_drawArea->style->black_gc, _left, _top, titleLayout);

Где _drawArea - область для рисования, 
_left, _top, _width, _height - соответственно координаты левого верхнего угла прямоугольника, его ширина и высота.
И вот мне нужно, чтобы текст, к-й выходит за границу прямоуголника, был обрезан.
Пробовал добавлять pango_layout_set_wrap() со всеми возможными вариантами до pango_layout_set_width(titleLayout, _width) - не то.
Не помогает. :(

З.Ы. Да, кстати. Если даже pango_layout_set_width() сработает, то будет обрезан текст только по ширине? А как быть с высотой?

Ignat
() автор топика
Ответ на: комментарий от Ignat

Нужно создать Pixmap маленького размера и рисовать на нем. Если так не получится, создать pixmap большой, нарисовать на нем, а потом вырезать столько картинки, сколько нужно.

welkam ★★
()
Ответ на: комментарий от welkam

Проблема в том, что я не знаю заранее размер прямоугольника. В принципе, этот размер может быть любым.

Вдобавок, размеры может задавать и изменять пользователь во время выполнения программы. Не создавать же при каждом изменении размера новый pixmap?

Может, все-таки есть решение через PangoLayout?

Ignat
() автор топика
Ответ на: комментарий от Ignat

> Вдобавок, размеры может задавать и изменять пользователь во время выполнения программы. Не создавать же при каждом изменении размера новый pixmap?

А куда деваться-то? На configure вешается обработчик и в нем создается pixmap.

> Может, все-таки есть решение через PangoLayout?

Нет. Можно много чего сделать, например вместо того, чтобы рисовать custom widget'ы упаковать GtkLabel в GtkVbox без расширения. Тогда тоже самое будет делаться автоматически. Рамку отдельно можно нарисовать, если очень нужно.

welkam ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.