code: func NewSurface(s uintptr, needsRef bool) *Surface {
  	surface := WrapSurface(s)
  	if needsRef {
  		surface.reference()
  	}
  	runtime.SetFinalizer(surface, (*Surface).destroy)
  	return surface
  }
docs: // NewSurface creates a gotk3 cairo Surface from a pointer to a
  // C cairo_surface_t.  This is primarily designed for use with other
  // gotk3 packages and should be avoided by applications.