Skip to content

Commit 10ecfb9

Browse files
authored
Multitasking&Appearance: assets depend dock look (#237)
* Multitasking&Appearance: assets depend dock look * Use assets for dock position * Change position asset depending on docksize
1 parent 3e9f8d2 commit 10ecfb9

File tree

4 files changed

+269
-21
lines changed

4 files changed

+269
-21
lines changed

lib/view/pages/appearance/appearance_model.dart

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,4 +122,98 @@ class AppearanceModel extends ChangeNotifier {
122122
notifyListeners();
123123
}
124124
}
125+
126+
String getAutoHideAsset() {
127+
final _extendDock = extendDock ?? true;
128+
if (_extendDock == false) {
129+
if (dockPosition == 'RIGHT') {
130+
return 'assets/images/appearance/auto-hide-dock-mode/auto-hide-dock-right.svg';
131+
}
132+
if (dockPosition == 'BOTTOM') {
133+
return 'assets/images/appearance/auto-hide-dock-mode/auto-hide-dock-bottom.svg';
134+
} else {
135+
return 'assets/images/appearance/auto-hide-dock-mode/auto-hide-dock-left.svg';
136+
}
137+
}
138+
if (dockPosition == 'RIGHT') {
139+
return 'assets/images/appearance/auto-hide-panel-mode/auto-hide-panel-right.svg';
140+
}
141+
if (dockPosition == 'BOTTOM') {
142+
return 'assets/images/appearance/auto-hide-panel-mode/auto-hide-panel-bottom.svg';
143+
}
144+
return 'assets/images/appearance/auto-hide-panel-mode/auto-hide-panel-left.svg';
145+
}
146+
147+
String getPanelModeAsset() {
148+
if (dockPosition == 'RIGHT') {
149+
return 'assets/images/appearance/panel-mode/panel-mode-right.svg';
150+
}
151+
if (dockPosition == 'BOTTOM') {
152+
return 'assets/images/appearance/panel-mode/panel-mode-bottom.svg';
153+
} else {
154+
return 'assets/images/appearance/panel-mode/panel-mode-left.svg';
155+
}
156+
}
157+
158+
String getDockModeAsset() {
159+
if (dockPosition == 'RIGHT') {
160+
return 'assets/images/appearance/dock-mode/dock-mode-right.svg';
161+
}
162+
if (dockPosition == 'BOTTOM') {
163+
return 'assets/images/appearance/dock-mode/dock-mode-bottom.svg';
164+
} else {
165+
return 'assets/images/appearance/dock-mode/dock-mode-left.svg';
166+
}
167+
}
168+
169+
String getDockPositionAsset() {
170+
final _extendDock = extendDock ?? true;
171+
if (!_extendDock) {
172+
return getDockModeAsset();
173+
}
174+
return getPanelModeAsset();
175+
}
176+
177+
DockPosition getDockPosition() {
178+
if (dockPosition == 'RIGHT') {
179+
return DockPosition.right;
180+
}
181+
if (dockPosition == 'BOTTOM') {
182+
return DockPosition.bottom;
183+
} else {
184+
return DockPosition.left;
185+
}
186+
}
187+
188+
String getRightSideAsset() {
189+
final _extendDock = extendDock ?? true;
190+
if (!_extendDock) {
191+
return 'assets/images/appearance/panel-mode/panel-mode-right.svg';
192+
}
193+
return 'assets/images/appearance/dock-mode/dock-mode-right.svg';
194+
}
195+
196+
String getLeftSideAsset() {
197+
final _extendDock = extendDock ?? true;
198+
if (!_extendDock) {
199+
return 'assets/images/appearance/panel-mode/panel-mode-left.svg';
200+
}
201+
return 'assets/images/appearance/dock-mode/dock-mode-left.svg';
202+
}
203+
204+
String getBottomAsset() {
205+
final _extendDock = extendDock ?? true;
206+
if (!_extendDock) {
207+
return 'assets/images/appearance/panel-mode/panel-mode-bottom.svg';
208+
}
209+
return 'assets/images/appearance/dock-mode/dock-mode-bottom.svg';
210+
}
211+
212+
void setDockPosition(DockPosition dockPosition) {
213+
_dashToDockSettings?.setValue(_dockPositionKey,
214+
dockPosition.toString().replaceAll('DockPosition.', '').toUpperCase());
215+
notifyListeners();
216+
}
125217
}
218+
219+
enum DockPosition { left, bottom, right }

