ImageModel
This commit is contained in:
parent
63930918f6
commit
0d4c85b3df
@ -7,6 +7,7 @@ import 'dart:async';
|
|||||||
import 'dart:convert';
|
import 'dart:convert';
|
||||||
import 'package:flutter_easyloading/flutter_easyloading.dart';
|
import 'package:flutter_easyloading/flutter_easyloading.dart';
|
||||||
import 'dart:typed_data';
|
import 'dart:typed_data';
|
||||||
|
import 'dart:ui' as ui;
|
||||||
|
|
||||||
class RgbaFrame extends Struct {
|
class RgbaFrame extends Struct {
|
||||||
@Uint32()
|
@Uint32()
|
||||||
@ -50,6 +51,17 @@ class FfiModel with ChangeNotifier {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class ImageModel with ChangeNotifier {
|
||||||
|
ui.Image _image;
|
||||||
|
|
||||||
|
ui.Image get image => _image;
|
||||||
|
|
||||||
|
void update(ui.Image image) {
|
||||||
|
_image = image;
|
||||||
|
notifyListeners();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
class FFI {
|
class FFI {
|
||||||
static F1 _freeCString;
|
static F1 _freeCString;
|
||||||
static F2 _getByName;
|
static F2 _getByName;
|
||||||
@ -57,6 +69,8 @@ class FFI {
|
|||||||
static F4 _freeRgba;
|
static F4 _freeRgba;
|
||||||
static F5 _getRgba;
|
static F5 _getRgba;
|
||||||
static Pointer<RgbaFrame> _lastRgbaFrame;
|
static Pointer<RgbaFrame> _lastRgbaFrame;
|
||||||
|
static final imageModel = ImageModel();
|
||||||
|
static final ffiModel = FfiModel();
|
||||||
|
|
||||||
static String getId() {
|
static String getId() {
|
||||||
return getByName('remote_id');
|
return getByName('remote_id');
|
||||||
@ -115,6 +129,7 @@ class FFI {
|
|||||||
|
|
||||||
static void close() {
|
static void close() {
|
||||||
setByName('close', '');
|
setByName('close', '');
|
||||||
|
FFI.imageModel.update(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void setByName(String name, String value) {
|
static void setByName(String name, String value) {
|
||||||
|
@ -10,16 +10,17 @@ void main() {
|
|||||||
class App extends StatelessWidget {
|
class App extends StatelessWidget {
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
var ffi = FfiModel();
|
|
||||||
return ChangeNotifierProvider.value(
|
return ChangeNotifierProvider.value(
|
||||||
value: ffi,
|
value: FFI.ffiModel,
|
||||||
child: MaterialApp(
|
child: ChangeNotifierProvider.value(
|
||||||
title: 'RustDesk',
|
value: FFI.imageModel,
|
||||||
theme: ThemeData(
|
child: MaterialApp(
|
||||||
primarySwatch: Colors.blue,
|
title: 'RustDesk',
|
||||||
visualDensity: VisualDensity.adaptivePlatformDensity,
|
theme: ThemeData(
|
||||||
),
|
primarySwatch: Colors.blue,
|
||||||
home: HomePage(title: 'RustDesk'),
|
visualDensity: VisualDensity.adaptivePlatformDensity,
|
||||||
));
|
),
|
||||||
|
home: HomePage(title: 'RustDesk'),
|
||||||
|
)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:provider/provider.dart';
|
||||||
import 'common.dart';
|
import 'common.dart';
|
||||||
import 'package:flutter/services.dart';
|
import 'package:flutter/services.dart';
|
||||||
import 'dart:ui' as ui;
|
import 'dart:ui' as ui;
|
||||||
@ -18,7 +19,6 @@ class RemotePage extends StatefulWidget {
|
|||||||
// https://github.com/hanxu317317/flutter_plan_demo/blob/master/lib/src/enter.dart
|
// https://github.com/hanxu317317/flutter_plan_demo/blob/master/lib/src/enter.dart
|
||||||
class _RemotePageState extends State<RemotePage> {
|
class _RemotePageState extends State<RemotePage> {
|
||||||
Timer _interval;
|
Timer _interval;
|
||||||
ui.Image _image;
|
|
||||||
PeerInfo _pi = PeerInfo();
|
PeerInfo _pi = PeerInfo();
|
||||||
Display _display = Display();
|
Display _display = Display();
|
||||||
bool _decoding = false;
|
bool _decoding = false;
|
||||||
@ -64,13 +64,11 @@ class _RemotePageState extends State<RemotePage> {
|
|||||||
_decoding = true;
|
_decoding = true;
|
||||||
ui.decodeImageFromPixels(
|
ui.decodeImageFromPixels(
|
||||||
rgba, _display.width, _display.height, ui.PixelFormat.bgra8888,
|
rgba, _display.width, _display.height, ui.PixelFormat.bgra8888,
|
||||||
(__image) {
|
(image) {
|
||||||
FFI.clearRgbaFrame();
|
FFI.clearRgbaFrame();
|
||||||
if (_decoding == null) return;
|
if (_decoding == null) return;
|
||||||
_decoding = false;
|
_decoding = false;
|
||||||
setState(() {
|
FFI.imageModel.update(image);
|
||||||
_image = __image;
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -133,17 +131,23 @@ class _RemotePageState extends State<RemotePage> {
|
|||||||
onInteractionUpdate: (details) {
|
onInteractionUpdate: (details) {
|
||||||
print("$details");
|
print("$details");
|
||||||
},
|
},
|
||||||
child: Container(
|
child: Container(child: ImagePaint(), color: MyTheme.grayBg),
|
||||||
child: CustomPaint(
|
|
||||||
painter: new ImageEditor(image: _image),
|
|
||||||
),
|
|
||||||
color: MyTheme.grayBg),
|
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class ImageEditor extends CustomPainter {
|
class ImagePaint extends StatelessWidget {
|
||||||
ImageEditor({
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
final m = Provider.of<ImageModel>(context);
|
||||||
|
return CustomPaint(
|
||||||
|
painter: new ImagePainter(image: m.image),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class ImagePainter extends CustomPainter {
|
||||||
|
ImagePainter({
|
||||||
this.image,
|
this.image,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user