When mouse down event received: While pending button events: If appropriate mouse button up event: If distance between events less than numb_radius: Return no_selection. Else: Return selection specified by angle between events. Else: Return no_selection. If menu doesn't fit on screen: Calculate offset to move menu back on screen. Center menu on location of mouse down event plus offset. Warp mouse to current mouse location plus offset. Else: Center menu on location of mouse down event. Draw menu. Repeat: If distance between mouse down event and current mouse location not less than numb_radius: Unhighlight currently highlighted selection, if any. Highlight selection specified by angle between the two. Until mouse button event. Erase menu. If appropriate mouse button up event: If distance between events less than numb_radius: Return no_selection. Else: Return selection specified by angle between events. Else: Return no_selection.