Initial commit
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user