code: func (win *Window) ContextualOpen(flags WindowFlags, size image.Point, trigger_bounds rect.Rect, updateFn UpdateFn) *Window {
  	if popup := win.ctx.Windows[len(win.ctx.Windows)-1]; popup.header == trigger_bounds {
  		popup.specialPanelBegin()
  		return popup
  	}
  	if size == (image.Point{}) {
  		size.X = nk_null_rect.W
  		size.Y = nk_null_rect.H
  		flags = flags | windowHDynamic
  	}
  	size.X = win.ctx.scale(size.X)
  	size.Y = win.ctx.scale(size.Y)
  	if trigger_bounds.W > 0 && trigger_bounds.H > 0 {
  		if !win.Input().Mouse.Clicked(mouse.ButtonRight, trigger_bounds) {
  			return nil
  		}
  	}
  
  	var body rect.Rect
  	body.X = win.ctx.Input.Mouse.Pos.X
  	body.Y = win.ctx.Input.Mouse.Pos.Y
  	body.W = size.X
  	body.H = size.Y
  
  	if flags&WindowContextualReplace != 0 {
  		if popup := win.ctx.Windows[len(win.ctx.Windows)-1]; popup.flags&windowContextual != 0 {
  			body.X = popup.Bounds.X
  			body.Y = popup.Bounds.Y
  		}
  	}
  
  	atomic.AddInt32(&win.ctx.changed, 1)
  	return win.ctx.nonblockOpen(flags|windowContextual|WindowNoScrollbar, body, trigger_bounds, updateFn)
  }
docs: ///////////////////////////////////////////////////////////////////////////////////
  // CONTEXTUAL
  ///////////////////////////////////////////////////////////////////////////////////
  // Opens a contextual menu with maximum size equal to 'size'.
  // Specify size == image.Point{} if you want a menu big enough to fit its larges MenuItem