GtkSnapshot
GtkSnapshot — Вспомогательный объект для снимков
Функции
Типы и значения
| typedef | GtkSnapshot |
Иерархия объектов
GObject
╰── GdkSnapshot
╰── GtkSnapshot
Файлы заголовков
#include <gtk/gtk.h>
Описание
GtkSnapshot — вспомогательный объект, который помогает в создании GskRenderNodes в GdkPaintableInterface.snapshot() vfunc. Он работает аналогично контексту cairo и поддерживает стек узлов отрисовки и связанных с ними преобразований.
Узел на вершине стека — тот, на котором действуют функции gtk_snapshot_append_… . Используйте функции gtk_snapshot_push_… и gtk_snapshot_pop() для изменения текущего узла.
Обычно объект GtkSnapshot получается как аргумент функции GtkWidgetClass.snapshot() vfunc. Если вам нужно создать собственный объект GtkSnapshot, используйте gtk_snapshot_new().
Функции
gtk_snapshot_new ()
GtkSnapshot *
gtk_snapshot_new (void); Создаёт новый GtkSnapshot.
Возвращает
новый выделенный GtkSnapshot
gtk_snapshot_to_node ()
GskRenderNode *
gtk_snapshot_to_node (GtkSnapshot *snapshot); Возвращает узел отрисовки, который был создан snapshot. После вызова этой функции больше невозможно добавлять узлы в snapshot. Единственной функцией, которая должна быть вызвана после этого, является g_object_unref().
Параметры
snapshot |
gtk_snapshot_to_paintable ()
GdkPaintable * gtk_snapshot_to_paintable (GtkSnapshot *snapshot,const graphene_size_t *size);
Возвращает объект paintable, содержащий узел отрисовки, созданный snapshot. После вызова этой функции больше невозможно добавлять узлы в snapshot. Единственной функцией, которая должна быть вызвана после этого, является g_object_unref().
Параметры
snapshot | ||
size | Размер результирующего paintable или | [allow-none] |
gtk_snapshot_free_to_node ()
GskRenderNode *
gtk_snapshot_free_to_node (GtkSnapshot *snapshot); Возвращает узел, созданный snapshot, и освобождает snapshot.
[skip]
Параметры
snapshot | a GtkSnapshot. | [transfer full] |
gtk_snapshot_free_to_paintable ()
GdkPaintable * gtk_snapshot_free_to_paintable (GtkSnapshot *snapshot,const graphene_size_t *size);
Возвращает paintable для узла, созданного snapshot, и освобождает snapshot.
[skip]
Параметры
snapshot | a GtkSnapshot. | [transfer full] |
size | Размер результирующего paintable или | [allow-none] |
gtk_snapshot_push_opacity ()
void gtk_snapshot_push_opacity (GtkSnapshot *snapshot,double opacity);
Изменяет непрозрачность изображения.
Изображение сохраняется до следующего вызова gtk_snapshot_pop().
Параметры
snapshot | ||
opacity | непрозрачность |
gtk_snapshot_push_color_matrix ()
void gtk_snapshot_push_color_matrix (GtkSnapshot *snapshot,const graphene_matrix_t *color_matrix,const graphene_vec4_t *color_offset);
Изменяет цвета изображения, применяя аффинное преобразование в RGB-пространстве.
Изображение сохраняется до следующего вызова gtk_snapshot_pop().
Параметры
snapshot | ||
color_matrix | матрица цветов | |
color_offset | смещение цвета |
gtk_snapshot_push_repeat ()
void gtk_snapshot_push_repeat (GtkSnapshot *snapshot,const graphene_rect_t *bounds,const graphene_rect_t *child_bounds);
Создаёт узел, который повторяет дочерний узел.
Дочерний узел сохраняется до следующего вызова gtk_snapshot_pop().
Параметры
snapshot | ||
bounds | границы повторения | |
child_bounds | границы дочернего узла или | [nullable] |
gtk_snapshot_push_clip ()
void gtk_snapshot_push_clip (GtkSnapshot *snapshot,const graphene_rect_t *bounds);
Обрезает изображение до прямоугольника.
Изображение сохраняется до следующего вызова gtk_snapshot_pop().
Параметры
snapshot | ||
bounds | прямоугольник обрезки |
gtk_snapshot_push_rounded_clip ()
void gtk_snapshot_push_rounded_clip (GtkSnapshot *snapshot,const GskRoundedRect *bounds);
Обрезает изображение до скругленного прямоугольника.
Изображение сохраняется до следующего вызова gtk_snapshot_pop().
Параметры
snapshot | ||
bounds | скруглённый прямоугольник обрезки |
gtk_snapshot_push_cross_fade ()
void gtk_snapshot_push_cross_fade (GtkSnapshot *snapshot,double progress);
Создаёт снимок операции перехода между двумя изображениями с заданным progress .
До первого вызова gtk_snapshot_pop() будет сделан снимок начального изображения. После этого вызова до второго вызова gtk_snapshot_pop() будет записано конечное изображение.
Вызов этой функции требует 2 последующих вызова gtk_snapshot_pop().
Параметры
snapshot | ||
progress | прогресс от 0.0 до 1.0 |
gtk_snapshot_push_blend ()
void gtk_snapshot_push_blend (GtkSnapshot *snapshot,GskBlendMode blend_mode);
Смешивает 2 изображения с указанным режимом смешивания.
До первого вызова gtk_snapshot_pop() будет записано нижнее изображение для операции смешивания. После этого вызова до второго вызова gtk_snapshot_pop() будет записано верхнее изображение для смешивания.
Вызов этой функции требует 2 последующих вызова gtk_snapshot_pop().
Параметры
snapshot | ||
blend_mode | используемый режим смешивания |
gtk_snapshot_push_blur ()
void gtk_snapshot_push_blur (GtkSnapshot *snapshot,double radius);
Размывает изображение.
Изображение записывается до следующего вызова gtk_snapshot_pop().
Параметры
snapshot | ||
radius | радиус размытия |
gtk_snapshot_push_shadow ()
void gtk_snapshot_push_shadow (GtkSnapshot *snapshot,const GskShadow *shadow,gsize n_shadows);
Применяет тень к изображению.
Изображение записывается до следующего вызова gtk_snapshot_pop().
Параметры
snapshot | ||
shadow | первое описание тени | |
n_shadows | количество описаний тени |
gtk_snapshot_push_debug ()
void gtk_snapshot_push_debug (GtkSnapshot *snapshot,const char *message,...);
Вставляет узел отладки с сообщением. Узлы отладки никак не влияют на отрисовку, но могут быть полезны для определения частей дерева узлов отрисовки, например, в инспекторе GTK.
Параметры
snapshot | ||
message | строка формата в стиле printf | |
... | аргументы для |
gtk_snapshot_push_gl_shader ()
void gtk_snapshot_push_gl_shader (GtkSnapshot *snapshot,GskGLShader *shader,const graphene_rect_t *bounds,GBytes *take_args);
Добавляет GskGLShaderNode со специфическим GskGLShader и набором значений униформ для использования при отрисовке. Кроме того, это принимает список n_children других узлов, которые будут переданы в GskGLShaderNode.
Аргумент take_args — это блок данных для использования в униформ-аргументах, в соответствии с типами и смещениями, определёнными shader . Обычно это генерируется с помощью gsk_gl_shader_format_args() или GskGLShaderArgBuilder. Создатель снимка получает владение take_args, поэтому вызывающая сторона не должна его освобождать после этого.
Если рендерер не поддерживает GL шейдеры или есть проблемы при компиляции шейдера, то узел будет отрисован розовым цветом. Используйте gsk_gl_shader_compile() для проверки совместимости shader с рендерером перед использованием.
Если шейдер требует текстуры (см. gsk_gl_shader_get_n_textures()), ожидается, что вы вызовете gtk_snapshot_gl_shader_pop_texture() необходимое количество раз. Каждый из этих вызовов создаст узел, который добавится в качестве дочернего к узлу gl шейдера, который, в свою очередь, отрисует их вне экрана и передаст в качестве текстуры шейдеру.
После того, как все текстуры (если они есть) будут сняты, вы должны вызвать стандартную функцию gtk_snapshot_pop().
Если вы хотите использовать существующие текстуры в качестве входных данных для шейдера вместо рендеринга новых, используйте gtk_snapshot_append_texture() для добавления узла текстуры. Они будут использованы непосредственно, а не повторно отрисованы.
Подробности о написании шейдеров см. в GskGLShader.
Параметры
snapshot | ||
shader | Код для выполнения | |
bounds | прямоугольник для отрисовки | |
take_args | Блок данных с аргументами для шейдера. | [transfer full] |
gtk_snapshot_pop ()
void
gtk_snapshot_pop (GtkSnapshot *snapshot); Удаляет верхний элемент из стека узлов отрисовки и добавляет его к узлу под ним.
Параметры
snapshot |
gtk_snapshot_gl_shader_pop_texture ()
void
gtk_snapshot_gl_shader_pop_texture (GtkSnapshot *snapshot); Удаляет верхний элемент из стека узлов отрисовки и добавляет его к ближайшему GskGLShaderNode ниже него. Это должно вызываться столько раз, сколько нужно текстур для шейдера в gtk_snapshot_push_gl_shader().
Параметры
snapshot |
gtk_snapshot_save ()
void
gtk_snapshot_save (GtkSnapshot *snapshot); Создаёт копию текущего состояния snapshot и сохраняет её во внутреннем стеке сохранённых состояний для snapshot . При вызове gtk_snapshot_restore(), snapshot будет восстановлено до сохранённого состояния. Многократные вызовы gtk_snapshot_save() и gtk_snapshot_restore() могут быть вложены; каждый вызов gtk_snapshot_restore() восстанавливает состояние из соответствующего сохранённого состояния, сохранённого вызовом gtk_snapshot_save().
Необходимо очистить все сохранённые состояния соответствующими вызовами gtk_snapshot_restore().
Параметры
snapshot |
gtk_snapshot_restore ()
void
gtk_snapshot_restore (GtkSnapshot *snapshot); Восстанавливает snapshot до состояния, сохранённого предыдущим вызовом gtk_snapshot_save(), и удаляет это состояние из стека сохранённых состояний.
Параметры
snapshot | объект GtkSnapshot |
gtk_snapshot_transform ()
void gtk_snapshot_transform (GtkSnapshot *snapshot,GskTransform *transform);
Преобразует систему координат snapshot с помощью заданного transform.
Параметры
snapshot | объект GtkSnapshot | |
transform | преобразование для применения. | [allow-none] |
gtk_snapshot_transform_matrix ()
void gtk_snapshot_transform_matrix (GtkSnapshot *snapshot,const graphene_matrix_t *matrix);
Преобразует систему координат snapshot с помощью заданной matrix.
Параметры
snapshot | объект GtkSnapshot | |
matrix | матрица, с которой будет умножаться преобразование |
gtk_snapshot_translate ()
void gtk_snapshot_translate (GtkSnapshot *snapshot,const graphene_point_t *point);
Производит сдвиг системы координат snapshot на point в двумерном пространстве.
Параметры
snapshot | объект GtkSnapshot | |
point | точка, на которую необходимо сдвинуть снимок |
gtk_snapshot_translate_3d ()
void gtk_snapshot_translate_3d (GtkSnapshot *snapshot,const graphene_point3d_t *point);
Производит сдвиг системы координат snapshot на point.
Параметры
snapshot | объект GtkSnapshot | |
point | точка, на которую необходимо сдвинуть снимок |
gtk_snapshot_rotate ()
void gtk_snapshot_rotate (GtkSnapshot *snapshot,float angle);
Поворачивает систему координат @snapshot на angle градусов в 2D пространстве — или, говоря на языке 3D, вокруг оси z.
Параметры
snapshot | объект GtkSnapshot | |
angle | угол поворота в градусах (по часовой стрелке) |
gtk_snapshot_rotate_3d ()
void gtk_snapshot_rotate_3d (GtkSnapshot *snapshot,float angle,const graphene_vec3_t *axis);
Поворачивает систему координат snapshot на angle градусов вокруг axis.
Для поворота в 2D пространстве используйте gsk_transform_rotate().
Параметры
snapshot | объект GtkSnapshot | |
angle | угол поворота в градусах (по часовой стрелке) | |
axis | ось поворота |
gtk_snapshot_scale ()
void gtk_snapshot_scale (GtkSnapshot *snapshot,float factor_x,float factor_y);
Масштабирует систему координат snapshot в двумерном пространстве с заданными коэффициентами.
Используйте gtk_snapshot_scale_3d() для масштабирования во всех 3 измерениях.
Параметры
snapshot | объект GtkSnapshot | |
factor_x | коэффициент масштабирования по оси X | |
factor_y | коэффициент масштабирования по оси Y |
gtk_snapshot_scale_3d ()
void gtk_snapshot_scale_3d (GtkSnapshot *snapshot,float factor_x,float factor_y,float factor_z);
Масштабирует систему координат snapshot с заданными коэффициентами.
Параметры
snapshot | объект GtkSnapshot | |
factor_x | коэффициент масштабирования по оси X | |
factor_y | коэффициент масштабирования по оси Y | |
factor_z | коэффициент масштабирования по оси Z |
gtk_snapshot_perspective ()
void gtk_snapshot_perspective (GtkSnapshot *snapshot,float depth);
Применяет преобразование перспективного проецирования.
Подробную информацию см. в gsk_transform_perspective().
Параметры
snapshot | объект GtkSnapshot | |
depth | расстояние до плоскости z=0 |
gtk_snapshot_append_node ()
void gtk_snapshot_append_node (GtkSnapshot *snapshot,GskRenderNode *node);
Добавляет node к текущему узлу отрисовки snapshot без изменения текущего узла. Если у snapshot ещё нет текущего узла, node станет начальным узлом.
Параметры
snapshot | объект GtkSnapshot | |
node | объект GskRenderNode |
gtk_snapshot_append_cairo ()
cairo_t * gtk_snapshot_append_cairo (GtkSnapshot *snapshot,const graphene_rect_t *bounds);
Создаёт новый узел отрисовки и добавляет его к текущему узлу отрисовки snapshot без изменения текущего узла.
Параметры
snapshot | объект GtkSnapshot | |
bounds | пределы для нового узла |
Возвращаемое значение
объект cairo_t, подходящий для отрисовки содержимого вновь созданного узла отрисовки
gtk_snapshot_append_texture ()
void gtk_snapshot_append_texture (GtkSnapshot *snapshot,GdkTexture *texture,const graphene_rect_t *bounds);
Создаёт новый узел отрисовки, рисующий texture в заданном bounds и добавляет его к текущему узлу отрисовки snapshot.
Параметры
snapshot | объект GtkSnapshot | |
texture | текстура GdkTexture для отрисовки | |
bounds | границы нового узла |
gtk_snapshot_append_color ()
void gtk_snapshot_append_color (GtkSnapshot *snapshot,const GdkRGBA *color,const graphene_rect_t *bounds);
Создаёт новый узел отрисовки, рисующий заданный color в заданном bounds и добавляет его к текущему узлу отрисовки snapshot.
Следует избегать вызова этой функции, если color прозрачна.
Параметры
snapshot | объект GtkSnapshot | |
color | цвет GdkRGBA для отрисовки | |
bounds | границы нового узла |
gtk_snapshot_append_layout ()
void gtk_snapshot_append_layout (GtkSnapshot *snapshot,PangoLayout *layout,const GdkRGBA *color);
Создаёт узлы отрисовки для отрисовки layout в заданном переднем color и добавляет их к текущему узлу snapshot, без изменения текущего узла.
Параметры
snapshot | объект GtkSnapshot | |
layout | объект PangoLayout для отрисовки | |
color | цвет переднего плана для отрисовки макета |
gtk_snapshot_append_linear_gradient ()
void gtk_snapshot_append_linear_gradient (GtkSnapshot *snapshot,const graphene_rect_t *bounds,const graphene_point_t *start_point,const graphene_point_t *end_point,const GskColorStop *stops,gsize n_stops);
Добавляет узел линейного градиента с заданными оттенками к snapshot .
Параметры
snapshot | объект GtkSnapshot | |
bounds | прямоугольник для отрисовки линейного градиента | |
start_point | точка начала линейного градиента | |
end_point | точка окончания линейного градиента | |
stops | указатель на массив GskColorStop, определяющий градиент. | [массив length=n_stops] |
n_stops | количество элементов в |
gtk_snapshot_append_repeating_linear_gradient ()
void gtk_snapshot_append_repeating_linear_gradient (GtkSnapshot *snapshot,const graphene_rect_t *bounds,const graphene_point_t *start_point,const graphene_point_t *end_point,const GskColorStop *stops,gsize n_stops);
Добавляет узел повторяющегося линейного градиента с заданными оттенками к snapshot.
Параметры
snapshot | объект GtkSnapshot | |
bounds | прямоугольник для отрисовки линейного градиента | |
start_point | точка начала линейного градиента | |
end_point | точка окончания линейного градиента | |
stops | указатель на массив GskColorStop, определяющий градиент. | [массив length=n_stops] |
n_stops | количество элементов в |
gtk_snapshot_append_conic_gradient ()
void gtk_snapshot_append_conic_gradient (GtkSnapshot *snapshot,const graphene_rect_t *bounds,const graphene_point_t *center,float rotation,const GskColorStop *stops,gsize n_stops);
Добавляет узел конического градиента с заданными оттенками к snapshot.
Параметры
snapshot | объект GtkSnapshot | |
bounds | прямоугольник для отрисовки градиента | |
center | центр конического градиента | |
rotation | поворот по часовой стрелке в градусах начального угла. 0 означает, что начальный угол находится вверху. | |
stops | указатель на массив GskColorStop, определяющий градиент. | [массив length=n_stops] |
n_stops | количество элементов в |
gtk_snapshot_append_border ()
void gtk_snapshot_append_border (GtkSnapshot *snapshot,const GskRoundedRect *outline,const float border_width[4],const GdkRGBA border_color[4]);
Добавляет прямоугольник обводки в заданном outline. Четыре стороны границы могут иметь разные ширины и цвета.
Параметры
snapshot | объект GtkSnapshot | |
outline | объект GskRoundedRect, описывающий контур границы | |
border_width | ширина штриха границы для верхней, правой, нижней и левой стороны соответственно. | [массив fixed-size=4] |
border_color | цвет, используемый для верхней, правой, нижней и левой стороны. | [массив fixed-size=4] |
gtk_snapshot_append_inset_shadow ()
void gtk_snapshot_append_inset_shadow (GtkSnapshot *snapshot,const GskRoundedRect *outline,const GdkRGBA *color,float dx,float dy,float spread,float blur_radius);
Добавляет тень с отступом в заданный прямоугольник outline.
Параметры
snapshot | объект GtkSnapshot | |
outline | контур области, окружённой тенью | |
color | цвет тени | |
dx | горизонтальное смещение тени | |
dy | вертикальное смещение тени | |
spread | распространение тени внутрь | |
blur_radius | степень размытия тени |
gtk_snapshot_append_outset_shadow ()
void gtk_snapshot_append_outset_shadow (GtkSnapshot *snapshot,const GskRoundedRect *outline,const GdkRGBA *color,float dx,float dy,float spread,float blur_radius);
Добавляет тень с выступом вокруг заданной области outline .
Параметры
snapshot | объект GtkSnapshot | |
outline | контур области, окружённой тенью | |
color | цвет тени | |
dx | горизонтальное смещение тени | |
dy | вертикальное смещение тени | |
spread | распространение тени наружу | |
blur_radius | степень размытия тени |
gtk_snapshot_append_radial_gradient ()
void gtk_snapshot_append_radial_gradient (GtkSnapshot *snapshot,const graphene_rect_t *bounds,const graphene_point_t *center,float hradius,float vradius,float start,float end,const GskColorStop *stops,gsize n_stops);
Добавляет узел радиального градиента с заданными цветами в snapshot .
Параметры
snapshot | объект GtkSnapshot | |
bounds | прямоугольник для отрисовки радиального градиента | |
center | центр радиального градиента | |
hradius | горизонтальный радиус | |
vradius | вертикальный радиус | |
start | начальная точка (по горизонтали) | |
end | конечная точка (по горизонтали) | |
stops | указатель на массив GskColorStop, определяющий градиент. | [массив length=n_stops] |
n_stops | количество элементов в |
gtk_snapshot_append_repeating_radial_gradient ()
void gtk_snapshot_append_repeating_radial_gradient (GtkSnapshot *snapshot,const graphene_rect_t *bounds,const graphene_point_t *center,float hradius,float vradius,float start,float end,const GskColorStop *stops,gsize n_stops);
Добавляет узел повторяющегося радиального градиента с заданными цветами в snapshot .
Параметры
snapshot | объект GtkSnapshot | |
bounds | прямоугольник для отрисовки радиального градиента | |
center | центр радиального градиента | |
hradius | горизонтальный радиус | |
vradius | вертикальный радиус | |
start | начальная точка (по горизонтали) | |
end | конечная точка (по горизонтали) | |
stops | указатель на массив GskColorStop, определяющий градиент. | [массив length=n_stops] |
n_stops | количество элементов в |
gtk_snapshot_render_insertion_cursor ()
void gtk_snapshot_render_insertion_cursor (GtkSnapshot *snapshot,GtkStyleContext *context,double x,double y,PangoLayout *layout,int index,PangoDirection direction);
Отрисовывает курсор вставки текста, используя snapshot в указанном индексе layout.
Параметры
snapshot | объект для отрисовки | |
context | объект GtkStyleContext | |
x | координата X начала | |
y | координата Y начала | |
layout | объект PangoLayout текста | |
index | индекс в объекте PangoLayout | |
direction | направление текста PangoDirection |
gtk_snapshot_render_background ()
void gtk_snapshot_render_background (GtkSnapshot *snapshot,GtkStyleContext *context,double x,double y,double width,double height);
Создаёт узел отрисовки для фонового CSS согласно context и добавляет его к текущему узлу snapshot, не меняя текущий узел.
Параметры
snapshot | объект GtkSnapshot | |
context | используемый GtkStyleContext | |
x | координата X начала прямоугольника | |
y | координата Y начала прямоугольника | |
width | ширина прямоугольника | |
height | высота прямоугольника |
gtk_snapshot_render_frame ()
void gtk_snapshot_render_frame (GtkSnapshot *snapshot,GtkStyleContext *context,double x,double y,double width,double height);
Создаёт узел отрисовки для рамки CSS в соответствии с context и добавляет его к текущему узлу snapshot без изменения текущего узла.
Параметры
snapshot | объект GtkSnapshot | |
context | используемый GtkStyleContext | |
x | начало координаты X прямоугольника | |
y | начало координаты Y прямоугольника | |
width | ширина прямоугольника | |
height | высота прямоугольника |
gtk_snapshot_render_focus ()
void gtk_snapshot_render_focus (GtkSnapshot *snapshot,GtkStyleContext *context,double x,double y,double width,double height);
Создаёт узел отрисовки для контура фокуса в соответствии с context и добавляет его к текущему узлу snapshot без изменения текущего узла.
Параметры
snapshot | объект GtkSnapshot | |
context | используемый GtkStyleContext | |
x | начало координаты X прямоугольника | |
y | начало координаты Y прямоугольника | |
width | ширина прямоугольника | |
height | высота прямоугольника |
gtk_snapshot_render_layout ()
void gtk_snapshot_render_layout (GtkSnapshot *snapshot,GtkStyleContext *context,double x,double y,PangoLayout *layout);
Создаёт узел отрисовки для отображения layout в соответствии с информацией о стиле в context и добавляет его к текущему узлу snapshot без изменения текущего узла.
Параметры
snapshot | объект GtkSnapshot | |
context | используемый GtkStyleContext | |
x | начало координаты X прямоугольника | |
y | начало координаты Y прямоугольника | |
layout | объект PangoLayout для отображения |
Типы и значения
GtkSnapshot
typedef GdkSnapshot GtkSnapshot;
© 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/GtkSnapshot.html