Spec-Zone.ru › GTK 3.20

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

Spec-Zone.ru

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