| |
GTK+ Reference Manual |
||||
---|---|---|---|---|
Top | Description | Object Hierarchy | Implemented Interfaces |
GtkDrawingAreaGtkDrawingArea Виджет для настраиваемых элементов пользовательского интерфейса |
#include <gtk/gtk.h> GtkDrawingArea; GtkWidget* gtk_drawing_area_new (void); void gtk_drawing_area_size (GtkDrawingArea *darea, gint width, gint height);
GObject +----GInitiallyUnowned +----GtkObject +----GtkWidget +----GtkDrawingArea +----GtkCurve
GtkDrawingArea реализует AtkImplementorIface.
GtkDrawingArea
используется для создания настраиваемых
элементов пользовательского интерфейса.
Это по существу пустой виджет; вы можете
отобразить widget->window
. После
создания области для рисования, приложение
может подключать:
Сигналы нажатия кнопок мышью, для
реакции на действия пользователя.
(Используйте gtk_widget_add_events()
для включения событий на которые вы
хотите реагировать.)
Сигнал "realize" для любых необходимых действий, когда виджет проиллюстрирован на определённом экране. (Создаются ресурсы GDK в ответ на этот сигнал.)
Сигнал "configure_event" для получения конкретных действий когда виджет изменяет размер.
Сигнал "expose_event" для обработки перерисовки содержимого виджета.
Следующая часть кода демонстрирует использование области рисования для отображения круга в обычном цвете символов виджета. Помните, GDK автоматически очищает просматриваемую область до цвета фона перед ответом на событие экспонирования, а рисунок не явно прикреплён к области просмотра.
Пример 1. Простое использование GtkDrawingArea.
gboolean expose_event_callback (GtkWidget *widget, GdkEventExpose *event, gpointer data) { gdk_draw_arc (widget->window, widget->style->fg_gc[GTK_WIDGET_STATE (widget)], TRUE, 0, 0, widget->allocation.width, widget->allocation.height, 0, 64 * 360); return TRUE; } [...] GtkWidget *drawing_area = gtk_drawing_area_new (); gtk_widget_set_size_request (drawing_area, 100, 100); g_signal_connect (G_OBJECT (drawing_area), "expose_event", G_CALLBACK (expose_event_callback), NULL);
Событие экспонирования обычно происходит,
когда область рисования в первый раз
появляется на экране, или когда она
закрыта другим окном а затем снова
открывается (exposed). Вы так же можете
принудительно добавить событие
экспонирования к "повреждённому
участку" области рисования окна; для
этого используйте gtk_widget_queue_draw_area()
и gdk_window_invalidate_rect()
являющиеся эквивалентными. Так вы
получите событие экспонирования для
несуществующего участка.
Доступные подпрограммы для рисования
доступны на страницах GDK
Drawing Primitives. Смотрите также
gdk_pixbuf_render_to_drawable()
для рисования GdkPixbuf.
Для реакции на события мышки в области
рисования, вы должны включить их с
помощью gtk_widget_add_events()
.
Для реакции на события клавиатуры, вы
должны установить флаг GTK_CAN_FOCUS
в области рисования и вероятно должны
нарисовать некоторую индикацию видимую
пользователем которая находится в
фокусе области рисования. Используйте
GTK_HAS_FOCUS()
макрос в вашем обработчике экспонирующего
события для решения, изображать ли
указатель фокуса. Смотрите gtk_paint_focus()
как один из способов для изображения
фокуса.
typedef struct _GtkDrawingArea GtkDrawingArea;
Структура GtkDrawingArea содержит только закрытые данные, доступ к которым разрешён только функциям описанным ниже.
GtkWidget* gtk_drawing_area_new (void);
Создаёт новую область рисования.
Возвращает : |
новый GtkDrawingArea |
void gtk_drawing_area_size (GtkDrawingArea *darea, gint width, gint height);
gtk_drawing_area_size
устарела и не должна использоваться во
вновь создаваемом коде.
(Вместо неё используйте
gtk_widget_set_size_request()
.)
Устанавливает размер области рисования
в ответ на сигнал "size_request". Область
рисования в действительности может
занимать больший размер чем распределено,
это зависит от того как она упакована
в контейнер.
|
|
|
Запрашиваемая ширина. |
|
Запрашиваемая высота. |
Иногда GtkImage полезен
как альтернатива области рисования. Вы
можете поместить GdkPixmap
в GtkImage и рисовать в
GdkPixmap,
вызывая gtk_widget_queue_draw()
для GtkImage когда вам нужно
обновить экран.
Закладки на сайте Проследить за страницей |
Created 1996-2024 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |