Я ищу что-то вроде того, что overflow: hidden
делает в HTML и CSS в GTK.
Пример
Как вы можете видеть на изображении ниже,У нас есть поле, в котором есть 2 дочерних элемента. Родительский виджет получил закругленные углы на border-radius: 20px
, но, поскольку Мы не предоставили border-radius
дочерним элементам, они вышли за пределы родительской области рисования.
Пример изображения
Я знаю, что могу легко предоставить border-radius
детям, но это работает только в этом примере: |Представьте, что у нас есть 100000 иерархий дочерних виджетов, поэтому я ищу способ заставить детей уважать их родительскую область рисования.
Я не думаю, что это станет возможным с помощью CSS, поэтому мы должны принять решение, используяGTK и Каир, чтобы сделать это.
Благодарю вас в ожидании.
Код, который произвел изображение
#include <gtk/gtk.h>
static void
app_activate(GtkApplication *app)
{
GtkWidget *window;
GtkWidget *parentbox;
GtkWidget *childbox1;
GtkWidget *childbox2;
window = gtk_application_window_new(app);
gtk_window_set_default_size(GTK_WINDOW(window), 540, 360);
parentbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 16);
childbox1 = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 16);
childbox2 = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 16);
GtkStyleContext *parentcontext;
parentcontext = gtk_widget_get_style_context(GTK_WIDGET(parentbox));
gtk_style_context_add_class(GTK_STYLE_CONTEXT(parentcontext), "parentbox");
GtkStyleContext *child1context;
child1context = gtk_widget_get_style_context(GTK_WIDGET(childbox1));
gtk_style_context_add_class(GTK_STYLE_CONTEXT(child1context), "childbox");
GtkStyleContext *child2context;
child2context = gtk_widget_get_style_context(GTK_WIDGET(childbox2));
gtk_style_context_add_class(GTK_STYLE_CONTEXT(child2context), "childbox");
gtk_box_pack_start(GTK_BOX(parentbox), childbox1, TRUE, TRUE, 0);
gtk_box_pack_start(GTK_BOX(parentbox), childbox2, TRUE, TRUE, 0);
gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(parentbox));
gtk_widget_show_all(window);
}
int
main(int argc, char *argv[])
{
GtkApplication *app;
int status;
app = gtk_application_new(
"com.myapp",
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;
}
Стили
.parentbox {
margin: 40px;
background-color: rgba(120, 80, 40, 0.5);
border-radius: 20px;
}
.childbox {
background-color: rgba(40, 80, 120, 0.5);
}