lib/view/pages/appearance/dock_section.dart

Lines changed: 63 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ class DockSection extends StatelessWidget {
3030
Padding(
3131
padding: const EdgeInsets.all(assetPadding),
3232
child: SvgPicture.asset(
33-
'assets/images/appearance/panel-mode/panel-mode-left.svg',
33+
model.getPanelModeAsset(),
3434
color: (model.extendDock != null && model.extendDock == true)
3535
? Theme.of(context).primaryColor.withOpacity(0.1)
3636
: Theme.of(context).backgroundColor,
@@ -50,7 +50,7 @@ class DockSection extends StatelessWidget {
5050
Padding(
5151
padding: const EdgeInsets.all(assetPadding),
5252
child: SvgPicture.asset(
53-
'assets/images/appearance/dock-mode/dock-mode-left.svg',
53+
model.getDockModeAsset(),
5454
color: (model.extendDock != null && !model.extendDock!)
5555
? Theme.of(context).primaryColor.withOpacity(0.1)
5656
: Theme.of(context).backgroundColor,
@@ -76,7 +76,7 @@ class DockSection extends StatelessWidget {
7676
Padding(
7777
padding: const EdgeInsets.all(assetPadding),
7878
child: SvgPicture.asset(
79-
'assets/images/appearance/auto-hide-panel-mode/auto-hide-panel-left.svg',
79+
model.getAutoHideAsset(),
8080
color:
8181
(model.alwaysShowDock != null && !model.alwaysShowDock!)
8282
? Theme.of(context).primaryColor.withOpacity(0.1)
@@ -108,19 +108,6 @@ class DockSection extends StatelessWidget {
108108
defaultValue: 48,
109109
onChanged: (value) => model.maxIconSize = value,
110110
),
111-
YaruRow(
112-
enabled: model.dockPosition != null,
113-
trailingWidget: const Text('Dock Position'),
114-
actionWidget: DropdownButton<String>(
115-
onChanged: (value) => model.dockPosition = value,
116-
value: model.dockPosition,
117-
items: [
118-
for (var item in AppearanceModel.dockPositions)
119-
DropdownMenuItem(
120-
child: Text(item.toLowerCase()), value: item)
121-
],
122-
),
123-
),
124111
YaruRow(
125112
enabled: model.clickAction != null,
126113
description:
@@ -139,6 +126,66 @@ class DockSection extends StatelessWidget {
139126
),
140127
],
141128
),
129+
YaruSection(headline: 'Dock Position', children: [
130+
YaruRow(
131+
trailingWidget: const Text('Left'),
132+
description: 'Your dock appears on the left side of your screen.',
133+
actionWidget: Radio<DockPosition>(
134+
value: DockPosition.left,
135+
groupValue: model.getDockPosition(),
136+
onChanged: (value) => model.setDockPosition(value!)),
137+
enabled: model.extendDock != null),
138+
Padding(
139+
padding: const EdgeInsets.all(assetPadding),
140+
child: SvgPicture.asset(
141+
model.getLeftSideAsset(),
142+
color: model.getDockPosition() == DockPosition.left
143+
? Theme.of(context).primaryColor.withOpacity(0.1)
144+
: Theme.of(context).backgroundColor,
145+
colorBlendMode: BlendMode.color,
146+
height: assetHeight,
147+
),
148+
),
149+
YaruRow(
150+
trailingWidget: const Text('Right'),
151+
description:
152+
'Your dock appears on the right side of your screen.',
153+
actionWidget: Radio<DockPosition>(
154+
value: DockPosition.bottom,
155+
groupValue: model.getDockPosition(),
156+
onChanged: (value) => model.setDockPosition(value!)),
157+
enabled: model.extendDock != null),
158+
Padding(
159+
padding: const EdgeInsets.all(assetPadding),
160+
child: SvgPicture.asset(
161+
model.getRightSideAsset(),
162+
color: model.getDockPosition() == DockPosition.bottom
163+
? Theme.of(context).primaryColor.withOpacity(0.1)
164+
: Theme.of(context).backgroundColor,
165+
colorBlendMode: BlendMode.color,
166+
height: assetHeight,
167+
),
168+
),
169+
YaruRow(
170+
trailingWidget: const Text('Bottom'),
171+
description: 'Your dock appears on bottom side of your screen.',
172+
actionWidget: Radio<DockPosition>(
173+
value: DockPosition.right,
174+
groupValue: model.getDockPosition(),
175+
onChanged: (value) => model.setDockPosition(value!)),
176+
enabled: model.extendDock != null),
177+
Padding(
178+
padding: const EdgeInsets.all(assetPadding),
179+
child: SvgPicture.asset(
180+
model.getBottomAsset(),
181+
color: model.getDockPosition() == DockPosition.right
182+
? Theme.of(context).primaryColor.withOpacity(0.1)
183+
: Theme.of(context).backgroundColor,
184+
colorBlendMode: BlendMode.color,
185+
height: assetHeight,
186+
),
187+
),
188+
])
142189
],
143190
);
144191
}

lib/view/pages/multitasking/multi_tasking_model.dart

Lines changed: 108 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,30 +7,37 @@ class MultiTaskingModel extends SafeChangeNotifier {
77
final Settings? _mutterSettings;
88
final Settings? _appSwitchSettings;
99
final Settings? _wmSettings;
10+
final Settings? _dashToDockSettings;
1011

1112
static const _hotCornersKey = 'enable-hot-corners';
1213
static const _edgeTilingKey = 'edge-tiling';
1314
static const _workspacesOnlyOnPrimaryKey = 'workspaces-only-on-primary';
1415
static const _dynamicWorkspacesKey = 'dynamic-workspaces';
1516
static const _numWorkspacesKey = 'num-workspaces';
1617
static const _currentWorkspaceOnlyKey = 'current-workspace-only';
18+
static const _dockPositionKey = 'dock-position';
19+
static const _extendHeightKey = 'extend-height';
1720

1821
MultiTaskingModel(SettingsService service)
1922
: _multiTaskingSettings = service.lookup(schemaInterface),
2023
_mutterSettings = service.lookup(schemaMutter),
2124
_appSwitchSettings = service.lookup(schemaGnomeShellAppSwitcher),
22-
_wmSettings = service.lookup(schemaWmPreferences) {
25+
_wmSettings = service.lookup(schemaWmPreferences),
26+
_dashToDockSettings = service.lookup(schemaDashToDock) {
2327
_multiTaskingSettings?.addListener(notifyListeners);
2428
_mutterSettings?.addListener(notifyListeners);
2529
_appSwitchSettings?.addListener(notifyListeners);
2630
_wmSettings?.addListener(notifyListeners);
31+
_dashToDockSettings?.addListener(notifyListeners);
2732
}
2833

2934
@override
3035
void dispose() {
3136
_multiTaskingSettings?.removeListener(notifyListeners);
3237
_mutterSettings?.removeListener(notifyListeners);
3338
_appSwitchSettings?.removeListener(notifyListeners);
39+
_dashToDockSettings?.removeListener(notifyListeners);
40+
_wmSettings?.removeListener(notifyListeners);
3441
super.dispose();
3542
}
3643

@@ -91,4 +98,104 @@ class MultiTaskingModel extends SafeChangeNotifier {
9198
notifyListeners();
9299
}
93100
}
101+
102+
String _getDockPosition() {
103+
return _dashToDockSettings?.getValue(_dockPositionKey) ?? 'LEFT';
104+
}
105+
106+
bool _getExtendHeight() {
107+
return _dashToDockSettings?.getValue(_extendHeightKey) ?? true;
108+
}
109+
110+
String getHotCornerAsset() {
111+
// DOCK
112+
if (_getExtendHeight() == false) {
113+
if (_getDockPosition() == 'RIGHT') {
114+
return 'assets/images/multitasking/hot-corner-dock-mode/hot-corner-dock-right.svg';
115+
}
116+
if (_getDockPosition() == 'BOTTOM') {
117+
return 'assets/images/multitasking/hot-corner-dock-mode/hot-corner-dock-bottom.svg';
118+
}
119+
if (_getDockPosition() == 'LEFT') {
120+
return 'assets/images/multitasking/hot-corner-dock-mode/hot-corner-dock-left.svg';
121+
}
122+
}
123+
// PANEL
124+
if (_getDockPosition() == 'RIGHT') {
125+
return 'assets/images/multitasking/hot-corner-panel-mode/hot-corner-panel-right.svg';
126+
}
127+
if (_getDockPosition() == 'BOTTOM') {
128+
return 'assets/images/multitasking/hot-corner-panel-mode/hot-corner-panel-bottom.svg';
129+
}
130+
return 'assets/images/multitasking/hot-corner-panel-mode/hot-corner-panel-left.svg';
131+
}
132+
133+
String getActiveEdgesAsset() {
134+
// DOCK
135+
if (_getExtendHeight() == false) {
136+
if (_getDockPosition() == 'RIGHT') {
137+
return 'assets/images/multitasking/active-screen-edges-dock-mode/active-screen-edges-dock-right.svg';
138+
}
139+
if (_getDockPosition() == 'BOTTOM') {
140+
return 'assets/images/multitasking/active-screen-edges-dock-mode/active-screen-edges-dock-bottom.svg';
141+
}
142+
if (_getDockPosition() == 'LEFT') {
143+
return 'assets/images/multitasking/active-screen-edges-dock-mode/active-screen-edges-dock-left.svg';
144+
}
145+
}
146+
// PANEL
147+
if (_getDockPosition() == 'RIGHT') {
148+
return 'assets/images/multitasking/active-screen-edges-panel-mode/active-screen-edges-panel-right.svg';
149+
}
150+
if (_getDockPosition() == 'BOTTOM') {
151+
return 'assets/images/multitasking/active-screen-edges-panel-mode/active-screen-edges-panel-bottom.svg';
152+
}
153+
return 'assets/images/multitasking/active-screen-edges-panel-mode/active-screen-edges-panel-left.svg';
154+
}
155+
156+
String getWorkspacesSpanDisplayAsset() {
157+
// DOCK
158+
if (_getExtendHeight() == false) {
159+
if (_getDockPosition() == 'RIGHT') {
160+
return 'assets/images/multitasking/workspaces-dock-mode/workspaces-span-displays-dock-right.svg';
161+
}
162+
if (_getDockPosition() == 'BOTTOM') {
163+
return 'assets/images/multitasking/workspaces-dock-mode/workspaces-span-displays-dock-bottom.svg';
164+
}
165+
if (_getDockPosition() == 'LEFT') {
166+
return 'assets/images/multitasking/workspaces-dock-mode/workspaces-span-displays-dock-left.svg';
167+
}
168+
}
169+
// PANEL
170+
if (_getDockPosition() == 'RIGHT') {
171+
return 'assets/images/multitasking/workspaces-panel-mode/workspaces-span-displays-panel-right.svg';
172+
}
173+
if (_getDockPosition() == 'BOTTOM') {
174+
return 'assets/images/multitasking/workspaces-panel-mode/workspaces-span-displays-panel-bottom.svg';
175+
}
176+
return 'assets/images/multitasking/workspaces-panel-mode/workspaces-span-displays-panel-left.svg';
177+
}
178+
179+
String getWorkspacesPrimaryDisplayAsset() {
180+
// DOCK
181+
if (_getExtendHeight() == false) {
182+
if (_getDockPosition() == 'RIGHT') {
183+
return 'assets/images/multitasking/workspaces-dock-mode/workspaces-primary-display-dock-right.svg';
184+
}
185+
if (_getDockPosition() == 'BOTTOM') {
186+
return 'assets/images/multitasking/workspaces-dock-mode/workspaces-primary-display-dock-bottom.svg';
187+
}
188+
if (_getDockPosition() == 'LEFT') {
189+
return 'assets/images/multitasking/workspaces-dock-mode/workspaces-primary-display-dock-left.svg';
190+
}
191+
}
192+
// PANEL
193+
if (_getDockPosition() == 'RIGHT') {
194+
return 'assets/images/multitasking/workspaces-panel-mode/workspaces-primary-display-panel-right.svg';
195+
}
196+
if (_getDockPosition() == 'BOTTOM') {
197+
return 'assets/images/multitasking/workspaces-panel-mode/workspaces-primary-display-panel-bottom.svg';
198+
}
199+
return 'assets/images/multitasking/workspaces-panel-mode/workspaces-primary-display-panel-left.svg';
200+
}
94201
}

lib/view/pages/multitasking/multi_tasking_page.dart

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ class MultiTaskingPage extends StatelessWidget {
3535
Padding(
3636
padding: const EdgeInsets.all(20.0),
3737
child: SvgPicture.asset(
38-
'assets/images/multitasking/hot-corner-panel-mode/hot-corner-panel-left.svg',
38+
model.getHotCornerAsset(),
3939
color: (model.enableHotCorners != null &&
4040
model.enableHotCorners == true)
4141
? Theme.of(context).primaryColor.withOpacity(0.1)
@@ -58,7 +58,7 @@ class MultiTaskingPage extends StatelessWidget {
5858
Padding(
5959
padding: const EdgeInsets.all(20.0),
6060
child: SvgPicture.asset(
61-
'assets/images/multitasking/active-screen-edges-panel-mode/active-screen-edges-panel-left.svg',
61+
model.getActiveEdgesAsset(),
6262
color: model.edgeTiling != null && model.edgeTiling == true
6363
? Theme.of(context).primaryColor.withOpacity(0.1)
6464
: Theme.of(context).backgroundColor,
@@ -120,7 +120,7 @@ class MultiTaskingPage extends StatelessWidget {
120120
Padding(
121121
padding: const EdgeInsets.all(10.0),
122122
child: SvgPicture.asset(
123-
'assets/images/multitasking/workspaces-panel-mode/workspaces-span-displays-panel-left.svg',
123+
model.getWorkspacesSpanDisplayAsset(),
124124
color: !(model.workSpaceOnlyOnPrimary != null &&
125125
model.workSpaceOnlyOnPrimary == true)
126126
? Theme.of(context).primaryColor.withOpacity(0.1)
@@ -142,7 +142,7 @@ class MultiTaskingPage extends StatelessWidget {
142142
Padding(
143143
padding: const EdgeInsets.all(10.0),
144144
child: SvgPicture.asset(
145-
'assets/images/multitasking/workspaces-panel-mode/workspaces-primary-display-panel-left.svg',
145+
model.getWorkspacesPrimaryDisplayAsset(),
146146
color: !(model.workSpaceOnlyOnPrimary != null &&
147147
model.workSpaceOnlyOnPrimary == false)
148148
? Theme.of(context).primaryColor.withOpacity(0.1)

0 commit comments

Comments
 (0)