fractal/utils/
expression.rs

1//! Collection of common expressions.
2
3use gtk::{glib, glib::closure};
4use secular::normalized_lower_lay_string;
5
6/// Returns an expression that is the and’ed result of the given boolean
7/// expressions.
8pub(crate) fn and(
9    a_expr: impl AsRef<gtk::Expression>,
10    b_expr: impl AsRef<gtk::Expression>,
11) -> gtk::ClosureExpression {
12    gtk::ClosureExpression::new::<bool>(
13        &[a_expr.as_ref(), b_expr.as_ref()],
14        closure!(|_: Option<glib::Object>, a: bool, b: bool| { a && b }),
15    )
16}
17
18/// Returns an expression that is the or’ed result of the given boolean
19/// expressions.
20pub(crate) fn or(
21    a_expr: impl AsRef<gtk::Expression>,
22    b_expr: impl AsRef<gtk::Expression>,
23) -> gtk::ClosureExpression {
24    gtk::ClosureExpression::new::<bool>(
25        &[a_expr.as_ref(), b_expr.as_ref()],
26        closure!(|_: Option<glib::Object>, a: bool, b: bool| { a || b }),
27    )
28}
29
30/// Returns an expression that is the inverted result of the given boolean
31/// expression.
32pub(crate) fn not<E: AsRef<gtk::Expression>>(a_expr: E) -> gtk::ClosureExpression {
33    gtk::ClosureExpression::new::<bool>(
34        &[a_expr],
35        closure!(|_: Option<glib::Object>, a: bool| { !a }),
36    )
37}
38
39/// Returns an expression that is the normalized version of the given string
40/// expression.
41pub(crate) fn normalize_string<E: AsRef<gtk::Expression>>(expr: E) -> gtk::ClosureExpression {
42    gtk::ClosureExpression::new::<String>(
43        &[expr],
44        closure!(|_: Option<glib::Object>, s: &str| { normalized_lower_lay_string(s) }),
45    )
46}