code: @Override
  	public void render(GuiRenderer renderer)
  	{
  		if (!isVisible())
  			return;
  
  		//		if (getGui().isOverlay())
  		//		{
  		//			GlStateManager.blendFunc(GL11.GL_CONSTANT_ALPHA, GL11.GL_ONE_MINUS_CONSTANT_ALPHA);
  		//			GL14.glBlendColor(1, 1, 1, (float) getAlpha() / 255);
  		//		}
  
  		//store last drawn component so that it can be set back after drawing.
  		//makes sure components overriding rendering and calling super still have correct
  		//relative position in case super renders other components.
  		UIComponent oldComponent = renderer.currentComponent;
  
  		//draw background
  		IGuiRenderer gr = backgroundRenderer.get();
  		if (gr != null)
  		{
  			renderer.currentComponent = this;
  			gr.render(renderer);
  			renderer.next();
  		}
  
  		//draw foreground
  		gr = foregroundRenderer.get();
  		if (gr != null)
  		{
  			ClipArea area = IClipable.intersected(this);
  			if (!area.fullClip())
  			{
  				if (!(this instanceof IControlComponent))
  					renderer.startClipping(area);
  				renderer.currentComponent = this;
  				gr.render(renderer);
  				if (!(this instanceof IControlComponent))
  					renderer.endClipping(area);
  			}
  		}
  
  		for (IControlComponent c : controlComponents)
  			c.render(renderer);
  
  		renderer.currentComponent = oldComponent;
  	}
docs: Draws this {@link UIComponent}. Rendering is surrounded by glPushAttrib(GL_ALL_ATTRIB_BITS) so no state should bleed between
  components. Also, a draw() is triggered between background and foreground.
  
  @param renderer the renderer