feat(settings): add grouped configuration hub, languages and tray controls
This commit is contained in:
1 parent
6f34fd080f
commit
cc3b6f903f
90 files changed
+3625
-408
No files matched your search
@@ -8,7 +8,7 @@ use crate::motion::{Geometry, Motion};
|
||||
const FADE: Duration = Duration::from_millis(120);
|
||||
const CONTENT_DELAY: Duration = Duration::from_millis(130);
|
||||
|
||||
#[derive(Clone, Copy, Debug, PartialEq, Deserialize, Serialize)]
|
||||
#[derive(Clone, Copy, Debug, PartialEq, Deserialize, Serialize, schemars::JsonSchema)]
|
||||
#[serde(default, deny_unknown_fields)]
|
||||
pub struct Profile {
|
||||
pub peek_on_hover: bool,
|
||||
|
||||
@@ -20,11 +20,13 @@ fn padding() -> [u16; 2] {
|
||||
[2, 3]
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
|
||||
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize, schemars::JsonSchema)]
|
||||
#[serde(transparent)]
|
||||
pub struct PanelId(pub String);
|
||||
|
||||
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Deserialize, Serialize)]
|
||||
#[derive(
|
||||
Clone, Copy, Debug, Default, PartialEq, Eq, Deserialize, Serialize, schemars::JsonSchema,
|
||||
)]
|
||||
#[serde(rename_all = "lowercase")]
|
||||
pub enum Edge {
|
||||
#[default]
|
||||
@@ -42,15 +44,17 @@ impl Edge {
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
|
||||
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize, schemars::JsonSchema)]
|
||||
#[serde(transparent)]
|
||||
pub struct GroupId(pub String);
|
||||
|
||||
#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Deserialize, Serialize)]
|
||||
#[derive(
|
||||
Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Deserialize, Serialize, schemars::JsonSchema,
|
||||
)]
|
||||
#[serde(transparent)]
|
||||
pub struct ItemId(pub String);
|
||||
|
||||
#[derive(Clone, Copy, Debug, PartialEq, Eq, Deserialize, Serialize)]
|
||||
#[derive(Clone, Copy, Debug, PartialEq, Eq, Deserialize, Serialize, schemars::JsonSchema)]
|
||||
#[serde(rename_all = "kebab-case")]
|
||||
pub enum Representation {
|
||||
Wide,
|
||||
@@ -58,7 +62,9 @@ pub enum Representation {
|
||||
Icon,
|
||||
}
|
||||
|
||||
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Deserialize, Serialize)]
|
||||
#[derive(
|
||||
Clone, Copy, Debug, Default, PartialEq, Eq, Deserialize, Serialize, schemars::JsonSchema,
|
||||
)]
|
||||
#[serde(rename_all = "kebab-case")]
|
||||
pub enum OverflowPolicy {
|
||||
#[default]
|
||||
@@ -67,7 +73,9 @@ pub enum OverflowPolicy {
|
||||
Always,
|
||||
}
|
||||
|
||||
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Deserialize, Serialize)]
|
||||
#[derive(
|
||||
Clone, Copy, Debug, Default, PartialEq, Eq, Deserialize, Serialize, schemars::JsonSchema,
|
||||
)]
|
||||
#[serde(rename_all = "kebab-case")]
|
||||
pub enum WorkspaceStyle {
|
||||
Numbers,
|
||||
@@ -110,7 +118,7 @@ impl WorkspaceStyle {
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, Copy, Debug, PartialEq, Eq, Deserialize, Serialize)]
|
||||
#[derive(Clone, Copy, Debug, PartialEq, Eq, Deserialize, Serialize, schemars::JsonSchema)]
|
||||
#[serde(tag = "kind", rename_all = "kebab-case")]
|
||||
pub enum ItemKind {
|
||||
Overview,
|
||||
@@ -122,6 +130,7 @@ pub enum ItemKind {
|
||||
Media,
|
||||
Activities,
|
||||
QuickSettings,
|
||||
Tray,
|
||||
NightLight,
|
||||
Network,
|
||||
Audio,
|
||||
@@ -158,6 +167,7 @@ impl ItemKind {
|
||||
Self::Media => "Media",
|
||||
Self::Activities => "Activities",
|
||||
Self::QuickSettings => "Quick Settings",
|
||||
Self::Tray => "Application tray",
|
||||
Self::NightLight => "Night light",
|
||||
Self::Network => "Network",
|
||||
Self::Audio => "Audio",
|
||||
@@ -184,7 +194,7 @@ impl ItemKind {
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, PartialEq, Serialize)]
|
||||
#[derive(Clone, Debug, PartialEq, Serialize, schemars::JsonSchema)]
|
||||
pub struct Item {
|
||||
pub id: ItemId,
|
||||
#[serde(flatten)]
|
||||
@@ -241,7 +251,7 @@ impl<'de> Deserialize<'de> for Item {
|
||||
"percentage is only supported by Battery items",
|
||||
));
|
||||
}
|
||||
#[derive(Deserialize)]
|
||||
#[derive(Deserialize, schemars::JsonSchema, serde::Serialize)]
|
||||
struct Fields {
|
||||
id: ItemId,
|
||||
#[serde(flatten)]
|
||||
@@ -325,6 +335,7 @@ impl Item {
|
||||
match self.kind {
|
||||
ItemKind::Activities => availability.activities,
|
||||
ItemKind::Media => availability.media,
|
||||
ItemKind::Tray => availability.tray,
|
||||
ItemKind::CaptureStatus => availability.capture,
|
||||
ItemKind::Network => availability.network,
|
||||
ItemKind::Audio => availability.audio,
|
||||
@@ -338,6 +349,7 @@ impl Item {
|
||||
|
||||
#[derive(Clone, Copy, Debug, Default)]
|
||||
pub struct Availability {
|
||||
pub tray: bool,
|
||||
pub capture: bool,
|
||||
pub media: bool,
|
||||
pub activities: bool,
|
||||
@@ -348,7 +360,9 @@ pub struct Availability {
|
||||
pub external_display: bool,
|
||||
}
|
||||
|
||||
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Deserialize, Serialize)]
|
||||
#[derive(
|
||||
Clone, Copy, Debug, Default, PartialEq, Eq, Deserialize, Serialize, schemars::JsonSchema,
|
||||
)]
|
||||
#[serde(rename_all = "kebab-case")]
|
||||
pub enum PanelSurface {
|
||||
None,
|
||||
@@ -356,7 +370,9 @@ pub enum PanelSurface {
|
||||
Solid,
|
||||
}
|
||||
|
||||
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Deserialize, Serialize)]
|
||||
#[derive(
|
||||
Clone, Copy, Debug, Default, PartialEq, Eq, Deserialize, Serialize, schemars::JsonSchema,
|
||||
)]
|
||||
#[serde(rename_all = "kebab-case")]
|
||||
pub enum GroupSurface {
|
||||
#[default]
|
||||
@@ -376,7 +392,7 @@ impl GroupSurface {
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, PartialEq, Deserialize, Serialize)]
|
||||
#[derive(Clone, Debug, PartialEq, Deserialize, Serialize, schemars::JsonSchema)]
|
||||
#[serde(deny_unknown_fields)]
|
||||
pub struct Group {
|
||||
pub id: GroupId,
|
||||
@@ -402,14 +418,14 @@ impl Group {
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, PartialEq, Deserialize, Serialize)]
|
||||
#[derive(Clone, Debug, PartialEq, Deserialize, Serialize, schemars::JsonSchema)]
|
||||
#[serde(default, deny_unknown_fields)]
|
||||
pub struct Zone {
|
||||
pub groups: Vec<Group>,
|
||||
pub spacing: f32,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, PartialEq, Deserialize, Serialize)]
|
||||
#[derive(Clone, Debug, PartialEq, Deserialize, Serialize, schemars::JsonSchema)]
|
||||
#[serde(deny_unknown_fields)]
|
||||
pub struct Panel {
|
||||
pub id: PanelId,
|
||||
@@ -700,6 +716,7 @@ impl Panel {
|
||||
let controls = vec![
|
||||
item("media", Media),
|
||||
item("quick-settings", QuickSettings),
|
||||
item("tray", Tray),
|
||||
item("night-light", NightLight),
|
||||
item("network", Network),
|
||||
item("audio", Audio),
|
||||
@@ -820,6 +837,7 @@ mod tests {
|
||||
"focused-window",
|
||||
"media",
|
||||
"quick-settings",
|
||||
"tray",
|
||||
"night-light",
|
||||
"network",
|
||||
"audio",
|
||||
@@ -866,6 +884,7 @@ mod tests {
|
||||
);
|
||||
assert_eq!(
|
||||
visible(Availability {
|
||||
tray: true,
|
||||
capture: true,
|
||||
activities: true,
|
||||
media: true,
|
||||
@@ -879,7 +898,7 @@ mod tests {
|
||||
.map(|item| item.id.0.as_str())
|
||||
.collect::<Vec<_>>()
|
||||
);
|
||||
assert_eq!(items(&panel).len(), 14);
|
||||
assert_eq!(items(&panel).len(), 15);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
#[derive(Clone, Copy, Debug, Default, PartialEq, Deserialize, Serialize)]
|
||||
#[derive(Clone, Copy, Debug, Default, PartialEq, Deserialize, Serialize, schemars::JsonSchema)]
|
||||
#[serde(default, deny_unknown_fields)]
|
||||
pub struct GeometryIntent {
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
@@ -51,7 +51,7 @@ impl GeometryIntent {
|
||||
}
|
||||
|
||||
/// Logical dimensions owned by a panel, independent of its color theme or edge.
|
||||
#[derive(Clone, Copy, Debug, PartialEq, Deserialize, Serialize)]
|
||||
#[derive(Clone, Copy, Debug, PartialEq, Deserialize, Serialize, schemars::JsonSchema)]
|
||||
#[serde(default, deny_unknown_fields)]
|
||||
pub struct PanelGeometry {
|
||||
pub height: f32,
|
||||
|
||||
@@ -4,6 +4,15 @@ use serde::{Deserialize, Deserializer, Serialize, Serializer};
|
||||
#[derive(Clone, Copy, Debug, PartialEq)]
|
||||
pub struct CornerRadii(pub [f32; 4]);
|
||||
|
||||
impl schemars::JsonSchema for CornerRadii {
|
||||
fn schema_name() -> std::borrow::Cow<'static, str> {
|
||||
"CornerRadii".into()
|
||||
}
|
||||
fn json_schema(_: &mut schemars::SchemaGenerator) -> schemars::Schema {
|
||||
schemars::json_schema!({"anyOf":[{"type":"number","minimum":0},{"type":"array","minItems":4,"maxItems":4,"items":{"type":"number","minimum":0}}]})
|
||||
}
|
||||
}
|
||||
|
||||
impl CornerRadii {
|
||||
#[must_use]
|
||||
pub fn uniform(radius: f32) -> Self {
|
||||
|
||||
@@ -2,7 +2,9 @@ use crate::{CornerRadii, Edge};
|
||||
use ferese_layout::Rect;
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Deserialize, Serialize)]
|
||||
#[derive(
|
||||
Clone, Copy, Debug, Default, PartialEq, Eq, Deserialize, Serialize, schemars::JsonSchema,
|
||||
)]
|
||||
#[serde(rename_all = "kebab-case")]
|
||||
pub enum Style {
|
||||
Floating,
|
||||
|
||||
Reference in new issue
Block a user