Prev

Up

Home

GTK+ Reference Manual

Next

Top  |  Description  |  Object Hierarchy  |  Implemented Interfaces

GtkDrawingArea

GtkDrawingArea Виджет для настраиваемых элементов пользовательского интерфейса

Краткое описание

#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. После создания области для рисования, приложение может подключать:

Следующая часть кода демонстрирует использование области рисования для отображения круга в обычном цвете символов виджета. Помните, 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() как один из способов для изображения фокуса.

Детали

GtkDrawingArea

typedef struct _GtkDrawingArea GtkDrawingArea;

Структура GtkDrawingArea содержит только закрытые данные, доступ к которым разрешён только функциям описанным ниже.


gtk_drawing_area_new ()

GtkWidget*  gtk_drawing_area_new            (void);

Создаёт новую область рисования.

Возвращает :

новый GtkDrawingArea


gtk_drawing_area_size ()

void gtk_drawing_area_size (GtkDrawingArea *darea, gint width, gint height);

Внимание

gtk_drawing_area_size устарела и не должна использоваться во вновь создаваемом коде.

(Вместо неё используйте gtk_widget_set_size_request().) Устанавливает размер области рисования в ответ на сигнал "size_request". Область рисования в действительности может занимать больший размер чем распределено, это зависит от того как она упакована в контейнер.

darea :

GtkDrawingArea.

width :

Запрашиваемая ширина.

height :

Запрашиваемая высота.

Смотрите также

Иногда GtkImage полезен как альтернатива области рисования. Вы можете поместить GdkPixmap в GtkImage и рисовать в GdkPixmap, вызывая gtk_widget_queue_draw() для GtkImage когда вам нужно обновить экран.