GtkDrawingArea
GtkDrawingArea — Виджет для пользовательских элементов интерфейса
Функции
Типы и значения
| struct | GtkDrawingArea |
Иерархия объектов
GObject ╰── GInitiallyUnowned ╰── GtkWidget ╰── GtkDrawingArea
Реализованные интерфейсы
GtkDrawingArea реализует AtkImplementorIface и GtkBuildable.
Файлы заголовков
#include <gtk/gtk.h>
Описание
Виджет GtkDrawingArea используется для создания пользовательских элементов интерфейса. По сути, это пустой виджет; на нём можно рисовать. После создания области рисования приложение может подключиться к:
Сигналам нажатия мыши и кнопок, чтобы реагировать на пользовательский ввод. (Используйте
gtk_widget_add_events(), чтобы включить события, которые вы хотите получать.)Сигналу “realize”, чтобы выполнить необходимые действия при создании виджета на определённом дисплее. (Создайте ресурсы GDK в ответ на этот сигнал.)
Сигналу “size-allocate”, чтобы выполнить необходимые действия при изменении размера виджета.
Сигналу “draw”, чтобы обработать перерисовку содержимого виджета.
Следующий фрагмент кода демонстрирует использование области рисования для отображения круга в стандартном цвете переднего плана виджета.
Обратите внимание, что GDK автоматически очищает видимую область перед отправкой события expose, и что рисование неявно обрезается до видимой области. Если вы хотите иметь тему-предоставленный фон, вам нужно вызвать gtk_render_background() в вашем методе ::draw.
Простое использование GtkDrawingArea
gboolean draw_callback (GtkWidget *widget, cairo_t *cr, gpointer data) { guint width, height; GdkRGBA color; GtkStyleContext *context; context = gtk_widget_get_style_context (widget); width = gtk_widget_get_allocated_width (widget); height = gtk_widget_get_allocated_height (widget); gtk_render_background (context, cr, 0, 0, width, height); cairo_arc (cr, width / 2.0, height / 2.0, MIN (width, height) / 2.0, 0, 2 * G_PI); gtk_style_context_get_color (context, gtk_style_context_get_state (context), &color); gdk_cairo_set_source_rgba (cr, &color); cairo_fill (cr); return FALSE; } [...] GtkWidget *drawing_area = gtk_drawing_area_new (); gtk_widget_set_size_request (drawing_area, 100, 100); g_signal_connect (G_OBJECT (drawing_area), "draw", G_CALLBACK (draw_callback), NULL);
Сигналы рисования обычно доставляются, когда область рисования впервые появляется на экране или когда она закрыта другим окном и затем открыта. Вы также можете принудительно вызвать событие expose, добавив в «область повреждений» окна области рисования; gtk_widget_queue_draw_area() и gdk_window_invalidate_rect() являются одинаково подходящими способами сделать это. Тогда вы получите сигнал рисования для области повреждений.
Доступные процедуры рисования описаны на странице GDK Drawing Primitives и в документации cairo.
Чтобы получать события мыши в области рисования, вам необходимо включить их с помощью gtk_widget_add_events(). Чтобы получать события клавиатуры, вам нужно установить свойство «can-focus» для области рисования, и вам, вероятно, потребуется отобразить какой-то видимый пользователю индикатор того, что область рисования в фокусе. Используйте gtk_widget_has_focus() в обработчике события expose, чтобы решить, отображать ли индикатор фокуса. См. gtk_render_focus() для одного из способов отображения фокуса.
Функции
gtk_drawing_area_new ()
GtkWidget *
gtk_drawing_area_new (void); Создаёт новую область рисования.
Возвращает
новый GtkDrawingArea
Типы и значения
struct GtkDrawingArea
struct GtkDrawingArea;
См. также
© 2005–2020 The GNOME Project
Licensed under the GNU Lesser General Public License version 2.1 or later.
https://developer.gnome.org/gtk3/3.22/GtkDrawingArea.html