Initial commit

This commit is contained in:
admin1
2026-07-14 11:11:36 +08:00
commit 656499cf94
604 changed files with 119518 additions and 0 deletions
@@ -0,0 +1,89 @@
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import '../theme/app_theme.dart';
import 'top_drag_area.dart';
import 'window_chrome.dart';
import 'window_controls.dart';
class WindowChromeOverlay extends StatelessWidget {
final bool onDarkSurface;
const WindowChromeOverlay({super.key, this.onDarkSurface = false});
@override
Widget build(BuildContext context) {
if (!WindowChrome.isDesktop) {
return const SizedBox.shrink();
}
final AppTokens tokens = context.appTokens;
return Positioned(
top: 0,
left: 0,
right: 0,
height: tokens.titleBarHeight,
child: _HitTestPassThrough(
child: Stack(
children: [
const Positioned.fill(
child: TopDragArea(child: SizedBox.expand()),
),
Positioned(
top: tokens.chromeInset,
right: tokens.chromeInset,
child: onDarkSurface
? const WindowControls.forDarkSurface()
: const WindowControls.forShellOverlay(),
),
],
),
),
);
}
}
class WindowChromeHost extends StatelessWidget {
final Widget child;
final bool onDarkSurface;
const WindowChromeHost({
super.key,
required this.child,
this.onDarkSurface = false,
});
@override
Widget build(BuildContext context) {
if (!WindowChrome.isDesktop) {
return child;
}
return Stack(
fit: StackFit.expand,
children: [
child,
WindowChromeOverlay(onDarkSurface: onDarkSurface),
],
);
}
}
class _HitTestPassThrough extends SingleChildRenderObjectWidget {
const _HitTestPassThrough({required super.child});
@override
RenderObject createRenderObject(BuildContext context) =>
_RenderHitTestPassThrough();
}
class _RenderHitTestPassThrough extends RenderProxyBox {
@override
bool hitTest(BoxHitTestResult result, {required Offset position}) {
hitTestChildren(result, position: position);
return false;
}
}