tool extends Control const MARGIN_NONE = -1 var _hover_margin = MARGIN_NONE func _notification(what: int) -> void: if what == NOTIFICATION_MOUSE_EXIT: _hover_margin = MARGIN_NONE elif what == NOTIFICATION_DRAG_BEGIN: _hover_margin = MARGIN_NONE func _gui_input(event: InputEvent) -> void: if event is InputEventMouseMotion: _find_hover_margin(event.position) update() func _draw() -> void: var rect if _hover_margin == MARGIN_NONE: return elif _hover_margin == MARGIN_LEFT: rect = Rect2(0, 0, rect_size.x * 0.5, rect_size.y) elif _hover_margin == MARGIN_TOP: rect = Rect2(0, 0, rect_size.x, rect_size.y * 0.5) elif _hover_margin == MARGIN_RIGHT: var half_width = rect_size.x * 0.5 rect = Rect2(half_width, 0, half_width, rect_size.y) elif _hover_margin == MARGIN_BOTTOM: var half_height = rect_size.y * 0.5 rect = Rect2(0, half_height, rect_size.x, half_height) var stylebox = get_stylebox("panel", "TooltipPanel") draw_style_box(stylebox, rect) func get_hover_margin() -> int: return _hover_margin func _find_hover_margin(point: Vector2): var half_size = rect_size * 0.5 var left = point.distance_squared_to(Vector2(0, half_size.y)) var lesser = left var lesser_margin = MARGIN_LEFT var top = point.distance_squared_to(Vector2(half_size.x, 0)) if lesser > top: lesser = top lesser_margin = MARGIN_TOP var right = point.distance_squared_to(Vector2(rect_size.x, half_size.y)) if lesser > right: lesser = right lesser_margin = MARGIN_RIGHT var bottom = point.distance_squared_to(Vector2(half_size.x, rect_size.y)) if lesser > bottom: #lesser = bottom # unused result lesser_margin = MARGIN_BOTTOM _hover_margin = lesser_margin