mirror of
https://github.com/rustdesk/rustdesk.git
synced 2026-09-14 08:21:02 +03:00
test: share cursor painting recorders
This commit is contained in:
@@ -4,13 +4,14 @@ import 'dart:ui' as ui;
|
||||
import 'package:flutter/widgets.dart';
|
||||
import 'package:flutter_hbb/consts.dart';
|
||||
import 'package:flutter_hbb/desktop/pages/remote_page.dart';
|
||||
import 'package:flutter_hbb/models/desktop_render_texture.dart';
|
||||
import 'package:flutter_hbb/models/model.dart';
|
||||
import 'package:flutter_hbb/utils/image.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
import 'cursor_test_utils.dart';
|
||||
|
||||
const _hotspot = Offset(4, 9);
|
||||
const _remotePosition = Offset(100.25, 80.75);
|
||||
const _canvasOffset = Offset(15.125, -10.25);
|
||||
@@ -54,11 +55,6 @@ class _ImageModel extends ChangeNotifier implements ImageModel {
|
||||
dynamic noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
|
||||
}
|
||||
|
||||
class _TextureModel extends Fake implements TextureModel {
|
||||
@override
|
||||
RxInt getTextureId(int display) => 0.obs;
|
||||
}
|
||||
|
||||
class _Display extends Display {
|
||||
_Display(this.scale, double left) {
|
||||
x = left;
|
||||
@@ -90,7 +86,7 @@ class _FFI extends Fake implements FFI {
|
||||
@override
|
||||
final _Peer ffiModel = _Peer();
|
||||
@override
|
||||
final textureModel = _TextureModel();
|
||||
final textureModel = CursorTestTexture();
|
||||
@override
|
||||
late CanvasModel canvasModel;
|
||||
}
|
||||
@@ -145,19 +141,6 @@ class _ScrollbarCanvasModel extends _CanvasModel {
|
||||
double get scrollY => _ffi.ffiModel.rect.height * scale > size.height ? 0.2 : 0;
|
||||
}
|
||||
|
||||
class _Canvas extends Fake implements Canvas {
|
||||
double factor = 1;
|
||||
Offset? position;
|
||||
|
||||
@override
|
||||
void scale(double sx, [double? sy]) => factor *= sx;
|
||||
|
||||
@override
|
||||
void drawImage(ui.Image image, Offset offset, Paint paint) {
|
||||
position = offset * factor;
|
||||
}
|
||||
}
|
||||
|
||||
Future<ImagePainter> _paintCursor(WidgetTester tester, CanvasModel canvas,
|
||||
{double dpr = 2, bool zoom = true, (int, int) source = (48, 64),
|
||||
Offset position = _remotePosition, double density = 0}) async {
|
||||
@@ -257,7 +240,7 @@ void main() {
|
||||
var imageOrigin = texture
|
||||
? tester.getTopLeft(find.byType(Texture).first) : _canvasOffset;
|
||||
if (!texture) {
|
||||
final background = _Canvas();
|
||||
final background = CursorTestDraw();
|
||||
ImagePainter(
|
||||
image: painter.image,
|
||||
x: _canvasOffset.dx / canvasScale,
|
||||
@@ -270,7 +253,7 @@ void main() {
|
||||
final hotspot = (Offset(painter.x, painter.y) + _hotspot) * scale;
|
||||
expect(hotspot.dx, closeTo(target.dx, 1e-9));
|
||||
expect(hotspot.dy, closeTo(target.dy, 1e-9));
|
||||
final canvas = _Canvas();
|
||||
final canvas = CursorTestDraw();
|
||||
painter.paint(canvas, _viewport);
|
||||
final position = canvas.position! + _hotspot * canvas.factor;
|
||||
expect(position.dx, closeTo(target.dx, 1e-9));
|
||||
|
||||
@@ -3,7 +3,6 @@ import 'dart:ui' as ui;
|
||||
import 'package:flutter/widgets.dart';
|
||||
import 'package:flutter_hbb/consts.dart';
|
||||
import 'package:flutter_hbb/desktop/pages/remote_page.dart';
|
||||
import 'package:flutter_hbb/models/desktop_render_texture.dart';
|
||||
import 'package:flutter_hbb/models/model.dart';
|
||||
import 'package:flutter_hbb/utils/image.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
@@ -12,6 +11,8 @@ import 'package:provider/provider.dart';
|
||||
import 'package:uuid/uuid.dart';
|
||||
import 'package:vector_math/vector_math.dart' show Vector2;
|
||||
|
||||
import 'cursor_test_utils.dart';
|
||||
|
||||
const _viewport = Size(200, 160);
|
||||
const _hotspot = Offset(4, 9);
|
||||
const _scrollDeltas = [80.0, -20.0, 1000.0, 1000.0, -1000.0, -1000.0, 80.0, 0.0];
|
||||
@@ -41,11 +42,6 @@ class _Image extends ImageModel {
|
||||
final bool useTextureRender;
|
||||
}
|
||||
|
||||
class _Texture extends Fake implements TextureModel {
|
||||
@override
|
||||
RxInt getTextureId(int display) => 0.obs;
|
||||
}
|
||||
|
||||
class _ScrollCanvas extends CanvasModel {
|
||||
_ScrollCanvas(FFI ffi, String style, this.scrollStyle)
|
||||
: viewStyle = ViewStyle(
|
||||
@@ -117,17 +113,7 @@ class _FFI extends Fake implements FFI {
|
||||
@override
|
||||
late final CursorModel cursorModel;
|
||||
@override
|
||||
final textureModel = _Texture();
|
||||
}
|
||||
|
||||
class _Draw extends Fake implements Canvas {
|
||||
double factor = 1;
|
||||
Offset? position;
|
||||
@override
|
||||
void scale(double sx, [double? sy]) => factor *= sx;
|
||||
@override
|
||||
void drawImage(ui.Image image, Offset offset, Paint paint) =>
|
||||
position = offset * factor;
|
||||
final textureModel = CursorTestTexture();
|
||||
}
|
||||
|
||||
void main() {
|
||||
@@ -250,7 +236,7 @@ void _expectAlignment(WidgetTester tester, FFI ffi, Finder videoWidget) {
|
||||
final cursorWidget = _paintOf(cursor.image!);
|
||||
final painter =
|
||||
tester.widget<CustomPaint>(cursorWidget).painter! as ImagePainter;
|
||||
final output = _Draw();
|
||||
final output = CursorTestDraw();
|
||||
painter.paint(output, ffi.canvasModel.size);
|
||||
final hotspot = tester.getTopLeft(cursorWidget) +
|
||||
output.position! +
|
||||
@@ -258,7 +244,7 @@ void _expectAlignment(WidgetTester tester, FFI ffi, Finder videoWidget) {
|
||||
var videoOrigin = tester.getTopLeft(videoWidget);
|
||||
final video = tester.widget(videoWidget);
|
||||
if (video is CustomPaint) {
|
||||
final drawnVideo = _Draw();
|
||||
final drawnVideo = CursorTestDraw();
|
||||
video.painter!.paint(drawnVideo, ffi.canvasModel.size);
|
||||
videoOrigin += drawnVideo.position!;
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ import 'dart:ui' as ui;
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter/widgets.dart';
|
||||
import 'package:flutter_hbb/common.dart' as common;
|
||||
import 'package:flutter_hbb/models/desktop_render_texture.dart';
|
||||
import 'package:flutter_hbb/models/input_model.dart';
|
||||
import 'package:flutter_hbb/models/model.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
@@ -109,3 +110,18 @@ img.Image decodeNativeCursorRaster(Map<dynamic, dynamic> args) {
|
||||
order: img.ChannelOrder.bgra)
|
||||
: img.decodePng(bytes)!;
|
||||
}
|
||||
|
||||
class CursorTestTexture extends Fake implements TextureModel {
|
||||
@override
|
||||
RxInt getTextureId(int display) => 0.obs;
|
||||
}
|
||||
|
||||
class CursorTestDraw extends Fake implements Canvas {
|
||||
double factor = 1;
|
||||
Offset? position;
|
||||
@override
|
||||
void scale(double sx, [double? sy]) => factor *= sx;
|
||||
@override
|
||||
void drawImage(ui.Image image, Offset offset, Paint paint) =>
|
||||
position = offset * factor;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user