flutter: A floating window is now shown
This commit is contained in:
@@ -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() {
|
||||
|
||||
@@ -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)]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
@@ -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(() {});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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(),
|
||||
|
||||
Reference in New Issue
Block a user