carousel: Simplify arrow handling

The CSS-based animation is incompatible with the layout machinery
of GTK4, and we can't easily reintroduce it without another major
surgery in the carousel code, so just drop it for now.
This commit is contained in:
Georges Basile Stavracas Neto 2022-07-12 17:58:49 -03:00
parent 15172723dd
commit b25a4e2119
1 changed files with 2 additions and 31 deletions

View File

@ -76,7 +76,6 @@ struct _MctCarousel {
MctCarouselItem *selected_item; MctCarouselItem *selected_item;
GtkWidget *last_box; GtkWidget *last_box;
GtkWidget *arrow; GtkWidget *arrow;
gint arrow_start_x;
/* Widgets */ /* Widgets */
GtkStack *stack; GtkStack *stack;
@ -128,8 +127,6 @@ mct_carousel_move_arrow (MctCarousel *self)
GtkStyleContext *context; GtkStyleContext *context;
gchar *css; gchar *css;
gint end_x; gint end_x;
GtkSettings *settings;
gboolean animations;
if (!self->selected_item) if (!self->selected_item)
return; return;
@ -141,29 +138,7 @@ mct_carousel_move_arrow (MctCarousel *self)
gtk_style_context_remove_provider (context, self->provider); gtk_style_context_remove_provider (context, self->provider);
g_clear_object (&self->provider); g_clear_object (&self->provider);
settings = gtk_widget_get_settings (GTK_WIDGET (self)); css = g_strdup_printf ("* { margin-left: %dpx; }", end_x);
g_object_get (settings, "gtk-enable-animations", &animations, NULL);
/* Animate the arrow movement if animations are enabled. Otherwise,
* jump the arrow to the right location instantly. */
if (animations)
{
css = g_strdup_printf ("@keyframes arrow_keyframes-%d-%d {\n"
" from { margin-left: %dpx; }\n"
" to { margin-left: %dpx; }\n"
"}\n"
"* {\n"
" animation-name: arrow_keyframes-%d-%d;\n"
"}\n",
self->arrow_start_x, end_x,
self->arrow_start_x, end_x,
self->arrow_start_x, end_x);
}
else
{
css = g_strdup_printf ("* { margin-left: %dpx }", end_x);
}
self->provider = GTK_STYLE_PROVIDER (gtk_css_provider_new ()); self->provider = GTK_STYLE_PROVIDER (gtk_css_provider_new ());
gtk_css_provider_load_from_data (GTK_CSS_PROVIDER (self->provider), css, -1); gtk_css_provider_load_from_data (GTK_CSS_PROVIDER (self->provider), css, -1);
gtk_style_context_add_provider (context, self->provider, GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); gtk_style_context_add_provider (context, self->provider, GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
@ -246,10 +221,7 @@ mct_carousel_select_item (MctCarousel *self,
} }
if (self->selected_item != NULL) if (self->selected_item != NULL)
{
page_changed = (self->selected_item->page != item->page); page_changed = (self->selected_item->page != item->page);
self->arrow_start_x = mct_carousel_item_get_x (self->selected_item, self);
}
self->selected_item = item; self->selected_item = item;
self->visible_page = item->page; self->visible_page = item->page;
@ -501,7 +473,6 @@ mct_carousel_layout_allocate (GtkLayoutManager *layout_manager,
if (gtk_stack_get_transition_running (carousel->stack)) if (gtk_stack_get_transition_running (carousel->stack))
return; return;
carousel->arrow_start_x = mct_carousel_item_get_x (carousel->selected_item, carousel);
mct_carousel_move_arrow (carousel); mct_carousel_move_arrow (carousel);
} }