Add reusable SquareIconWidget

- Avoid code duplication
- Base square icon button component with common appearance, properties, callbacks
- Refactor BatteryWidget to inherit SquareIconWidget
This commit is contained in:
Candifloss 2025-11-21 19:47:25 +05:30
parent b0eaa42063
commit 962bed3dad
3 changed files with 47 additions and 34 deletions

View File

@ -1,35 +1,10 @@
export component BatteryWidget {
in property <int> bar_height;
in property <string> battery_status; // charging / discharging / notcharging / unknown
in property <int> battery_capacity; // numeric percentage
in property <string> battery_capacity_level; // critical / low / normal / high / full
in property <string> battery_icon;
import { SquareIconWidget } from "square-icon-widget.slint";
callback show_battery();
export component BatteryWidget inherits SquareIconWidget {
in property <string> battery_status;
in property <int> battery_capacity;
in property <string> battery_capacity_level;
height: bar_height * 1px;
width: bar_height * 1px;
Rectangle {
background: touch_area.pressed ? #4a5f70
: touch_area.has-hover ? #6d8a4d
: #8e9162;
border-radius: 3px;
HorizontalLayout {
padding-left: 3px;
padding-right: 3px;
Text {
text: battery_icon;
color: white;
vertical-alignment: center;
horizontal-alignment: center;
}
}
touch_area := TouchArea {
clicked => { show_battery(); }
}
}
// Compose tooltip here
tooltip_text: "Battery: " + battery_capacity + "% (" + battery_status + ")";
}

View File

@ -0,0 +1,38 @@
export component SquareIconWidget {
// Skeleton of suqre-shaped icon widgets
// with similar basic functions and appearance
in property <int> bar_height;
in property <string> icon_text;
in property <string> tooltip_text;
callback square_btn_callback();
height: bar_height * 1px; // Same height as the bar
width: bar_height * 1px; // Square shape
Rectangle {
background: touch_area.pressed ? #4a5f70
: touch_area.has-hover ? #6d8a4d
: #8e9162;
border-radius: 3px;
HorizontalLayout {
padding-left: 3px;
padding-right: 3px;
Text {
text: icon_text; // Every `SquareIconWidget` has an icon
color: white;
vertical-alignment: center;
horizontal-alignment: center;
}
}
touch_area := TouchArea {
// Action when the icon is clicked
clicked => { square_btn_callback(); }
}
}
// Tooltip will be added later — Slints ToolTip element is window-global
}

View File

@ -72,11 +72,11 @@ export component TopBar inherits Window {
BatteryWidget {
bar_height: root.bar_height;
icon_text: root.battery_icon;
square_btn_callback => root.show_battery();
battery_status: root.battery_status;
battery_capacity: root.battery_capacity;
battery_capacity_level: root.battery_capacity_level;
battery_icon: root.battery_icon;
show_battery => root.show_battery();
}
DateWidget {