Spec-Zone.ru › GTK 4.0

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

пользовательские данные, переданные в draw_func.

[closure]

destroy

уведомление об удалении для user_data.

Типы и значения

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

пользовательские данные, установленные при подключении обработчика сигнала.

Флаги: Выполняется последним

См. также

GtkImage

© 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API