lift text-zoom into kernel, surface it in the palette (T-114)
test / unit + widget + golden + a11y (push) Failing after 30s
test / integration_test (xvfb) (push) Has been skipped
test / bundle smoke (xvfb 5s) (push) Has been skipped
test / daemon subprocess + web WASM smoke (push) Has been skipped
test / dart doc (lib API) (push) Failing after 1m1s
test / unit + widget + golden + a11y (push) Failing after 30s
test / integration_test (xvfb) (push) Has been skipped
test / bundle smoke (xvfb 5s) (push) Has been skipped
test / daemon subprocess + web WASM smoke (push) Has been skipped
test / dart doc (lib API) (push) Failing after 1m1s
Workspace text-zoom (Ctrl +/-/0) was local state on _RootShellState, reachable only via the keymap intent path. Lifted to a kernel TextZoom ChangeNotifier so the new `view.zoomIn/Out/Reset` palette commands mutate the same number the keymap does — closing T-114's "discoverable in the palette" item. Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -5,6 +5,7 @@ import 'package:clide/clide.dart';
|
||||
import 'package:clide/kernel/src/clipboard.dart';
|
||||
import 'package:clide/kernel/src/commands/keybindings.dart';
|
||||
import 'package:clide/kernel/src/keymap/keymap_service.dart';
|
||||
import 'package:clide/kernel/src/text_zoom.dart';
|
||||
import 'package:clide/kernel/src/commands/palette.dart';
|
||||
import 'package:clide/kernel/src/commands/registry.dart';
|
||||
import 'package:clide/kernel/src/dialog.dart';
|
||||
@@ -65,6 +66,7 @@ class KernelServices {
|
||||
required this.toolchain,
|
||||
required this.scheduler,
|
||||
required this.keymap,
|
||||
required this.textZoom,
|
||||
});
|
||||
|
||||
final Logger log;
|
||||
@@ -94,6 +96,7 @@ class KernelServices {
|
||||
final Toolchain toolchain;
|
||||
final SchedulerService scheduler;
|
||||
final KeymapService keymap;
|
||||
final TextZoom textZoom;
|
||||
|
||||
static Future<KernelServices> boot({
|
||||
required Directory appDir,
|
||||
@@ -151,6 +154,7 @@ class KernelServices {
|
||||
final tc = toolchain ?? Toolchain();
|
||||
final scheduler = SchedulerService(events);
|
||||
scheduler.start();
|
||||
final textZoom = TextZoom();
|
||||
final project = ProjectManager(
|
||||
log: log,
|
||||
events: events,
|
||||
@@ -225,6 +229,7 @@ class KernelServices {
|
||||
toolchain: tc,
|
||||
scheduler: scheduler,
|
||||
keymap: keymap,
|
||||
textZoom: textZoom,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -247,6 +252,7 @@ class KernelServices {
|
||||
extensions.dispose();
|
||||
await scheduler.dispose();
|
||||
keymap.dispose();
|
||||
textZoom.dispose();
|
||||
await log.dispose();
|
||||
messages.dispose();
|
||||
await events.dispose();
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
import 'package:flutter/foundation.dart';
|
||||
|
||||
/// Workspace-wide text zoom factor.
|
||||
///
|
||||
/// Owned by the kernel rather than the root widget so command-palette
|
||||
/// entries, the keymap layer, and any future menu/CLI surface can mutate
|
||||
/// the same number. The root `MediaQuery` listens via [ChangeNotifier].
|
||||
class TextZoom extends ChangeNotifier {
|
||||
TextZoom();
|
||||
|
||||
static const double minScale = 0.6;
|
||||
static const double maxScale = 2.0;
|
||||
static const double stepScale = 0.05;
|
||||
|
||||
double _scale = 1.0;
|
||||
double get scale => _scale;
|
||||
|
||||
void increase() => _setScale(_scale + stepScale);
|
||||
void decrease() => _setScale(_scale - stepScale);
|
||||
void reset() => _setScale(1.0);
|
||||
|
||||
void _setScale(double next) {
|
||||
final clamped = next.clamp(minScale, maxScale);
|
||||
if (clamped == _scale) return;
|
||||
_scale = clamped;
|
||||
notifyListeners();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user