fix(flutter): align painted cursor with the software image origin

This commit is contained in:
fufesou
2026-09-11 17:54:56 +08:00
parent fdd67a875b
commit be5fb304d4
2 changed files with 87 additions and 17 deletions

View File

@@ -1425,8 +1425,9 @@ class CursorPaint extends StatelessWidget {
}
}
double cx = c.x;
double cy = c.y;
final imageOffset = _softwareImageOffset(c);
double cx = imageOffset?.dx ?? c.x;
double cy = imageOffset?.dy ?? c.y;
if (c.viewStyle.style == kRemoteViewStyleOriginal &&
c.scrollStyle == ScrollStyle.scrollbar) {
final rect = c.parent.target!.ffiModel.rect;
@@ -1467,4 +1468,22 @@ class CursorPaint extends StatelessWidget {
),
);
}
Offset? _softwareImageOffset(CanvasModel canvas) {
if (canvas.imageOverflow.isTrue &&
canvas.scrollStyle != ScrollStyle.scrollauto) {
return null;
}
final ffi = canvas.parent.target!;
final peer = ffi.ffiModel;
if (ffi.imageModel.useTextureRender || peer.pi.forceTextureRender) {
return null;
}
var scale = canvas.scale;
final displays = peer.pi.getCurDisplays();
if (peer.isPeerLinux && displays.isNotEmpty) scale /= displays[0].scale;
// Match the origin used by _buildScrollAutoNonTextureRender's ImagePainter.
return Offset(
(canvas.x / scale).toInt() * scale, (canvas.y / scale).toInt() * scale);
}
}