如何触发或强制GTK中的CSS转换?

时间:2017-06-06 23:10:18

标签: c gtk gtk3

当我点击按钮时,我希望我的GtkTextView动画过渡到不同的背景颜色。这就是我的尝试:

#include <gtk/gtk.h>

static GtkWidget *window, *fixed, *text_view, *button;

static void button_clicked(GtkWidget *widget, gpointer data) {

    GtkStyleContext *context = gtk_widget_get_style_context(text_view);
    gtk_style_context_add_class(context, "green-background");
}

static void app_activate(GtkApplication *app, gpointer user_data) {

    GtkCssProvider *cssProvider = gtk_css_provider_new();
    gtk_style_context_add_provider_for_screen(gdk_screen_get_default(), GTK_STYLE_PROVIDER(cssProvider), GTK_STYLE_PROVIDER_PRIORITY_USER);
    gtk_css_provider_load_from_path(cssProvider, "sandbox.css", NULL);

    window = gtk_application_window_new(app);
    gtk_window_set_title(GTK_WINDOW(window), "Sandbox");
    gtk_widget_set_size_request(GTK_WIDGET(window), 400, 250);
    gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);

    fixed = gtk_fixed_new();

    button = gtk_button_new_with_label("Button");
    gtk_widget_set_size_request(GTK_WIDGET(button), 50, 25);
    g_signal_connect(button, "clicked", G_CALLBACK(button_clicked), NULL);

    text_view = gtk_text_view_new();
    gtk_widget_set_size_request(GTK_WIDGET(text_view), 200, 100);

    gtk_fixed_put(GTK_FIXED(fixed), button, 10, 10);
    gtk_fixed_put(GTK_FIXED(fixed), text_view, 100, 100);

    gtk_container_add(GTK_CONTAINER(window), fixed);    

    gtk_widget_show_all(window);
    gtk_window_move(GTK_WINDOW(window), 10, 10);
}

int main(int argc, char **argv) {

    GtkApplication *app;
    int status;

    app = gtk_application_new("the.application.id", G_APPLICATION_FLAGS_NONE);
    g_signal_connect(app, "activate", G_CALLBACK(app_activate), NULL);

    status = g_application_run(G_APPLICATION(app), argc, argv);

    g_object_unref(app);
    return status;
}

这是我的CSS文件( sandbox.css ):

GtkTextView {
    transition: background-color 1000ms linear;
}

.green-background {
    background-color: green;
}

当我点击按钮而不是转换时,会立即更改GtkTextView的背景颜色。

我正在使用GTK版本3.18.9。​​

0 个答案:

没有答案