[libhandy/wip/haecker-felix/flap-widget: 79/98] Implement last animation pieces. Phew.
- From: Alexander Mikhaylenko <alexm src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libhandy/wip/haecker-felix/flap-widget: 79/98] Implement last animation pieces. Phew.
- Date: Mon, 3 Aug 2020 16:27:56 +0000 (UTC)
commit eaa77a2cfab3c14ce2cecf11209b94438f6491b7
Author: Felix Häcker <haeckerfelix gnome org>
Date: Mon Jul 27 21:48:51 2020 +0200
Implement last animation pieces. Phew.
src/hdy-flap.c | 81 +++++++++++++++++++++++++++++++++++++++++++++++++++++++---
1 file changed, 78 insertions(+), 3 deletions(-)
---
diff --git a/src/hdy-flap.c b/src/hdy-flap.c
index 2d8f5629..61ed6ef8 100644
--- a/src/hdy-flap.c
+++ b/src/hdy-flap.c
@@ -150,10 +150,16 @@ hdy_flap_set_property (GObject *object,
}
}
+static gdouble
+ease_out_cubic (gdouble t) {
+ gdouble p;
+ p = t -1;
+ return p * p * p + 1;
+}
+
static gboolean
-reveal_tick_cb (HdyFlap *self,
- GdkFrameClock *frame_clock,
- gpointer user_data)
+reveal_tick_cb (HdyFlap *self,
+ GdkFrameClock* frame_clock)
{
guint64 frame_time = gdk_frame_clock_get_frame_time (frame_clock) / 1000;
gdouble t = (gdouble) (frame_time - self->reveal_start_time) / self->reveal_duration;
@@ -177,6 +183,73 @@ reveal_tick_cb (HdyFlap *self,
return TRUE;
}
+static gboolean
+overlay_tick_cb (HdyFlap *self,
+ GdkFrameClock* frame_clock)
+{
+ gdouble t;
+ gint64 frame_time;
+
+ frame_time = gdk_frame_clock_get_frame_time (frame_clock) / 1000;
+ t = (frame_time - self->overlay_start_time) / self->overlay_duration;
+
+ if (t >= 1) {
+ self->overlay_progress = self->overlay ? 1 : 0;
+ self->overlay_tick_cb_id = 0;
+
+ gtk_widget_queue_resize ((GtkWidget*) self);
+
+ return FALSE;
+ }
+
+ self->overlay_progress = ease_out_cubic (t);
+
+ if (!self->overlay)
+ self->overlay_progress = 1 - self->overlay_progress;
+
+ gtk_widget_queue_resize ((GtkWidget*) self);
+
+ return TRUE;
+}
+
+static void
+animate_overlay (HdyFlap *self)
+{
+ if (!hdy_get_enable_animations ((GtkWidget*) self) || !gtk_widget_get_mapped ((GtkWidget*) self)) {
+ self->overlay_progress = self->overlay ? 1 : 0;
+ gtk_widget_queue_resize ((GtkWidget*) self);
+ return;
+ }
+
+ if (self->overlay_tick_cb_id != 0) {
+ gtk_widget_remove_tick_callback ((GtkWidget*) self, self->overlay_tick_cb_id);
+ self->overlay_tick_cb_id = 0;
+ }
+
+ self->overlay_start_time = gdk_frame_clock_get_frame_time (gtk_widget_get_frame_clock ((GtkWidget*) self))
/ 1000;
+ self->overlay_progress = self->overlay ? 0 : 1;
+ self->overlay_tick_cb_id = gtk_widget_add_tick_callback ((GtkWidget*) self, (GtkTickCallback)
overlay_tick_cb, &self, g_object_unref);
+}
+
+static void
+animate_reveal (HdyFlap *self)
+{
+ if (!hdy_get_enable_animations ((GtkWidget*) self) || !gtk_widget_get_mapped ((GtkWidget*) self)) {
+ self->reveal_progress = self->reveal_flap ? 1 : 0;
+ gtk_widget_queue_resize ((GtkWidget*) self);
+ return;
+ }
+
+ if (self->reveal_tick_cb_id != 0) {
+ gtk_widget_remove_tick_callback ((GtkWidget*) self, self->reveal_tick_cb_id);
+ self->reveal_tick_cb_id = 0;
+ }
+
+ self->reveal_start_time = gdk_frame_clock_get_frame_time (gtk_widget_get_frame_clock ((GtkWidget*) self))
/ 1000;
+ self->reveal_progress = self->reveal_flap ? 0 : 1;
+ self->reveal_tick_cb_id = gtk_widget_add_tick_callback ((GtkWidget*) self, (GtkTickCallback)
reveal_tick_cb, &self, g_object_unref);
+}
+
static gint
adjust_for_overlay (HdyFlap *self,
gint value)
@@ -769,6 +842,7 @@ hdy_flap_set_reveal_flap (HdyFlap *self,
return;
self->reveal_flap = reveal_flap;
+ animate_reveal(self);
g_object_notify_by_pspec (G_OBJECT (self), props[PROP_REVEAL_FLAP]);
}
@@ -807,6 +881,7 @@ hdy_flap_set_overlay (HdyFlap *self,
return;
self->overlay = overlay;
+ animate_overlay(self);
g_object_notify_by_pspec (G_OBJECT (self), props[PROP_OVERLAY]);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]