[libhandy/wip/haecker-felix/flap-widget] Fixes
- From: Alexander Mikhaylenko <alexm src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libhandy/wip/haecker-felix/flap-widget] Fixes
- Date: Tue, 17 Nov 2020 11:12:52 +0000 (UTC)
commit d4477f2748a246bfc6f61804bf3c56d1be6a13e6
Author: Alexander Mikhaylenko <alexm gnome org>
Date: Tue Nov 17 14:42:05 2020 +0500
Fixes
src/hdy-flap.c | 513 ++++++++++++++++++++++++++++++---------------------------
src/hdy-flap.h | 70 ++++----
2 files changed, 306 insertions(+), 277 deletions(-)
---
diff --git a/src/hdy-flap.c b/src/hdy-flap.c
index b47d7818..04141169 100644
--- a/src/hdy-flap.c
+++ b/src/hdy-flap.c
@@ -19,7 +19,7 @@
* SECTION:hdy-flap
* @Title: HdyFlap
*
- * Since: 1.0
+ * Since: 1.1
*/
struct _HdyFlap
@@ -27,7 +27,7 @@ struct _HdyFlap
GtkBin parent_instance;
GtkWidget *flap;
- HdyFlapFoldPolicy flap_fold_policy;
+ HdyFlapFoldPolicy fold_policy;
GtkPackType flap_position;
gboolean reveal_flap;
gboolean locked;
@@ -62,7 +62,7 @@ enum {
PROP_0,
PROP_FLAP,
- PROP_FLAP_FOLD_POLICY,
+ PROP_FOLD_POLICY,
PROP_FLAP_POSITION,
PROP_REVEAL_FLAP,
PROP_LOCKED,
@@ -119,8 +119,8 @@ hdy_flap_get_property (GObject *object,
case PROP_FLAP:
g_value_set_object (value, hdy_flap_get_flap (self));
break;
- case PROP_FLAP_FOLD_POLICY:
- g_value_set_enum (value, hdy_flap_get_flap_fold_policy (self));
+ case PROP_FOLD_POLICY:
+ g_value_set_enum (value, hdy_flap_get_fold_policy (self));
break;
case PROP_FLAP_POSITION:
g_value_set_enum (value, hdy_flap_get_flap_position (self));
@@ -160,8 +160,8 @@ hdy_flap_set_property (GObject *object,
case PROP_FLAP:
hdy_flap_set_flap (self, g_value_get_object (value));
break;
- case PROP_FLAP_FOLD_POLICY:
- hdy_flap_set_flap_fold_policy (self, g_value_get_enum (value));
+ case PROP_FOLD_POLICY:
+ hdy_flap_set_fold_policy (self, g_value_get_enum (value));
break;
case PROP_FLAP_POSITION:
hdy_flap_set_flap_position (self, g_value_get_enum (value));
@@ -191,29 +191,12 @@ hdy_flap_finalize (GObject *object)
{
HdyFlap *self = HDY_FLAP (object);
- if (self->overlay_tick_cb_id != 0) {
- gtk_widget_remove_tick_callback (GTK_WIDGET (self), self->overlay_tick_cb_id);
- self->overlay_tick_cb_id = 0;
- }
-
- if (self->reveal_tick_cb_id != 0) {
- gtk_widget_remove_tick_callback (GTK_WIDGET (self), self->reveal_tick_cb_id);
- self->overlay_tick_cb_id = 0;
- }
-
g_clear_object (&self->shadow_helper);
g_clear_object (&self->tracker);
G_OBJECT_CLASS (hdy_flap_parent_class)->finalize (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)
@@ -227,7 +210,7 @@ reveal_tick_cb (HdyFlap *self,
gtk_widget_queue_resize (GTK_WIDGET (self));
- return FALSE;
+ return G_SOURCE_REMOVE;
}
self->reveal_progress = hdy_lerp (self->reveal_start_progress,
@@ -236,18 +219,15 @@ reveal_tick_cb (HdyFlap *self,
gtk_widget_queue_resize (GTK_WIDGET (self));
- return TRUE;
+ return G_SOURCE_CONTINUE;
}
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 = (gdouble) (frame_time - self->overlay_start_time) / self->overlay_duration;
+ gint64 frame_time = gdk_frame_clock_get_frame_time (frame_clock) / 1000;
+ gdouble t = (gdouble) (frame_time - self->overlay_start_time) / self->overlay_duration;
if (t >= 1) {
self->overlay_progress = self->folded ? 1 : 0;
@@ -255,36 +235,46 @@ overlay_tick_cb (HdyFlap *self,
gtk_widget_queue_resize (GTK_WIDGET (self));
- return FALSE;
+ return G_SOURCE_REMOVE;
}
- self->overlay_progress = ease_out_cubic (t);
+ self->overlay_progress = hdy_ease_out_cubic (t);
if (!self->folded)
self->overlay_progress = 1 - self->overlay_progress;
gtk_widget_queue_resize (GTK_WIDGET (self));
- return TRUE;
+ return G_SOURCE_CONTINUE;
}
static void
animate_overlay (HdyFlap *self)
{
- if (!hdy_get_enable_animations (GTK_WIDGET (self)) || !gtk_widget_get_mapped (GTK_WIDGET (self))) {
+ GtkWidget *widget = GTK_WIDGET (self);
+ GdkFrameClock *frame_clock;
+
+ if (!hdy_get_enable_animations (widget) ||
+ !gtk_widget_get_mapped (widget)) {
self->overlay_progress = self->folded ? 1 : 0;
- gtk_widget_queue_resize (GTK_WIDGET (self));
+ gtk_widget_queue_resize (widget);
+
return;
}
if (self->overlay_tick_cb_id != 0) {
- gtk_widget_remove_tick_callback (GTK_WIDGET (self), self->overlay_tick_cb_id);
+ gtk_widget_remove_tick_callback (widget, 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 (GTK_WIDGET (self)))
/ 1000;
+ frame_clock = gtk_widget_get_frame_clock (widget);
+
+ self->overlay_start_time = gdk_frame_clock_get_frame_time (frame_clock) / 1000;
self->overlay_progress = self->folded ? 0 : 1;
- self->overlay_tick_cb_id = gtk_widget_add_tick_callback (GTK_WIDGET (self), (GtkTickCallback)
overlay_tick_cb, NULL, NULL);
+ self->overlay_tick_cb_id =
+ gtk_widget_add_tick_callback (widget,
+ (GtkTickCallback) overlay_tick_cb,
+ NULL, NULL);
}
static void
@@ -292,22 +282,32 @@ animate_reveal (HdyFlap *self,
gdouble to,
gint64 duration)
{
- if (!hdy_get_enable_animations (GTK_WIDGET (self)) || !gtk_widget_get_mapped (GTK_WIDGET (self))) {
+ GtkWidget *widget = GTK_WIDGET (self);
+ GdkFrameClock *frame_clock;
+
+ if (!hdy_get_enable_animations (widget) ||
+ !gtk_widget_get_mapped (widget)) {
self->reveal_progress = to;
- gtk_widget_queue_resize (GTK_WIDGET (self));
+ gtk_widget_queue_resize (widget);
+
return;
}
if (self->reveal_tick_cb_id != 0) {
- gtk_widget_remove_tick_callback (GTK_WIDGET (self), self->reveal_tick_cb_id);
+ gtk_widget_remove_tick_callback (widget, 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 (GTK_WIDGET (self)))
/ 1000;
+ frame_clock = gtk_widget_get_frame_clock (widget);
+
+ self->reveal_start_time = gdk_frame_clock_get_frame_time (frame_clock) / 1000;
self->reveal_start_progress = self->reveal_progress;
self->reveal_end_progress = to;
self->reveal_current_duration = duration;
- self->reveal_tick_cb_id = gtk_widget_add_tick_callback (GTK_WIDGET (self), (GtkTickCallback)
reveal_tick_cb, NULL, NULL);
+ self->reveal_tick_cb_id =
+ gtk_widget_add_tick_callback (widget,
+ (GtkTickCallback) reveal_tick_cb,
+ NULL, NULL);
}
static gint
@@ -315,6 +315,7 @@ adjust_for_overlay (HdyFlap *self,
gint value)
{
gdouble progress = MIN (1 - self->overlay_progress, self->reveal_progress);
+
return (gint) round (value * progress);
}
@@ -322,13 +323,9 @@ static GtkPackType
adjust_for_text_direction (HdyFlap *self,
GtkPackType pack_type)
{
- if (gtk_widget_get_direction (GTK_WIDGET (self)) == GTK_TEXT_DIR_RTL) {
- if (pack_type == GTK_PACK_START) {
- return GTK_PACK_END;
- } else {
- return GTK_PACK_START;
- }
- }
+ if (gtk_widget_get_direction (GTK_WIDGET (self)) == GTK_TEXT_DIR_RTL)
+ return (pack_type == GTK_PACK_START) ? GTK_PACK_END : GTK_PACK_START;
+
return pack_type;
}
@@ -364,20 +361,19 @@ end_swipe_cb (HdySwipeTracker *tracker,
static void
set_folded (HdyFlap *self,
- gboolean folded)
+ gboolean folded)
{
- g_return_if_fail (HDY_IS_FLAP (self));
folded = !!folded;
if (self->folded == folded)
return;
self->folded = folded;
- animate_overlay(self);
- if (!self->locked)
- hdy_flap_set_reveal_flap(self, !self->folded);
+ animate_overlay (self);
+ if (!self->locked)
+ hdy_flap_set_reveal_flap (self, !self->folded);
g_object_notify_by_pspec (G_OBJECT (self), props[PROP_FOLDED]);
}
@@ -388,11 +384,11 @@ set_folded (HdyFlap *self,
static void
hdy_flap_measure (GtkWidget *widget,
GtkOrientation orientation,
- int for_size,
- int *minimum,
- int *natural,
- int *minimum_baseline,
- int *natural_baseline)
+ gint for_size,
+ gint *minimum,
+ gint *natural,
+ gint *minimum_baseline,
+ gint *natural_baseline)
{
HdyFlap *self = HDY_FLAP (widget);
GtkWidget *content = gtk_bin_get_child (GTK_BIN (self));
@@ -409,26 +405,41 @@ hdy_flap_measure (GtkWidget *widget,
if (natural_baseline)
*natural_baseline = -1;
- if (orientation == GTK_ORIENTATION_VERTICAL){
- if (content) gtk_widget_get_preferred_height (content, &content_min, &content_nat);
- if (self->flap) gtk_widget_get_preferred_height (self->flap, &flap_min, &flap_nat);
+ if (orientation == GTK_ORIENTATION_VERTICAL) {
+ if (content)
+ gtk_widget_get_preferred_height (content, &content_min, &content_nat);
- if (self->orientation == GTK_ORIENTATION_VERTICAL && self->flap_fold_policy !=
HDY_FLAP_FOLD_POLICY_AUTO){
- *minimum = MAX (content_min + adjust_for_overlay (self, flap_min), flap_min);
- *natural = MAX (content_nat + adjust_for_overlay (self, flap_nat), flap_nat);
- return;
- }
- }
+ if (self->flap)
+ gtk_widget_get_preferred_height (self->flap, &flap_min, &flap_nat);
+
+ if (self->orientation == GTK_ORIENTATION_VERTICAL &&
+ self->fold_policy != HDY_FLAP_FOLD_POLICY_AUTO) {
+ if (minimum)
+ *minimum = MAX (content_min + adjust_for_overlay (self, flap_min), flap_min);
+
+ if (natural)
+ *natural = MAX (content_nat + adjust_for_overlay (self, flap_nat), flap_nat);
+
+ return;
+ }
+ } else {
+ if (content)
+ gtk_widget_get_preferred_width (content, &content_min, &content_nat);
+
+ if (self->flap)
+ gtk_widget_get_preferred_width (self->flap, &flap_min, &flap_nat);
+
+ if (self->orientation == GTK_ORIENTATION_HORIZONTAL &&
+ self->fold_policy != HDY_FLAP_FOLD_POLICY_AUTO) {
- if (orientation == GTK_ORIENTATION_HORIZONTAL){
- if (content) gtk_widget_get_preferred_width (content, &content_min, &content_nat);
- if (self->flap) gtk_widget_get_preferred_width (self->flap, &flap_min, &flap_nat);
+ if (minimum)
+ *minimum = MAX (content_min + adjust_for_overlay (self, flap_min), flap_min);
- if (self->orientation == GTK_ORIENTATION_HORIZONTAL && self->flap_fold_policy !=
HDY_FLAP_FOLD_POLICY_AUTO){
- *minimum = MAX (content_min + adjust_for_overlay (self, flap_min), flap_min);
- *natural = MAX (content_nat + adjust_for_overlay (self, flap_nat), flap_nat);
- return;
- }
+ if (natural)
+ *natural = MAX (content_nat + adjust_for_overlay (self, flap_nat), flap_nat);
+
+ return;
+ }
}
*minimum = MAX (content_min, flap_min);
@@ -450,10 +461,12 @@ get_flap_size (HdyFlap *self,
if (widget_orientation == GTK_ORIENTATION_HORIZONTAL) {
if (self->orientation == GTK_ORIENTATION_HORIZONTAL)
return flap_min_size.width;
+
return widget_alloc->width;
} else {
if (self->orientation == GTK_ORIENTATION_HORIZONTAL)
return widget_alloc->height;
+
return flap_min_size.height;
}
}
@@ -467,10 +480,12 @@ get_content_size (HdyFlap *self,
gint offset = 0;
if (self->orientation == GTK_ORIENTATION_HORIZONTAL)
offset = adjust_for_overlay (self, get_flap_size (self, widget_alloc, GTK_ORIENTATION_HORIZONTAL));
+
return widget_alloc->width - offset;
} else {
if (self->orientation == GTK_ORIENTATION_HORIZONTAL)
return widget_alloc->height;
+
return widget_alloc->height - adjust_for_overlay (self, get_flap_size (self, widget_alloc,
GTK_ORIENTATION_VERTICAL));
}
}
@@ -479,37 +494,34 @@ static void
allocate_flap (HdyFlap *self,
GtkAllocation *widget_alloc)
{
- gint flap_x = 0, flap_y = 0;
+ gint flap_x = widget_alloc->x;
+ gint flap_y = widget_alloc->y;
if (self->orientation == GTK_ORIENTATION_HORIZONTAL) {
- if (self->flap_position == adjust_for_text_direction (self, GTK_PACK_START)) {
- flap_x = widget_alloc->x - (gint) round (get_flap_size(self, widget_alloc,
GTK_ORIENTATION_HORIZONTAL) * (1 - self->reveal_progress));
- flap_y = widget_alloc->y;
- }
- if (self->flap_position == adjust_for_text_direction (self, GTK_PACK_END)) {
- flap_x = widget_alloc->width - (gint) round(get_flap_size(self, widget_alloc,
GTK_ORIENTATION_HORIZONTAL) * self->reveal_progress);
- flap_y = widget_alloc->y;
- }
+
+ if (self->flap_position == adjust_for_text_direction (self, GTK_PACK_START))
+ flap_x -= (gint) round (get_flap_size (self, widget_alloc, GTK_ORIENTATION_HORIZONTAL) * (1 -
self->reveal_progress));
+ else
+ flap_x = widget_alloc->width - (gint) round (get_flap_size (self, widget_alloc,
GTK_ORIENTATION_HORIZONTAL) * self->reveal_progress);
}
if (self->orientation == GTK_ORIENTATION_VERTICAL) {
- if (self->flap_position == GTK_PACK_START) {
- flap_x = widget_alloc->x;
- flap_y = widget_alloc->y - (gint) round (get_flap_size (self, widget_alloc,
GTK_ORIENTATION_VERTICAL) * (1 - self->reveal_progress));
- }
- if (self->flap_position == GTK_PACK_END){
- flap_x = widget_alloc->x;
- flap_y = widget_alloc->height - (gint) round (get_flap_size (self, widget_alloc,
GTK_ORIENTATION_VERTICAL) * self->reveal_progress);
- }
+ if (self->flap_position == GTK_PACK_START)
+ flap_y -= (gint) round (get_flap_size (self, widget_alloc, GTK_ORIENTATION_VERTICAL) * (1 -
self->reveal_progress));
+ else
+ flap_y = widget_alloc->height - (gint) round (get_flap_size (self, widget_alloc,
GTK_ORIENTATION_VERTICAL) * self->reveal_progress);
}
gtk_widget_set_child_visible (self->flap, self->reveal_progress > 0);
+
if (self->reveal_progress > 0) {
GtkAllocation alloc;
+
alloc.x = flap_x;
alloc.y = flap_y;
alloc.width = get_flap_size (self, widget_alloc, GTK_ORIENTATION_HORIZONTAL);
alloc.height = get_flap_size (self, widget_alloc, GTK_ORIENTATION_VERTICAL);
+
gtk_widget_size_allocate (self->flap, &alloc);
}
}
@@ -527,38 +539,31 @@ allocate_content (HdyFlap *self,
if (self->flap) {
gtk_widget_get_preferred_size (self->flap, &flap_min, &flap_nat);
} else {
- flap_min.height = 0;
- flap_min.width = 0;
+ flap_min.height = 0;
+ flap_min.width = 0;
}
gtk_widget_get_preferred_size (content, &content_min, &content_nat);
- if (self->orientation == GTK_ORIENTATION_HORIZONTAL){
- int min = content_min.width + flap_min.width;
- if (self->flap_fold_policy == HDY_FLAP_FOLD_POLICY_AUTO) set_folded (self, widget_alloc->width <= min);
-
- if (self->flap_position == adjust_for_text_direction (self, GTK_PACK_START)){
- content_x = widget_alloc->x + adjust_for_overlay (self, get_flap_size(self, widget_alloc,
GTK_ORIENTATION_HORIZONTAL));
- content_y = widget_alloc->y;
- }
- if (self->flap_position == adjust_for_text_direction (self, GTK_PACK_END)){
- content_x = widget_alloc->x;
- content_y = widget_alloc->y;
- }
- }
+ content_x = widget_alloc->x;
+ content_y = widget_alloc->y;
+
+ if (self->orientation == GTK_ORIENTATION_HORIZONTAL) {
+ gint min = content_min.width + flap_min.width;
+
+ if (self->fold_policy == HDY_FLAP_FOLD_POLICY_AUTO)
+ set_folded (self, widget_alloc->width <= min);
+
+ if (self->flap_position == adjust_for_text_direction (self, GTK_PACK_START))
+ content_x += adjust_for_overlay (self, get_flap_size (self, widget_alloc, GTK_ORIENTATION_HORIZONTAL));
+ } else {
+ gint min = content_min.height + flap_min.height;
+
+ if (self->fold_policy == HDY_FLAP_FOLD_POLICY_AUTO)
+ set_folded (self, widget_alloc->height <= min);
- if (self->orientation == GTK_ORIENTATION_VERTICAL){
- gint min = content_min.height + flap_min.height;
- if (self->flap_fold_policy == HDY_FLAP_FOLD_POLICY_AUTO) set_folded (self, widget_alloc->height <=
min);
-
- if (self->flap_position == GTK_PACK_START){
- content_x = widget_alloc->x;
- content_y = widget_alloc->y + adjust_for_overlay (self, get_flap_size(self, widget_alloc,
GTK_ORIENTATION_VERTICAL));
- }
- if (self->flap_position == GTK_PACK_END){
- content_x = widget_alloc->x;
- content_y = widget_alloc->y;
- }
+ if (self->flap_position == GTK_PACK_START)
+ content_y += adjust_for_overlay (self, get_flap_size (self, widget_alloc, GTK_ORIENTATION_VERTICAL));
}
alloc.x = content_x;
@@ -603,7 +608,7 @@ hdy_flap_get_preferred_width (GtkWidget *widget,
gint *natural)
{
hdy_flap_measure (widget, GTK_ORIENTATION_HORIZONTAL, -1,
- minimum, natural, NULL, NULL);
+ minimum, natural, NULL, NULL);
}
@@ -614,7 +619,7 @@ hdy_flap_get_preferred_height_for_width (GtkWidget *widget,
gint *natural)
{
hdy_flap_measure (widget, GTK_ORIENTATION_VERTICAL, width,
- minimum, natural, NULL, NULL);
+ minimum, natural, NULL, NULL);
}
static void
@@ -623,7 +628,7 @@ hdy_flap_get_preferred_height (GtkWidget *widget,
gint *natural)
{
hdy_flap_measure (widget, GTK_ORIENTATION_VERTICAL, -1,
- minimum, natural, NULL, NULL);
+ minimum, natural, NULL, NULL);
}
static gboolean
@@ -683,46 +688,58 @@ static void
hdy_flap_direction_changed (GtkWidget *widget,
GtkTextDirection previous_direction)
{
- update_swipe_tracker (HDY_FLAP (widget));
+ HdyFlap *self = HDY_FLAP (widget);
+
+ update_swipe_tracker (self);
GTK_WIDGET_CLASS (hdy_flap_parent_class)->direction_changed (widget,
previous_direction);
}
+static void
+hdy_flap_unmap (GtkWidget *widget)
+{
+ HdyFlap *self = HDY_FLAP (widget);
+
+ if (self->overlay_tick_cb_id != 0) {
+ gtk_widget_remove_tick_callback (GTK_WIDGET (self), self->overlay_tick_cb_id);
+ self->overlay_tick_cb_id = 0;
+ }
+
+ if (self->reveal_tick_cb_id != 0) {
+ gtk_widget_remove_tick_callback (GTK_WIDGET (self), self->reveal_tick_cb_id);
+ self->overlay_tick_cb_id = 0;
+ }
+
+ GTK_WIDGET_CLASS (hdy_flap_parent_class)->unmap (widget);
+}
+
static void
hdy_flap_forall (GtkContainer *container,
gboolean include_internals,
GtkCallback callback,
gpointer callback_target)
{
- HdyFlap *self;
- GtkWidget *content;
- self = HDY_FLAP (container);
+ HdyFlap *self = HDY_FLAP (container);
+ GtkWidget *content = gtk_bin_get_child (GTK_BIN (self));
- content = gtk_bin_get_child (GTK_BIN (self));
- if (content) {
+ if (content)
callback (content, callback_target);
- }
- if (self->flap) {
+ if (self->flap)
callback (self->flap, callback_target);
- }
}
static void
-hdy_flap_remove (GtkContainer *base,
+hdy_flap_remove (GtkContainer *container,
GtkWidget *widget)
{
- HdyFlap *self;
- self = HDY_FLAP (base);
+ HdyFlap *self = HDY_FLAP (container);
- g_return_if_fail (widget);
-
- if (widget == self->flap) {
+ if (widget == self->flap)
hdy_flap_set_flap (self, NULL);
- } else {
- gtk_container_remove (GTK_CONTAINER (self), widget);
- }
+ else
+ GTK_CONTAINER_CLASS (hdy_flap_parent_class)->remove (container, widget);
}
static HdySwipeTracker *
@@ -816,6 +833,7 @@ hdy_flap_class_init (HdyFlapClass *klass)
widget_class->size_allocate = hdy_flap_size_allocate;
widget_class->draw = hdy_flap_draw;
widget_class->direction_changed = hdy_flap_direction_changed;
+ widget_class->unmap = hdy_flap_unmap;
container_class->remove = hdy_flap_remove;
container_class->forall = hdy_flap_forall;
@@ -823,103 +841,102 @@ hdy_flap_class_init (HdyFlapClass *klass)
/**
* HdyFlap:flap:
*
- * Since: 1.0
+ * Since: 1.1
*/
props[PROP_FLAP] =
- g_param_spec_object ("flap",
- _("Flap widget"),
- _("Flap Widget"),
- GTK_TYPE_WIDGET,
- G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY);
+ g_param_spec_object ("flap",
+ _("Flap widget"),
+ _("Flap Widget"),
+ GTK_TYPE_WIDGET,
+ G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY);
/**
- * HdyFlap:flap-fold-policy:
+ * HdyFlap:fold-policy:
*
- * Since: 1.0
+ * Since: 1.1
*/
- props[PROP_FLAP_FOLD_POLICY] =
- g_param_spec_enum ("flap-fold-policy",
- _("Flap Fold Policy"),
- _("Flap Fold Policy"),
- HDY_TYPE_FLAP_FOLD_POLICY,
- HDY_FLAP_FOLD_POLICY_AUTO,
- G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY);
+ props[PROP_FOLD_POLICY] =
+ g_param_spec_enum ("fold-policy",
+ _("Fold Policy"),
+ _("Fold Policy"),
+ HDY_TYPE_FLAP_FOLD_POLICY,
+ HDY_FLAP_FOLD_POLICY_AUTO,
+ G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY);
/**
* HdyFlap:flap-position:
*
- * Since: 1.0
+ * Since: 1.1
*/
props[PROP_FLAP_POSITION] =
- g_param_spec_enum ("flap-position",
- _("Flap Position"),
- _("Flap Position"),
- GTK_TYPE_PACK_TYPE,
- GTK_PACK_START,
- G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY);
+ g_param_spec_enum ("flap-position",
+ _("Flap Position"),
+ _("Flap Position"),
+ GTK_TYPE_PACK_TYPE,
+ GTK_PACK_START,
+ G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY);
/**
* HdyFlap:reveal-flap:
*
- * Since: 1.0
+ * Since: 1.1
*/
props[PROP_REVEAL_FLAP] =
- g_param_spec_boolean ("reveal-flap",
- _("Reveal Flap"),
- _("Reveal Flap"),
- TRUE,
- G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY);
+ g_param_spec_boolean ("reveal-flap",
+ _("Reveal Flap"),
+ _("Reveal Flap"),
+ TRUE,
+ G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY);
/**
* HdyFlap:locked:
*
- * Since: 1.0
+ * Since: 1.1
*/
props[PROP_LOCKED] =
- g_param_spec_boolean ("locked",
- _("Locked"),
- _("Locked"),
- FALSE,
- G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY);
-
+ g_param_spec_boolean ("locked",
+ _("Locked"),
+ _("Locked"),
+ FALSE,
+ G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY);
/**
* HdyFlap:folded:
*
- * Since: 1.0
+ * Since: 1.1
*/
props[PROP_FOLDED] =
- g_param_spec_boolean ("folded",
- _("Folded"),
- _("Folded"),
- FALSE,
- G_PARAM_READABLE | G_PARAM_EXPLICIT_NOTIFY);
+ g_param_spec_boolean ("folded",
+ _("Folded"),
+ _("Folded"),
+ FALSE,
+ G_PARAM_READABLE | G_PARAM_EXPLICIT_NOTIFY);
/**
* HdyFlap:overlay-duration:
*
- * Since: 1.0
+ * Since: 1.1
*/
props[PROP_OVERLAY_DURATION] =
- g_param_spec_int ("overlay-duration",
- _("Overlay Duration"),
- _("Overlay Duration"),
- 0, G_MAXINT,
- 250,
- G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY);
+ g_param_spec_int ("overlay-duration",
+ _("Overlay Duration"),
+ _("Overlay Duration"),
+ 0, G_MAXINT,
+ 250,
+ G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY);
/**
* HdyFlap:reveal-duration:
*
- * Since: 1.0
+ * Since: 1.1
*/
props[PROP_REVEAL_DURATION] =
- g_param_spec_int ("reveal-duration",
- _("Reveal Duration"),
- _("Reveal Duration"),
- 0, G_MAXINT,
- 250,
- G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY);
+ g_param_spec_int ("reveal-duration",
+ _("Reveal Duration"),
+ _("Reveal Duration"),
+ 0, G_MAXINT,
+ 250,
+ G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY);
g_object_class_install_properties (object_class, LAST_PROP, props);
@@ -935,7 +952,7 @@ hdy_flap_init (HdyFlap *self)
{
self->orientation = GTK_ORIENTATION_HORIZONTAL;
self->flap_position = GTK_PACK_START;
- self->flap_fold_policy = HDY_FLAP_FOLD_POLICY_AUTO;
+ self->fold_policy = HDY_FLAP_FOLD_POLICY_AUTO;
self->reveal_flap = TRUE;
self->locked = FALSE;
self->reveal_progress = 1;
@@ -974,7 +991,7 @@ hdy_flap_swipeable_init (HdySwipeableInterface *iface)
*
* Returns: a new #HdyFlap
*
- * Since: 1.0
+ * Since: 1.1
*/
GtkWidget *
hdy_flap_new (void)
@@ -984,11 +1001,11 @@ hdy_flap_new (void)
/**
* hdy_flap_get_flap:
- * @flap: (nullable): a #HdyFlap
+ * @self: a #HdyFlap
*
- * Returns: (transfer none): Flap child.
+ * Returns: (transfer none) (nullable): Flap child.
*
- * Since: 1.0
+ * Since: 1.1
*/
GtkWidget *
hdy_flap_get_flap (HdyFlap *self)
@@ -1001,15 +1018,16 @@ hdy_flap_get_flap (HdyFlap *self)
/**
* hdy_flap_set_flap:
* @self: a #HdyFlap
- * @flap: flap widget
+ * @flap: (nullable): flap widget
*
- * Since: 1.0
+ * Since: 1.1
*/
void
-hdy_flap_set_flap (HdyFlap *self,
+hdy_flap_set_flap (HdyFlap *self,
GtkWidget *flap)
{
g_return_if_fail (HDY_IS_FLAP (self));
+ g_return_if_fail (GTK_IS_WIDGET (flap) || flap == NULL);
if (self->flap == flap)
return;
@@ -1028,46 +1046,46 @@ hdy_flap_set_flap (HdyFlap *self,
}
/**
- * hdy_flap_get_flap_fold_policy:
+ * hdy_flap_get_fold_policy:
* @self: a #HdyFlap
*
- * Returns: current flap fold policy.
+ * Returns: current fold policy.
*
- * Since: 1.0
+ * Since: 1.1
*/
HdyFlapFoldPolicy
-hdy_flap_get_flap_fold_policy (HdyFlap *self)
+hdy_flap_get_fold_policy (HdyFlap *self)
{
g_return_val_if_fail (HDY_IS_FLAP (self), HDY_FLAP_FOLD_POLICY_NEVER);
- return self->flap_fold_policy;
+ return self->fold_policy;
}
/**
- * hdy_flap_set_flap_fold_policy:
+ * hdy_flap_set_fold_policy:
* @self: a #HdyFlap
- * @flap_fold_policy: Flap fold policy
+ * @policy: Flap fold policy
*
- * Since: 1.0
+ * Since: 1.1
*/
void
-hdy_flap_set_flap_fold_policy (HdyFlap *self,
- HdyFlapFoldPolicy flap_fold_policy)
+hdy_flap_set_fold_policy (HdyFlap *self,
+ HdyFlapFoldPolicy policy)
{
g_return_if_fail (HDY_IS_FLAP (self));
- if (self->flap_fold_policy == flap_fold_policy)
+ if (self->fold_policy == policy)
return;
- self->flap_fold_policy = flap_fold_policy;
+ self->fold_policy = policy;
- if (self->flap_fold_policy == HDY_FLAP_FOLD_POLICY_ALWAYS)
+ if (self->fold_policy == HDY_FLAP_FOLD_POLICY_ALWAYS)
set_folded(self, TRUE);
- if (self->flap_fold_policy == HDY_FLAP_FOLD_POLICY_NEVER)
+ if (self->fold_policy == HDY_FLAP_FOLD_POLICY_NEVER)
set_folded(self, FALSE);
- g_object_notify_by_pspec (G_OBJECT (self), props[PROP_FLAP_FOLD_POLICY]);
+ g_object_notify_by_pspec (G_OBJECT (self), props[PROP_FOLD_POLICY]);
}
/**
@@ -1076,7 +1094,7 @@ hdy_flap_set_flap_fold_policy (HdyFlap *self,
*
* Returns: current flap position.
*
- * Since: 1.0
+ * Since: 1.1
*/
GtkPackType
hdy_flap_get_flap_position (HdyFlap *self)
@@ -1089,21 +1107,21 @@ hdy_flap_get_flap_position (HdyFlap *self)
/**
* hdy_flap_set_flap_position:
* @self: a #HdyFlap
- * @flap_position: Flap position
+ * @position: Flap position
*
- * Since: 1.0
+ * Since: 1.1
*/
void
hdy_flap_set_flap_position (HdyFlap *self,
- GtkPackType flap_position)
+ GtkPackType position)
{
g_return_if_fail (HDY_IS_FLAP (self));
- if (self->flap_position == flap_position)
+ if (self->flap_position == position)
return;
- self->flap_position = flap_position;
+ self->flap_position = position;
gtk_widget_queue_allocate (GTK_WIDGET (self));
hdy_shadow_helper_clear_cache (self->shadow_helper);
@@ -1118,7 +1136,7 @@ hdy_flap_set_flap_position (HdyFlap *self,
*
* Returns: %TRUE if flap widget gets revealed.
*
- * Since: 1.0
+ * Since: 1.1
*/
gboolean
hdy_flap_get_reveal_flap (HdyFlap *self)
@@ -1133,19 +1151,21 @@ hdy_flap_get_reveal_flap (HdyFlap *self)
* @self: a #HdyFlap
* @reveal_flap: Reveal flap
*
- * Since: 1.0
+ * Since: 1.1
*/
void
hdy_flap_set_reveal_flap (HdyFlap *self,
gboolean reveal_flap)
{
g_return_if_fail (HDY_IS_FLAP (self));
+
reveal_flap = !!reveal_flap;
if (self->reveal_flap == reveal_flap)
return;
self->reveal_flap = reveal_flap;
+
animate_reveal (self, reveal_flap ? 1 : 0, self->reveal_duration);
g_object_notify_by_pspec (G_OBJECT (self), props[PROP_REVEAL_FLAP]);
@@ -1157,7 +1177,7 @@ hdy_flap_set_reveal_flap (HdyFlap *self,
*
* Returns: %TRUE if flap widget is locked.
*
- * Since: 1.0
+ * Since: 1.1
*/
gboolean
hdy_flap_get_locked (HdyFlap *self)
@@ -1172,13 +1192,14 @@ hdy_flap_get_locked (HdyFlap *self)
* @self: a #HdyFlap
* @locked: Reveal flap
*
- * Since: 1.0
+ * Since: 1.1
*/
void
hdy_flap_set_locked (HdyFlap *self,
- gboolean locked)
+ gboolean locked)
{
g_return_if_fail (HDY_IS_FLAP (self));
+
locked = !!locked;
if (self->locked == locked)
@@ -1195,7 +1216,7 @@ hdy_flap_set_locked (HdyFlap *self,
*
* Returns: %TRUE if flap widget is folded.
*
- * Since: 1.0
+ * Since: 1.1
*/
gboolean
hdy_flap_get_folded (HdyFlap *self)
@@ -1211,7 +1232,7 @@ hdy_flap_get_folded (HdyFlap *self)
*
* Returns: current overlay animation duration.
*
- * Since: 1.0
+ * Since: 1.1
*/
gint
hdy_flap_get_overlay_duration (HdyFlap *self)
@@ -1224,20 +1245,21 @@ hdy_flap_get_overlay_duration (HdyFlap *self)
/**
* hdy_flap_set_overlay_duration:
* @self: a #HdyFlap
- * @overlay_duration: Duration for overlay animation
+ * @duration: Duration for overlay animation
*
- * Since: 1.0
+ * Since: 1.1
*/
void
hdy_flap_set_overlay_duration (HdyFlap *self,
- gint overlay_duration)
+ gint duration)
{
g_return_if_fail (HDY_IS_FLAP (self));
+ g_return_if_fail (duration >= 0);
- if (self->overlay_duration == overlay_duration)
+ if (self->overlay_duration == duration)
return;
- self->overlay_duration = overlay_duration;
+ self->overlay_duration = duration;
g_object_notify_by_pspec (G_OBJECT (self), props[PROP_OVERLAY_DURATION]);
}
@@ -1248,7 +1270,7 @@ hdy_flap_set_overlay_duration (HdyFlap *self,
*
* Returns: current reveal animation duration.
*
- * Since: 1.0
+ * Since: 1.1
*/
gint
hdy_flap_get_reveal_duration (HdyFlap *self)
@@ -1261,20 +1283,21 @@ hdy_flap_get_reveal_duration (HdyFlap *self)
/**
* hdy_flap_set_reveal_duration:
* @self: a #HdyFlap
- * @reveal_duration: Duration for reveal animation
+ * @duration: Duration for reveal animation
*
- * Since: 1.0
+ * Since: 1.1
*/
void
hdy_flap_set_reveal_duration (HdyFlap *self,
- gint reveal_duration)
+ gint duration)
{
g_return_if_fail (HDY_IS_FLAP (self));
+ g_return_if_fail (duration >= 0);
- if (self->reveal_duration == reveal_duration)
+ if (self->reveal_duration == duration)
return;
- self->reveal_duration = reveal_duration;
+ self->reveal_duration = duration;
g_object_notify_by_pspec (G_OBJECT (self), props[PROP_REVEAL_DURATION]);
}
diff --git a/src/hdy-flap.h b/src/hdy-flap.h
index 90bc546a..ed61089e 100644
--- a/src/hdy-flap.h
+++ b/src/hdy-flap.h
@@ -17,9 +17,9 @@
G_BEGIN_DECLS
-#define HDY_TYPE_FLAP (hdy_flap_get_type())
+#define HDY_TYPE_FLAP (hdy_flap_get_type ())
-HDY_AVAILABLE_IN_ALL
+HDY_AVAILABLE_IN_1_1
G_DECLARE_FINAL_TYPE (HdyFlap, hdy_flap, HDY, FLAP, GtkBin)
typedef enum {
@@ -28,46 +28,52 @@ typedef enum {
HDY_FLAP_FOLD_POLICY_AUTO,
} HdyFlapFoldPolicy;
-
-HDY_AVAILABLE_IN_ALL
+HDY_AVAILABLE_IN_1_1
GtkWidget *hdy_flap_new (void);
-HDY_AVAILABLE_IN_ALL
+HDY_AVAILABLE_IN_1_1
GtkWidget *hdy_flap_get_flap (HdyFlap *self);
-HDY_AVAILABLE_IN_ALL
+HDY_AVAILABLE_IN_1_1
void hdy_flap_set_flap (HdyFlap *self,
GtkWidget *flap);
-HDY_AVAILABLE_IN_ALL
-HdyFlapFoldPolicy hdy_flap_get_flap_fold_policy (HdyFlap *self);
-HDY_AVAILABLE_IN_ALL
-void hdy_flap_set_flap_fold_policy (HdyFlap *self,
- HdyFlapFoldPolicy flap_mode);
-HDY_AVAILABLE_IN_ALL
+
+HDY_AVAILABLE_IN_1_1
+HdyFlapFoldPolicy hdy_flap_get_fold_policy (HdyFlap *self);
+HDY_AVAILABLE_IN_1_1
+void hdy_flap_set_fold_policy (HdyFlap *self,
+ HdyFlapFoldPolicy policy);
+
+HDY_AVAILABLE_IN_1_1
GtkPackType hdy_flap_get_flap_position (HdyFlap *self);
-HDY_AVAILABLE_IN_ALL
-void hdy_flap_set_flap_position (HdyFlap *self,
- GtkPackType flap_position);
-HDY_AVAILABLE_IN_ALL
+HDY_AVAILABLE_IN_1_1
+void hdy_flap_set_flap_position (HdyFlap *self,
+ GtkPackType position);
+
+HDY_AVAILABLE_IN_1_1
gboolean hdy_flap_get_reveal_flap (HdyFlap *self);
-HDY_AVAILABLE_IN_ALL
-void hdy_flap_set_reveal_flap (HdyFlap *self,
- gboolean reveal_flap);
-HDY_AVAILABLE_IN_ALL
+HDY_AVAILABLE_IN_1_1
+void hdy_flap_set_reveal_flap (HdyFlap *self,
+ gboolean reveal_flap);
+
+HDY_AVAILABLE_IN_1_1
gboolean hdy_flap_get_locked (HdyFlap *self);
-HDY_AVAILABLE_IN_ALL
-void hdy_flap_set_locked (HdyFlap *self,
- gboolean locked);
-HDY_AVAILABLE_IN_ALL
+HDY_AVAILABLE_IN_1_1
+void hdy_flap_set_locked (HdyFlap *self,
+ gboolean locked);
+
+HDY_AVAILABLE_IN_1_1
gboolean hdy_flap_get_folded (HdyFlap *self);
-HDY_AVAILABLE_IN_ALL
-gint hdy_flap_get_overlay_duration (HdyFlap *self);
-HDY_AVAILABLE_IN_ALL
-void hdy_flap_set_overlay_duration (HdyFlap *self,
- gint overlay_duration);
-HDY_AVAILABLE_IN_ALL
+
+HDY_AVAILABLE_IN_1_1
+gint hdy_flap_get_overlay_duration (HdyFlap *self);
+HDY_AVAILABLE_IN_1_1
+void hdy_flap_set_overlay_duration (HdyFlap *self,
+ gint duration);
+
+HDY_AVAILABLE_IN_1_1
gint hdy_flap_get_reveal_duration (HdyFlap *self);
-HDY_AVAILABLE_IN_ALL
+HDY_AVAILABLE_IN_1_1
void hdy_flap_set_reveal_duration (HdyFlap *self,
- gint reveal_duration);
+ gint duration);
G_END_DECLS
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]