|
@@ -17,15 +17,21 @@ abstract class IMouseState {
|
|
|
double get cursorSize;
|
|
|
set cursorSize(double value);
|
|
|
|
|
|
+ /// 卡尺缩放比
|
|
|
+ double get cursorScaleRatio;
|
|
|
+ set cursorScaleRatio(double value);
|
|
|
+
|
|
|
late FEventHandler<Offset?> mousePositionChanged;
|
|
|
late FEventHandler<MeasureCursorType> cursorTypeChanged;
|
|
|
late FEventHandler<double> cursorSizeChanged;
|
|
|
+ late FEventHandler<double> cursorScaleRatioChanged;
|
|
|
late FEventHandler<CrossIndicatorStyle> crossIndicatorStyleChanged;
|
|
|
}
|
|
|
|
|
|
class MouseState implements IMouseState {
|
|
|
Offset? _mousePosition;
|
|
|
double _cursorSize = 16;
|
|
|
+ double _cursorScaleRatio = 1;
|
|
|
MeasureCursorType _cursorType = MeasureCursorType.cursor01;
|
|
|
|
|
|
@override
|
|
@@ -33,6 +39,8 @@ class MouseState implements IMouseState {
|
|
|
|
|
|
@override
|
|
|
var cursorSizeChanged = FEventHandler<double>();
|
|
|
+ @override
|
|
|
+ var cursorScaleRatioChanged = FEventHandler<double>();
|
|
|
|
|
|
@override
|
|
|
var cursorTypeChanged = FEventHandler<MeasureCursorType>();
|
|
@@ -60,6 +68,16 @@ class MouseState implements IMouseState {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ @override
|
|
|
+ double get cursorScaleRatio => _cursorScaleRatio;
|
|
|
+ @override
|
|
|
+ set cursorScaleRatio(double value) {
|
|
|
+ if (value != _cursorScaleRatio) {
|
|
|
+ _cursorScaleRatio = value;
|
|
|
+ cursorScaleRatioChanged.emit(this, value);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
@override
|
|
|
MeasureCursorType get cursorType => _cursorType;
|
|
|
@override
|
|
@@ -75,7 +93,7 @@ class MouseState implements IMouseState {
|
|
|
if (mousePosition == null) return null;
|
|
|
|
|
|
double dx = mousePosition!.dx, dy = mousePosition!.dy;
|
|
|
- final offset = cursorSize / 2;
|
|
|
+ final offset = cursorScaleRatio * cursorSize / 2;
|
|
|
dx -= offset;
|
|
|
dy -= offset;
|
|
|
return Offset(dx, dy);
|
|
@@ -95,6 +113,7 @@ class _PositionedCursorState extends State<PositionedCursor> {
|
|
|
@override
|
|
|
void initState() {
|
|
|
mouseState.cursorSizeChanged.addListener(onCursorSizeChanged);
|
|
|
+ mouseState.cursorScaleRatioChanged.addListener(onCursorScaleRatioChanged);
|
|
|
mouseState.cursorTypeChanged.addListener(cursorTypeChanged);
|
|
|
mouseState.mousePositionChanged.addListener(mousePositionChanged);
|
|
|
super.initState();
|
|
@@ -103,6 +122,8 @@ class _PositionedCursorState extends State<PositionedCursor> {
|
|
|
@override
|
|
|
void dispose() {
|
|
|
mouseState.cursorSizeChanged.removeListener(onCursorSizeChanged);
|
|
|
+ mouseState.cursorScaleRatioChanged
|
|
|
+ .removeListener(onCursorScaleRatioChanged);
|
|
|
mouseState.cursorTypeChanged.removeListener(cursorTypeChanged);
|
|
|
mouseState.mousePositionChanged.removeListener(mousePositionChanged);
|
|
|
super.dispose();
|
|
@@ -118,7 +139,7 @@ class _PositionedCursorState extends State<PositionedCursor> {
|
|
|
top: position.dy,
|
|
|
child: MeasureCursor(
|
|
|
type: mouseState.cursorType,
|
|
|
- size: mouseState.cursorSize,
|
|
|
+ size: mouseState.cursorSize * mouseState.cursorScaleRatio,
|
|
|
color: MeasureColors.Primary,
|
|
|
),
|
|
|
);
|
|
@@ -128,6 +149,10 @@ class _PositionedCursorState extends State<PositionedCursor> {
|
|
|
onUpdate();
|
|
|
}
|
|
|
|
|
|
+ void onCursorScaleRatioChanged(Object sender, dynamic e) {
|
|
|
+ onUpdate();
|
|
|
+ }
|
|
|
+
|
|
|
void cursorTypeChanged(Object sender, dynamic e) {
|
|
|
onUpdate();
|
|
|
}
|