[libadwaita/wip/cdavis/fold-threshold-policy: 2/2] flap: Add fold-threshold-policy-property
- From: Christopher Davis <christopherdavis src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libadwaita/wip/cdavis/fold-threshold-policy: 2/2] flap: Add fold-threshold-policy-property
- Date: Thu, 24 Jun 2021 00:28:19 +0000 (UTC)
commit 5990d6634f847afda4e9eee386bf87422484843a
Author: Christopher Davis <christopherdavis gnome org>
Date: Wed Jun 23 17:25:26 2021 -0700
flap: Add fold-threshold-policy-property
We use AdwFoldThresholdPolicy to determine the size
at which the flap should fold.
src/adw-flap.c | 85 +++++++++++++++++++++++++++++++++++++++++++++++++++++-----
src/adw-flap.h | 7 +++++
2 files changed, 85 insertions(+), 7 deletions(-)
---
diff --git a/src/adw-flap.c b/src/adw-flap.c
index c5362ada..551b00bd 100644
--- a/src/adw-flap.c
+++ b/src/adw-flap.c
@@ -119,6 +119,7 @@ struct _AdwFlap
GtkWidget *shield;
AdwFlapFoldPolicy fold_policy;
+ AdwFoldThresholdPolicy fold_threshold_policy;
AdwFlapTransitionType transition_type;
GtkPackType flap_position;
gboolean reveal_flap;
@@ -168,6 +169,7 @@ enum {
PROP_REVEAL_DURATION,
PROP_REVEAL_PROGRESS,
PROP_FOLD_POLICY,
+ PROP_FOLD_THRESHOLD_POLICY,
PROP_FOLD_DURATION,
PROP_FOLDED,
PROP_LOCKED,
@@ -898,20 +900,31 @@ adw_flap_size_allocate (GtkWidget *widget,
if (self->fold_policy == ADW_FLAP_FOLD_POLICY_AUTO) {
GtkRequisition flap_min = { 0, 0 };
+ GtkRequisition flap_nat = { 0, 0 };
GtkRequisition content_min = { 0, 0 };
+ GtkRequisition content_nat = { 0, 0 };
GtkRequisition separator_min = { 0, 0 };
+ GtkRequisition separator_nat = { 0, 0 };
if (self->flap.widget)
- gtk_widget_get_preferred_size (self->flap.widget, &flap_min, NULL);
+ gtk_widget_get_preferred_size (self->flap.widget, &flap_min, &flap_nat);
if (self->content.widget)
- gtk_widget_get_preferred_size (self->content.widget, &content_min, NULL);
+ gtk_widget_get_preferred_size (self->content.widget, &content_min, &content_nat);
if (self->separator.widget)
- gtk_widget_get_preferred_size (self->separator.widget, &separator_min, NULL);
+ gtk_widget_get_preferred_size (self->separator.widget, &separator_min, &separator_nat);
- if (self->orientation == GTK_ORIENTATION_HORIZONTAL)
- set_folded (self, width < content_min.width + flap_min.width + separator_min.width);
- else
- set_folded (self, height < content_min.height + flap_min.height + separator_min.height);
+ if (self->orientation == GTK_ORIENTATION_HORIZONTAL) {
+ if (self->fold_threshold_policy == ADW_FOLD_THRESHOLD_POLICY_MINIMUM)
+ set_folded (self, width < content_min.width + flap_min.width + separator_min.width);
+ else
+ set_folded (self, width < content_nat.width + flap_nat.width + separator_nat.width);
+ }
+ else {
+ if (self->fold_threshold_policy == ADW_FOLD_THRESHOLD_POLICY_MINIMUM)
+ set_folded (self, height < content_min.height + flap_min.height + separator_min.height);
+ else
+ set_folded (self, height < content_nat.height + flap_nat.height + separator_nat.height);
+ }
}
compute_allocation (self,
@@ -1126,6 +1139,9 @@ adw_flap_get_property (GObject *object,
case PROP_FOLD_POLICY:
g_value_set_enum (value, adw_flap_get_fold_policy (self));
break;
+ case PROP_FOLD_THRESHOLD_POLICY:
+ g_value_set_enum (value, adw_flap_get_fold_threshold_policy (self));
+ break;
case PROP_FOLD_DURATION:
g_value_set_uint (value, adw_flap_get_fold_duration (self));
break;
@@ -1185,6 +1201,9 @@ adw_flap_set_property (GObject *object,
case PROP_FOLD_POLICY:
adw_flap_set_fold_policy (self, g_value_get_enum (value));
break;
+ case PROP_FOLD_THRESHOLD_POLICY:
+ adw_flap_set_fold_threshold_policy (self, g_value_get_enum (value));
+ break;
case PROP_FOLD_DURATION:
adw_flap_set_fold_duration (self, g_value_get_uint (value));
break;
@@ -1377,6 +1396,20 @@ adw_flap_class_init (AdwFlapClass *klass)
ADW_FLAP_FOLD_POLICY_AUTO,
G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY);
+ /**
+ * AdwFlap:fold-threshold-policy: (attributes org.gtk.Property.get=adw_flap_get_fold_threshold_policy
org.gtk.Property.set=adw_flap_set_fold_threshold_policy)
+ *
+ * Determines the threshold at which the flap will fold.
+ *
+ * Since: 1.0
+ */
+ props[PROP_FOLD_THRESHOLD_POLICY] =
+ g_param_spec_enum ("fold-threshold-policy",
+ "Fold Threshold Policy",
+ "Determines the threshold at which the flap will fold.",
+ ADW_TYPE_FOLD_THRESHOLD_POLICY, ADW_FOLD_THRESHOLD_POLICY_MINIMUM,
+ G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY);
+
/**
* AdwFlap:fold-duration: (attributes org.gtk.Property.get=adw_flap_get_fold_duration
org.gtk.Property.set=adw_flap_set_fold_duration)
*
@@ -1527,6 +1560,7 @@ adw_flap_init (AdwFlap *self)
self->orientation = GTK_ORIENTATION_HORIZONTAL;
self->flap_position = GTK_PACK_START;
self->fold_policy = ADW_FLAP_FOLD_POLICY_AUTO;
+ self->fold_threshold_policy = ADW_FOLD_THRESHOLD_POLICY_MINIMUM;
self->transition_type = ADW_FLAP_TRANSITION_TYPE_OVER;
self->reveal_flap = TRUE;
self->locked = FALSE;
@@ -2406,3 +2440,40 @@ adw_flap_set_swipe_to_close (AdwFlap *self,
g_object_notify_by_pspec (G_OBJECT (self), props[PROP_SWIPE_TO_CLOSE]);
}
+
+/**
+ * adw_flap_get_fold_threshold_policy: (attributes org.gtk.Method.get_property=fold-threshold-policy)
+ * @self: a `AdwFlap`
+ *
+ * Gets the fold threshold policy for @self.
+ *
+ * Since: 1.0
+ */
+AdwFoldThresholdPolicy
+adw_flap_get_fold_threshold_policy (AdwFlap *self)
+{
+ g_return_val_if_fail (ADW_IS_FLAP (self), ADW_FOLD_THRESHOLD_POLICY_NATURAL);
+
+ return self->fold_threshold_policy;
+}
+
+
+/**
+ * adw_flap_set_fold_threshold_policy: (attributes org.gtk.Method.set_property=fold-threshold-policy)
+ * @self: a `AdwFlap`
+ * @policy: a `AdwFoldThresholdPolicy`
+ *
+ * Sets the fold threshold policy for @self.
+ *
+ * Since: 1.0
+ */
+void
+adw_flap_set_fold_threshold_policy (AdwFlap *self,
+ AdwFoldThresholdPolicy policy)
+{
+ g_return_if_fail (ADW_IS_FLAP (self));
+
+ self->fold_threshold_policy = policy;
+
+ g_object_notify_by_pspec (G_OBJECT (self), props[PROP_FOLD_THRESHOLD_POLICY]);
+}
diff --git a/src/adw-flap.h b/src/adw-flap.h
index db8d28bd..bd184894 100644
--- a/src/adw-flap.h
+++ b/src/adw-flap.h
@@ -14,6 +14,7 @@
#include <gtk/gtk.h>
#include "adw-enums.h"
+#include "adw-fold-threshold-policy.h"
G_BEGIN_DECLS
@@ -121,4 +122,10 @@ ADW_AVAILABLE_IN_ALL
void adw_flap_set_swipe_to_close (AdwFlap *self,
gboolean swipe_to_close);
+ADW_AVAILABLE_IN_ALL
+AdwFoldThresholdPolicy adw_flap_get_fold_threshold_policy (AdwFlap *self);
+ADW_AVAILABLE_IN_ALL
+void adw_flap_set_fold_threshold_policy (AdwFlap *self,
+ AdwFoldThresholdPolicy policy);
+
G_END_DECLS
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]