Skip to content
This repository has been archived by the owner on Sep 27, 2024. It is now read-only.

Commit

Permalink
feat: adding window dragging
Browse files Browse the repository at this point in the history
  • Loading branch information
RossComputerGuy committed May 11, 2024
1 parent 4888df1 commit 6ac88cf
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 7 deletions.
14 changes: 13 additions & 1 deletion lib/widgets/toplevel.dart
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,14 @@ class ToplevelDecor extends StatelessWidget {
this.onMinimize,
this.onMaximize,
this.onClose,
this.onDrag,
});

final DisplayServerToplevel toplevel;
final VoidCallback? onMinimize;
final VoidCallback? onMaximize;
final VoidCallback? onClose;
final GestureDragUpdateCallback? onDrag;

@override
Widget build(BuildContext context) {
Expand All @@ -38,7 +40,8 @@ class ToplevelDecor extends StatelessWidget {
icon: Icon(Icons.circleXmark),
) : null,
].where((e) => e != null).toList().cast<Widget>();
return AppBar(

Widget value = AppBar(
automaticallyImplyLeading: false,
primary: false,
title: Text(toplevel.title ?? 'Untitled Window'),
Expand All @@ -54,6 +57,15 @@ class ToplevelDecor extends StatelessWidget {
const SizedBox()
] : actions,
);

if (onDrag != null) {
value = GestureDetector(
onPanUpdate: onDrag!,
child: value,
);
}

return value;
}
}

Expand Down
21 changes: 15 additions & 6 deletions lib/widgets/wm.dart
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,11 @@ class WindowView extends StatelessWidget {
final WindowManagerMode? mode;

Widget _buildInner(BuildContext context) {
final _win = context.watch<Window>();
final _mode = mode ?? _win.manager.mode;

Widget content = ToplevelView(
toplevel: win.toplevel,
toplevel: _win.toplevel,
buildDecor: (context, toplevel, content) =>
!Breakpoints.small.isActive(context)
? Container(
Expand All @@ -36,6 +39,10 @@ class WindowView extends StatelessWidget {
onClose: () {
win.toplevel.close();
},
onDrag: (info) {
_win.x += info.delta.dx;
_win.y += info.delta.dy;
},
),
ClipRRect(
borderRadius: BorderRadius.only(
Expand All @@ -49,13 +56,13 @@ class WindowView extends StatelessWidget {
) : null,
);

if (mode == WindowManagerMode.floating) {
if (_mode == WindowManagerMode.floating) {
content = Positioned(
top: win.y,
left: win.x,
top: _win.y,
left: _win.x,
child: Container(
width: win.toplevel.size != null ? (win.toplevel.size!.width ?? 0).toDouble() : null,
height: win.toplevel.size != null ? (win.toplevel.size!.height ?? 0).toDouble() + (kToolbarHeight / 1.5) : null,
width: _win.toplevel.size != null ? (_win.toplevel.size!.width ?? 0).toDouble() : null,
height: _win.toplevel.size != null ? (_win.toplevel.size!.height ?? 0).toDouble() + (kToolbarHeight / 1.5) : null,
child: content,
),
);
Expand Down Expand Up @@ -103,6 +110,8 @@ class WindowManagerViewState extends State<WindowManagerView> {
void initState() {
super.initState();

_instance.mode = widget.mode;

_toplevelAdded = widget.displayServer.toplevelAdded.listen((toplevel) {
_instance.fromToplevel(toplevel);
});
Expand Down

0 comments on commit 6ac88cf

Please sign in to comment.