flutter: A floating window is now shown

This commit is contained in:
Sergio Martins
2022-09-11 16:37:39 +01:00
parent 617c3d0029
commit fd122b08da
5 changed files with 53 additions and 7 deletions

View File

@@ -20,6 +20,7 @@ class DropArea_flutter extends View_flutter {
{int windowFlags = 0})
: super(controller, type, parent, windowFlags: windowFlags) {
print("DropArea_flutter CTOR");
m_fillsParent = true;
}
Widget createFlutterWidget() {

View File

@@ -13,18 +13,35 @@ import 'package:KDDockWidgets/PositionedWidget.dart';
import 'package:KDDockWidgets/View_mixin.dart';
import 'package:KDDockWidgetsBindings/Bindings.dart' as KDDockWidgetBindings;
import 'package:flutter/material.dart';
import 'TitleBar_flutter.dart';
import 'DropArea_flutter.dart';
class FloatingWindow_flutter extends KDDockWidgetBindings.View_flutter
with View_mixin {
late final KDDockWidgetBindings.FloatingWindow m_controller;
FloatingWindow_flutter(KDDockWidgetBindings.Controller? controller,
KDDockWidgetBindings.View? parent, {int windowFlags = 0})
: super(controller,
KDDockWidgetBindings.KDDockWidgets_Type.FloatingWindow, parent,
windowFlags: windowFlags) {
m_controller = controller! as KDDockWidgetBindings.FloatingWindow;
m_fillsParent = true;
initMixin(this, color: Colors.black12, debugName: "FloatingWindow");
print("FloatingWindow_flutter CTOR");
}
TitleBar_flutter titleBarView() {
return KDDockWidgetBindings.View_flutter.fromCache(
m_controller.titleBar().view().thisCpp) as TitleBar_flutter;
}
DropArea_flutter dropAreaView() {
return KDDockWidgetBindings.View_flutter.fromCache(
m_controller.dropArea().view().thisCpp) as DropArea_flutter;
}
Widget createFlutterWidget() {
return FloatingWindowWidget(kddwView, this, key: widgetKey);
}
@@ -49,6 +66,9 @@ class FloatingWindowPositionedWidgetState extends PositionedWidgetState {
@override
Widget buildContents() {
return super.buildContents();
final titleBarWidget = view.titleBarView().flutterWidget;
final dropAreaWidget = view.dropAreaView().flutterWidget;
return Column(children: [titleBarWidget, Expanded(child: dropAreaWidget)]);
}
}

View File

@@ -18,11 +18,20 @@ import 'ViewFactory_flutter.dart';
class Platform_flutter extends KDDockWidgetBindings.Platform_flutter {
late final WindowOverlayWidget windowOverlayWidget;
var floatingWindows = <KDDockWidgetBindings.FloatingWindow>[];
@override
String name() {
return "flutter";
}
static Platform_flutter plat() {
var p = KDDockWidgetBindings.Platform_flutter.platformFlutter();
return KDDockWidgetBindings.Platform_flutter.fromCache(p.thisCpp)
as Platform_flutter;
}
@override
KDDockWidgetBindings.ViewFactory createDefaultViewFactory() {
return ViewFactory_flutter();
@@ -45,11 +54,13 @@ class Platform_flutter extends KDDockWidgetBindings.Platform_flutter {
@override
onFloatingWindowCreated(KDDockWidgetBindings.FloatingWindow? fw) {
floatingWindows.add(fw!);
rebuildWindowOverlay();
}
@override
onFloatingWindowDestroyed(KDDockWidgetBindings.FloatingWindow? fw) {
floatingWindows.remove(fw!);
rebuildWindowOverlay();
}

View File

@@ -9,8 +9,10 @@
Contact KDAB at <info@kdab.com> for commercial licensing options.
*/
import 'package:KDDockWidgets/WindowWidget.dart';
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:KDDockWidgets/Platform_flutter.dart';
/// @brief A Widget to host KDDW floating windows
/// Since Flutter doesn't support real OS level multi-windows we need
@@ -32,10 +34,17 @@ class WindowOverlayWidget extends StatefulWidget {
class WindowOverlayWidgetState extends State<WindowOverlayWidget> {
@override
Widget build(BuildContext context) {
return Stack(children: []);
final floatingWindows = Platform_flutter.plat().floatingWindows;
List<Widget> windowWidgets = [];
for (var fw in floatingWindows) {
windowWidgets.add(WindowWidget(fw));
}
return Stack(children: windowWidgets);
}
onFloatingWindowCountChanged() {
print("onFloatingWindowCountChanged!");
setState(() {});
}
}

View File

@@ -12,13 +12,18 @@
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:KDDockWidgets/FloatingWindow_flutter.dart' as KDDW;
import 'package:KDDockWidgetsBindings/Bindings.dart' as KDDWBindings;
/// @brief A Widget that hosts a single KDDW FloatingWindow
/// Since Flutter doesn't support real OS level multi-windows we need
/// to draw the windows ourselves
class WindowWidget extends StatefulWidget {
late final KDDW.FloatingWindow_flutter kddwFloatingWindowView;
WindowWidget(this.kddwFloatingWindowView);
WindowWidget(KDDWBindings.FloatingWindow fw) {
kddwFloatingWindowView =
KDDWBindings.View_flutter.fromCache(fw.view().thisCpp)
as KDDW.FloatingWindow_flutter;
}
@override
State<StatefulWidget> createState() {
@@ -32,10 +37,10 @@ class WindowWidgetState extends State<WindowWidget> {
@override
Widget build(BuildContext context) {
final x = kddwFloatingWindowView.x();
final y = kddwFloatingWindowView.y();
final width = kddwFloatingWindowView.width();
final height = kddwFloatingWindowView.height();
final x = kddwFloatingWindowView.m_x;
final y = kddwFloatingWindowView.m_y;
final width = kddwFloatingWindowView.m_width;
final height = kddwFloatingWindowView.m_height;
return Positioned(
left: x.toDouble(),