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» и в документации 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.24/GtkDrawingArea.html