protected override void CheckTootipArea(Vector2 local) { if (local.x < zeroX || local.x > zeroX + coordinateWid || local.y < zeroY || local.y > zeroY + coordinateHig) { tooltip.DataIndex = 0; RefreshTooltip(); } else { if (xAxis.type == AxisType.value) { float splitWid = yAxis.GetDataWidth(coordinateHig); for (int i = 0; i < yAxis.GetDataNumber(); i++) { float pY = zeroY + i * splitWid; if (yAxis.boundaryGap) { if (local.y > pY && local.y <= pY + splitWid) { tooltip.DataIndex = i + 1; break; } } else { if (local.y > pY - splitWid / 2 && local.y <= pY + splitWid / 2) { tooltip.DataIndex = i + 1; break; } } } } else { float splitWid = xAxis.GetDataWidth(coordinateWid); for (int i = 0; i < xAxis.GetDataNumber(); i++) { float pX = zeroX + i * splitWid; if (xAxis.boundaryGap) { if (local.x > pX && local.x <= pX + splitWid) { tooltip.DataIndex = i + 1; break; } } else { if (local.x > pX - splitWid / 2 && local.x <= pX + splitWid / 2) { tooltip.DataIndex = i + 1; break; } } } } } if (tooltip.DataIndex > 0) { tooltip.UpdatePos(new Vector2(local.x + 18, local.y - 25)); RefreshTooltip(); if (tooltip.LastDataIndex != tooltip.DataIndex) { RefreshChart(); string lastDataCode = xAxis.GetKeyData(tooltip.LastDataIndex); if (!string.IsNullOrEmpty(lastDataCode)) { OnExit?.Invoke(lastDataCode); } string dataCode = xAxis.GetKeyData(tooltip.DataIndex); if (!string.IsNullOrEmpty(dataCode)) { OnEnter?.Invoke(dataCode); } } tooltip.LastDataIndex = tooltip.DataIndex; } }