Spec-Zone.ru › GTK 3.22

GtkDrawingArea

GtkDrawingArea — Виджет для пользовательских элементов интерфейса

Функции

GtkWidget * gtk_drawing_area_new ()

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

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;

См. также

GtkImage

© 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

Spec-Zone.ru

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