GtkDrawingArea
GtkDrawingArea — Простой виджет для рисования с помощью cairo
Функции
| GtkWidget * | gtk_drawing_area_new () |
| int | gtk_drawing_area_get_content_width () |
| void | gtk_drawing_area_set_content_width () |
| int | gtk_drawing_area_get_content_height () |
| void | gtk_drawing_area_set_content_height () |
| void | (*GtkDrawingAreaDrawFunc) () |
| void | gtk_drawing_area_set_draw_func () |
Свойства
| int | content-height | Чтение / Запись |
| int | content-width | Чтение / Запись |
Сигналы
| void | resize | Выполнять последним |
Типы и значения
| struct | GtkDrawingArea |
Иерархия объектов
GObject
╰── GInitiallyUnowned
╰── GtkWidget
╰── GtkDrawingArea
Реализованные интерфейсы
GtkDrawingArea реализует GtkAccessible, GtkBuildable и GtkConstraintTarget.
Файлы
#include <gtk/gtk.h>
Описание
Виджет GtkDrawingArea используется для создания пользовательских элементов интерфейса. Это, по сути, пустой виджет; вы можете рисовать на нём. После создания области рисования приложение может захотеть подключиться к:
Сигналу “realize”, чтобы выполнить необходимые действия при создании виджета на определённом дисплее. (Создайте ресурсы GDK в ответ на этот сигнал.)
Сигналу “resize”, чтобы выполнить необходимые действия при изменении размера виджета.
Вызовите
gtk_drawing_area_set_draw_func(), чтобы обработать перерисовку содержимого виджета.
Следующий фрагмент кода демонстрирует использование области рисования для отображения круга в стандартном цвете переднего плана виджета.
Простое использование GtkDrawingArea
static void
draw_function (GtkDrawingArea *area,
cairo_t *cr,
int width,
int height,
gpointer data)
{
GdkRGBA color;
GtkStyleContext *context;
context = gtk_widget_get_style_context (GTK_WIDGET (area));
cairo_arc (cr,
width / 2.0, height / 2.0,
MIN (width, height) / 2.0,
0, 2 * G_PI);
gtk_style_context_get_color (context,
&color);
gdk_cairo_set_source_rgba (cr, &color);
cairo_fill (cr);
}
int
main (int argc, char **argv)
{
gtk_init ();
GtkWidget *area = gtk_drawing_area_new ();
gtk_drawing_area_set_content_width (GTK_DRAWING_AREA (area), 100);
gtk_drawing_area_set_content_height (GTK_DRAWING_AREA (area), 100);
gtk_drawing_area_set_draw_func (GTK_DRAWING_AREA (area),
draw_function,
NULL, NULL);
return 0;
}Функция рисования обычно вызывается, когда область рисования впервые появляется на экране или когда она закрывается другим окном, а затем открывается снова. Вы также можете принудительно перерисовать, добавив в «область повреждений» окна области рисования с помощью gtk_widget_queue_draw(). Это заставит область рисования снова вызвать функцию рисования.
Доступные процедуры для рисования описаны на странице GDK Drawing Primitives и в документации cairo.
Чтобы получать события мыши в области рисования, вам необходимо использовать контроллеры событий. Чтобы получать события клавиатуры, вам необходимо установить свойство «can-focus» для области рисования, и вы, вероятно, должны нарисовать какой-либо видимый пользователем индикатор того, что область рисования имеет фокус.
Если вам нужен более сложный контроль над вашим виджетом, вы должны рассмотреть возможность создания собственного подкласса GtkWidget.
Функции
gtk_drawing_area_new ()
GtkWidget *
gtk_drawing_area_new (void); Создаёт новую область рисования.
Возвращаемое значение
новый GtkDrawingArea
gtk_drawing_area_get_content_width ()
int
gtk_drawing_area_get_content_width (GtkDrawingArea *self); Возвращает значение, установленное ранее с помощью gtk_drawing_area_set_content_width().
Параметры
self | объект GtkDrawingArea |
Возвращаемое значение
Запрошенная ширина содержимого области рисования
gtk_drawing_area_set_content_width ()
void gtk_drawing_area_set_content_width (GtkDrawingArea *self,int width);
Устанавливает желаемую ширину содержимого области рисования. Обратите внимание, что поскольку виджеты могут быть выделены размером больше, чем они запросили, возможно, что фактическая ширина, переданная вашей функции рисования, будет больше, чем ширина, установленная здесь. Вы можете использовать gtk_widget_set_halign(), чтобы этого избежать.
Если ширина установлена в 0 (по умолчанию), область рисования может исчезнуть.
Параметры
self | объект GtkDrawingArea | |
width | ширина содержимого |
gtk_drawing_area_get_content_height ()
int
gtk_drawing_area_get_content_height (GtkDrawingArea *self); Возвращает значение, установленное ранее с помощью gtk_drawing_area_set_content_height().
Параметры
self | объект GtkDrawingArea |
Возвращаемое значение
Запрошенная высота содержимого области рисования
gtk_drawing_area_set_content_height ()
void gtk_drawing_area_set_content_height (GtkDrawingArea *self,int height);
Устанавливает желаемую высоту содержимого области рисования. Обратите внимание, что поскольку виджеты могут быть выделены размером больше, чем они запросили, возможно, что фактическая высота, переданная вашей функции рисования, будет больше, чем высота, установленная здесь. Вы можете использовать gtk_widget_set_valign(), чтобы этого избежать.
Если высота установлена в 0 (по умолчанию), область рисования может исчезнуть.
Параметры
self | объект GtkDrawingArea | |
height | высота содержимого |
GtkDrawingAreaDrawFunc ()
void (*GtkDrawingAreaDrawFunc) (GtkDrawingArea *drawing_area,cairo_t *cr,int width,int height,gpointer user_data);
Всякий раз, когда drawing_area необходимо перерисовать, будет вызвана эта функция.
Эта функция должна исключительно перерисовывать содержимое области рисования и не должна вызывать какие-либо функции виджетов, которые вызывают изменения.
Параметры
drawing_area | объект GtkDrawingArea для перерисовки | |
cr | контекст, в который рисуем | |
width | фактическая ширина содержимого. Это значение будет по крайней мере такой же ширины, как GtkDrawingArea:width. | |
height | фактическая высота содержимого. Это значение будет по крайней мере такой же ширины, как GtkDrawingArea:height. | |
user_data | пользовательские данные. | [closure] |
gtk_drawing_area_set_draw_func ()
void gtk_drawing_area_set_draw_func (GtkDrawingArea *self,GtkDrawingAreaDrawFunc draw_func,gpointer user_data,GDestroyNotify destroy);
Установка функции рисования — основное, что вам нужно сделать при использовании области рисования. Она вызывается всякий раз, когда GTK необходимо нарисовать содержимое области рисования на экране.
Функция рисования будет вызвана на этапе рисования GTK. На этапе рисования запрещено изменять свойства любых виджетов GTK или вызывать любые функции, которые могли бы привести к изменению свойств. Вы должны ограничиться исключительно рисованием своего содержимого в функции рисования.
Если рисуемое вами содержимое изменяется, вызовите gtk_widget_queue_draw() в области рисования. Это вызовет перерисовку и снова вызовет draw_func.
Параметры
self | объект GtkDrawingArea | |
draw_func | обратный вызов, позволяющий вам нарисовать содержимое области рисования. | [allow-none] |
user_data | пользовательские данные, переданные в | [closure] |
destroy | уведомление об удалении для |
Типы и значения
struct GtkDrawingArea
struct GtkDrawingArea;
Подробное описание свойств
Свойство “content-height”
“content-height” int
Высота содержимого. Подробности см. в gtk_drawing_area_set_content_height().
Владелец: GtkDrawingArea
Флаги: Чтение / Запись
Допустимые значения: >= 0
Значение по умолчанию: 0
Свойство “content-width”
“content-width” int
Ширина содержимого. Подробности см. в gtk_drawing_area_set_content_width().
Владелец: GtkDrawingArea
Флаги: Чтение / Запись
Допустимые значения: >= 0
Значение по умолчанию: 0
Подробное описание сигналов
Сигнал “resize”
void user_function (GtkDrawingArea *area, int width, int height, gpointer user_data)
Сигнал ::resize генерируется один раз при реализации виджета, а затем каждый раз, когда виджет изменяется при реализации. Это полезно для обновления состояния в соответствии с размером виджета, например, для поверхности подложки.
Параметры
area | объект GtkDrawingArea, который сгенерировал сигнал | |
width | ширина области просмотра | |
height | высота области просмотра | |
user_data | пользовательские данные, установленные при подключении обработчика сигнала. |
Флаги: Выполняется последним
См. также
© 2005–2020 The GNOME Project
Licensed under the GNU Lesser General Public License version 2.1 or later.
https://developer-old.gnome.org/gtk4/4.0/GtkDrawingArea.html