@@ -144,6 +144,7 @@ class RenderNeedlePointer extends RenderBox {
144
144
@override
145
145
bool hitTestSelf (Offset position) {
146
146
Offset calulatedPosition = localToGlobal (position);
147
+
147
148
if (needlePointerRect.contains (calulatedPosition)) {
148
149
return true ;
149
150
} else if (needlePointerRect.contains (position)) {
@@ -156,7 +157,6 @@ class RenderNeedlePointer extends RenderBox {
156
157
157
158
@override
158
159
void performLayout () {
159
- // size = Size(_needleWidth + _tailRadius, _needleHeight);
160
160
size = Size (constraints.maxWidth, constraints.maxHeight);
161
161
}
162
162
@@ -227,8 +227,25 @@ class RenderNeedlePointer extends RenderBox {
227
227
228
228
needlePath.close ();
229
229
230
- needlePointerRect = needlePath;
231
- // canvas.drawPath(needlePath, Paint()..color = Colors.green);
230
+ final hitTestWidth = _needleWidth;
231
+
232
+ final dx = needleEndX - needleStartX;
233
+ final dy = needleEndY - needleStartY;
234
+
235
+ final norm = sqrt (dx * dx + dy * dy);
236
+ final perpX = - dy / norm * hitTestWidth / 2 ;
237
+ final perpY = dx / norm * hitTestWidth / 2 ;
238
+
239
+ final hitTestPath = Path ()
240
+ ..moveTo (needleStartX + perpX, needleStartY + perpY)
241
+ ..lineTo (needleEndX + perpX, needleEndY + perpY)
242
+ ..lineTo (needleEndX - perpX, needleEndY - perpY)
243
+ ..lineTo (needleStartX - perpX, needleStartY - perpY)
244
+ ..close ();
245
+
246
+ needlePointerRect =
247
+ _needleStyle == NeedleStyle .gaugeNeedle ? needlePath : hitTestPath;
248
+
232
249
// Needle Pointer paint
233
250
if (getNeedleStyle == NeedleStyle .gaugeNeedle) {
234
251
canvas.drawPath (needlePath, needlePaint);
@@ -247,26 +264,3 @@ class RenderNeedlePointer extends RenderBox {
247
264
return newValue;
248
265
}
249
266
}
250
-
251
- // @override
252
- // void applyPaintTransform(RenderBox child, Matrix4 transform) {
253
- // if (child is RenderNeedlePointer) {
254
- // final centerX = size.width / 2;
255
- // final centerY = size.height / 2;
256
-
257
- // transform.translate(centerX, centerY);
258
- // double value = calculateValueAngle(
259
- // child.getValue, getRadialGauge.track.start, getRadialGauge.track.end);
260
- // double startAngle = (getRadialGauge.track.startAngle - 180) * (pi / 180);
261
- // double endAngle = (getRadialGauge.track.endAngle - 180) * (pi / 180);
262
- // double angle = startAngle + (value / 100) * (endAngle - startAngle);
263
- // double toRotateAngle = angle - (pi / 2);
264
- // transform.rotateZ(toRotateAngle); // Specify the rotation in radians
265
- // transform.translate(
266
- // -centerX - child.getNeedleWidth / 2 - child.getTailRadius / 2,
267
- // -centerY - child.getNeedleHeight + child.getTailRadius / 2);
268
-
269
- // super.applyPaintTransform(child, transform);
270
- // markNeedsLayout();
271
- // }
272
- // }
0 commit comments