Как установить радиальный градиент (рисунок) CSS на поверхности Каира в GTK4?CSS

Разбираемся в CSS
Ответить Пред. темаСлед. тема
Anonymous
 Как установить радиальный градиент (рисунок) CSS на поверхности Каира в GTK4?

Сообщение Anonymous »

Я пытаюсь нарисовать круг в Gtk4 GtkDrawingarea, используя CSS. А затем щелкнув по нему, он сохранится в формате PNG. Но не удалось перенести рисунок (градиент) из области рисования на поверхность cairo (cairo_surface_t).
Можно ли каким-либо образом сохранить рисунок, выполненный через css? Вот мой код,

Код: Выделить всё

#include 

//draw function
static void
draw_function (GtkDrawingArea *darea,
cairo_t        *cr,
int             width,
int             height,
gpointer        user_data)
{
GdkDisplay *display = gdk_display_get_default ();
GtkCssProvider* provider = gtk_css_provider_new ();
gtk_css_provider_load_from_data (provider,
"#darea { border-radius: 50%;"
"  background: radial-gradient(#FFFFFF, #000000); "
"}",-1);
gtk_style_context_add_provider (gtk_widget_get_style_context (GTK_WIDGET (darea)),
GTK_STYLE_PROVIDER (provider),GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);

g_object_unref(provider);
}

/*save as png on click*/
void click_event (GtkEventController *gesture,
gdouble x,
gdouble y,
gpointer user_data)
{
//user_data = darea (widget)
int w1 = gtk_widget_get_allocated_width(user_data);
int h1 = gtk_widget_get_allocated_height(user_data);

/*paintable from the darea widget*/
GdkPaintable* paintable = gtk_widget_paintable_new (user_data);

/*take snapshoot*/
GdkSnapshot* snapshot = gtk_snapshot_new();
gdk_paintable_snapshot (paintable, snapshot, w1, h1);

graphene_rect_t *rec = graphene_rect_alloc ();
GskRenderNode* ren = gsk_cairo_node_new (rec);

cairo_t* cr = gtk_snapshot_append_cairo (snapshot, rec);
cairo_surface_t* srf = gsk_cairo_node_get_surface ((GskRenderNode *)ren);

cairo_surface_write_to_png (srf, "blur.png"); //use it -error Segmentation fault
}

static void
activate (GtkApplication* app,
gpointer        user_data)
{
GtkWidget *window;
window = gtk_application_window_new (app);
gtk_window_set_title (GTK_WINDOW (window), "Window");
gtk_window_set_default_size (GTK_WINDOW (window), 200, 200);
gtk_window_present (GTK_WINDOW (window));

GtkWidget *darea = gtk_drawing_area_new();
gtk_widget_set_name (darea, "darea");
gtk_drawing_area_set_content_width (GTK_DRAWING_AREA (darea), 350);
gtk_drawing_area_set_content_height (GTK_DRAWING_AREA (darea), 350);
gtk_drawing_area_set_draw_func (GTK_DRAWING_AREA (darea),
draw_function,
NULL, NULL);
gtk_window_set_child (GTK_WINDOW (window), darea);

//create gesture for mouse click event
GtkGesture * = gtk_gesture_click_new();
gtk_gesture_single_set_button(GTK_GESTURE_SINGLE(gesture), 0);
gtk_widget_add_controller(darea,(GTK_EVENT_CONTROLLER(gesture)));
g_signal_connect (gesture, "pressed", G_CALLBACK (click_event), darea);

gtk_window_present (GTK_WINDOW(window));
}

int
main (int    argc,
char **argv)
{
GtkApplication *app;
int status;
app = gtk_application_new ("org.gtk.example", G_APPLICATION_DEFAULT_FLAGS);
g_signal_connect (app, "activate", G_CALLBACK (activate), NULL);
status = g_application_run (G_APPLICATION (app), argc, argv);
g_object_unref (app);

return status;
}
Но он не работает, он сломался!

Подробнее здесь: https://stackoverflow.com/questions/786 ... ce-in-gtk4
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как установить радиальный градиент (рисунок) CSS на поверхности Каира и сохранить его как png в gtk4?
    Anonymous » » в форуме CSS
    0 Ответы
    21 Просмотры
    Последнее сообщение Anonymous
  • Как создать радиальный градиент в CSS?
    Anonymous » » в форуме CSS
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Как создать радиальный градиент в CSS? [закрыто]
    Anonymous » » в форуме CSS
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Как создать радиальный градиент в CSS? [закрыто]
    Anonymous » » в форуме CSS
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Как использовать радиальный градиент в Tailwindcss
    Anonymous » » в форуме CSS
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous

Вернуться в «CSS»