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.20/GtkDrawingArea.html