diff --git a/thermion_flutter/thermion_flutter/lib/src/widgets/src/thermion_widget.dart b/thermion_flutter/thermion_flutter/lib/src/widgets/src/thermion_widget.dart index 974faa06..4f7f3e72 100644 --- a/thermion_flutter/thermion_flutter/lib/src/widgets/src/thermion_widget.dart +++ b/thermion_flutter/thermion_flutter/lib/src/widgets/src/thermion_widget.dart @@ -6,7 +6,6 @@ import 'package:thermion_flutter/src/widgets/src/thermion_widget_web.dart'; import 'package:thermion_flutter/thermion_flutter.dart'; import 'package:thermion_flutter_web/thermion_flutter_web_options.dart'; import 'package:thermion_dart/src/viewer/src/shared_types/view.dart' as t; -import 'thermion_widget_windows.dart'; Future kDefaultResizeCallback(Size size, t.View view, double pixelRatio) async { var camera = await view.getCamera(); @@ -87,7 +86,7 @@ class _ThermionWidgetState extends State { return widget.initial ?? Container(color: Colors.red); } - // Windows & Web don't support imported textures yet + // Web doesn't support imported textures yet if (kIsWeb) { return ThermionWidgetWeb( viewer: widget.viewer, diff --git a/thermion_flutter/thermion_flutter/lib/src/widgets/src/thermion_widget_windows.dart b/thermion_flutter/thermion_flutter/lib/src/widgets/src/thermion_widget_windows.dart deleted file mode 100644 index eea2cb12..00000000 --- a/thermion_flutter/thermion_flutter/lib/src/widgets/src/thermion_widget_windows.dart +++ /dev/null @@ -1,168 +0,0 @@ -import 'dart:async'; - -import 'package:flutter/material.dart'; -import 'package:flutter/widgets.dart'; -import 'package:thermion_flutter/src/widgets/src/resize_observer.dart'; -import 'package:thermion_flutter/src/widgets/src/transparent_filament_widget.dart'; -import 'package:thermion_flutter/thermion_flutter.dart' as t; -import 'package:thermion_flutter_platform_interface/thermion_flutter_window.dart'; - -class ThermionWidgetWindows extends StatefulWidget { - - final t.ThermionViewer viewer; - - final t.View view; - - /// - /// - /// - final Widget? initial; - - /// - /// A callback that will be invoked whenever this widget (and the underlying texture is resized). - /// - final Future Function(Size size, t.View view, double pixelRatio)? onResize; - - const ThermionWidgetWindows({super.key, required this.viewer, this.initial, this.onResize, required this.view}); - - - @override - State createState() => _ThermionWidgetWindowsState(); -} - -class _ThermionWidgetWindowsState extends State { - - ThermionFlutterWindow? _window; - - @override - void initState() { - super.initState(); - - WidgetsBinding.instance.addPostFrameCallback((timeStamp) async { - await widget.viewer.initialized; - - var dpr = MediaQuery.of(context).devicePixelRatio; - - final renderBox = ((context.findRenderObject()) as RenderBox); - var size = renderBox.size; - var width = (size.width * dpr).ceil(); - var height = (size.height * dpr).ceil(); - - final offset = renderBox.localToGlobal(Offset.zero); - final offsetLeft = (offset.dx * dpr).toInt(); - final offsetTop = (offset.dy * dpr).toInt(); - - _window = await t.ThermionFlutterPlatform.instance.createWindow(width, height, offsetLeft, offsetTop); - - await widget.view.updateViewport(_window!.width, _window!.height); - - try { - await widget.onResize?.call( - Size(_window!.width.toDouble(), _window!.height.toDouble()), - widget.view, - dpr); - } catch (err, st) { - print(err); - print(st); - } - - if (mounted) { - setState(() {}); - } - - _requestFrame(); - - widget.viewer.onDispose(() async { - var window = _window; - if (mounted) { - setState(() {}); - } - await window?.destroy(); - }); - }); - } - - bool _rendering = false; - - void _requestFrame() { - WidgetsBinding.instance.scheduleFrameCallback((d) async { - if (widget.viewer.rendering && !_rendering) { - _rendering = true; - await widget.viewer.requestFrame(); - _rendering = false; - } - _requestFrame(); - }); - } - - final _resizing = []; - - Timer? _resizeTimer; - - Future _resize(Size oldSize, Size newSize) async { - await Future.wait(_resizing); - - _resizeTimer?.cancel(); - - _resizeTimer = Timer(const Duration(milliseconds: 100), () async { - await Future.wait(_resizing); - if (!mounted) { - return; - } - - if (newSize.width == _window?.width && - newSize.height == _window?.height) { - return; - } - - final completer = Completer(); - - _resizing.add(completer.future); - - final dpr = MediaQuery.of(context).devicePixelRatio; - - newSize *= dpr; - - var newWidth = newSize.width.ceil(); - var newHeight = newSize.height.ceil(); - - final renderBox = context.findRenderObject() as RenderBox; - final offset = renderBox.localToGlobal(Offset.zero); - final offsetLeft = (offset.dx * dpr).toInt(); - final offsetTop = (offset.dy * dpr).toInt(); - - await _window?.resize( - newWidth, - newHeight, - offsetLeft, - offsetTop, - ); - - await widget.view.updateViewport(_window!.width, _window!.height); - - await widget.onResize?.call( - Size(_window!.width.toDouble(), _window!.height.toDouble()), - widget.view, - dpr); - - if (!mounted) { - return; - } - setState(() {}); - completer.complete(); - _resizing.remove(completer.future); - }); - } - - @override - Widget build(BuildContext context) { - if (_window == null) { - return widget.initial ?? Container(color: Colors.red); - } - - return ResizeObserver( - onResized: _resize, - child: CustomPaint(painter:TransparencyPainter())); - } - -}