refact: unify monitor-switch button icons, share tooltip

Addressing the review feedback on the monitor-switch toolbar buttons:

- Add assets/display_switcher.svg and use it for both the main and minimized buttons. This replaces the hand-drawn glyph (Containers + magic numbers) on the main toolbar. The icon scales with DPI/theme and the two toolbars stay visually consistent.
- Flip the minimized button's label to white for contrast, since the new icon has a solid screen.
- Move the tooltip string into a shared _MonitorCycle.tooltip getter so both buttons use one source of truth.
- Use const Offstage() for consistency with the surrounding returns.

Signed-off-by: StealUrKill <35749471+StealUrKill@users.noreply.github.com>
This commit is contained in:
StealUrKill 2026-06-18 11:36:39 -05:00
commit 83ba1e4574
2 changed files with 34 additions and 39 deletions

View file

@ -0,0 +1,7 @@
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32">
<g fill="#000000" fill-rule="evenodd">
<rect x="4" y="6" width="24" height="16" rx="3"/>
<rect x="14.5" y="22" width="3" height="2"/>
<rect x="9.5" y="24" width="13" height="2.5" rx="1.25"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 303 B

View file

@ -813,7 +813,7 @@ class _RemoteToolbarState extends State<RemoteToolbar> {
mainGetLocalBoolOptionSync(kOptionAllowMonitorSwitchMainToolbar)) {
return _MainMonitorSwitchButton(id: widget.id, ffi: widget.ffi);
} else {
return Offstage();
return const Offstage();
}
}));
if (!isWebDesktop) {
@ -986,6 +986,7 @@ class _MonitorCycle {
bool get _inRange => _current >= 0 && _current < total;
String get label => _inRange ? '${_current + 1}' : '*';
String get tooltip => '${translate('Switch display')} ($label/$total)';
void next() {
final t = total;
@ -1013,47 +1014,34 @@ class _MainMonitorSwitchButton extends StatelessWidget {
final label = cycle.label;
return _IconMenuButton(
tooltip: '${translate('Switch display')} ($label/${cycle.total})',
tooltip: cycle.tooltip,
color: _ToolbarTheme.blueColor,
hoverColor: _ToolbarTheme.hoverBlueColor,
onPressed: cycle.next,
icon: SizedBox(
width: _ToolbarTheme.buttonSize,
height: _ToolbarTheme.buttonSize,
child: Center(
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Container(
width: 23,
height: 16,
alignment: Alignment.center,
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(4),
),
child: Text(
label,
textAlign: TextAlign.center,
style: const TextStyle(
color: Colors.black,
fontSize: 11,
height: 1,
fontWeight: FontWeight.bold,
),
),
child: Stack(
alignment: const Alignment(0, -0.125),
children: [
SvgPicture.asset(
'assets/display_switcher.svg',
colorFilter:
const ColorFilter.mode(Colors.white, BlendMode.srcIn),
width: _ToolbarTheme.buttonSize,
height: _ToolbarTheme.buttonSize,
),
Text(
label,
textAlign: TextAlign.center,
style: const TextStyle(
color: Colors.black,
fontSize: 11,
height: 1,
fontWeight: FontWeight.bold,
),
Container(width: 3, height: 2, color: Colors.white),
Container(
width: 9,
height: 2,
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(1),
),
),
],
),
),
],
),
),
);
@ -3537,7 +3525,7 @@ class _MinimizedMonitorSwitchButton extends StatelessWidget {
}
return Tooltip(
message: '${translate('Switch display')} ($label/${cycle.total})',
message: cycle.tooltip,
child: TextButton(
onPressed: cycle.next,
style: ButtonStyle(
@ -3551,10 +3539,10 @@ class _MinimizedMonitorSwitchButton extends StatelessWidget {
}),
),
child: Stack(
alignment: const Alignment(0, -0.15),
alignment: const Alignment(0, -0.125),
children: [
SvgPicture.asset(
'assets/display.svg',
'assets/display_switcher.svg',
colorFilter:
ColorFilter.mode(_ToolbarTheme.blueColor, BlendMode.srcIn),
width: iconSize,
@ -3563,7 +3551,7 @@ class _MinimizedMonitorSwitchButton extends StatelessWidget {
Text(
label,
style: const TextStyle(
color: _ToolbarTheme.blueColor,
color: Colors.white,
fontSize: 9,
height: 1,
fontWeight: FontWeight.bold,