blob: 99960383b6df6bf29c47bb1983ee44be17fc0165 [file]
// Copyright 2014 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// ignore_for_file: invalid_use_of_internal_member
// ignore_for_file: implementation_imports
import 'package:flutter/src/widgets/_window.dart';
import 'package:flutter/src/widgets/_window_positioner.dart';
import 'package:flutter/widgets.dart';
class TooltipSettings {}
/// Settings that control the behavior of newly created windows.
class WindowSettings {
WindowSettings({
this.regularSize = const Size(800, 600),
this.dialogSize = const Size(400, 400),
this.positioner = const WindowPositioner(
parentAnchor: WindowPositionerAnchor.right,
childAnchor: WindowPositionerAnchor.left,
),
});
/// The initial size for newly created regular windows.
Size regularSize;
/// The initial size of the dialog window.
Size dialogSize;
/// The positioner used to determine where new tooltips and popups are placed.
WindowPositioner positioner;
}
/// Provides access to the [WindowSettings] from the widget tree.
class WindowSettingsAccessor extends InheritedWidget {
const WindowSettingsAccessor({super.key, required super.child, required this.windowSettings});
final WindowSettings windowSettings;
static WindowSettings of(BuildContext context) {
final WindowSettingsAccessor? result = context
.dependOnInheritedWidgetOfExactType<WindowSettingsAccessor>();
assert(result != null, 'No WindowSettings found in context');
return result!.windowSettings;
}
@override
bool updateShouldNotify(WindowSettingsAccessor oldWidget) {
return windowSettings != oldWidget.windowSettings;
}
}
class CallbackDialogWindowControllerDelegate with DialogWindowControllerDelegate {
CallbackDialogWindowControllerDelegate({required this.onDestroyed});
@override
void onWindowDestroyed() {
onDestroyed();
super.onWindowDestroyed();
}
final VoidCallback onDestroyed;
}
String anchorToString(WindowPositionerAnchor anchor) {
return switch (anchor) {
WindowPositionerAnchor.center => 'Center',
WindowPositionerAnchor.top => 'Top',
WindowPositionerAnchor.bottom => 'Bottom',
WindowPositionerAnchor.left => 'Left',
WindowPositionerAnchor.right => 'Right',
WindowPositionerAnchor.topLeft => 'Top Left',
WindowPositionerAnchor.bottomLeft => 'Bottom Left',
WindowPositionerAnchor.topRight => 'Top Right',
WindowPositionerAnchor.bottomRight => 'Bottom Right',
};
}