protected void onRender(GraphicsHelper gh) {
		gh.g().setAntiAlias(true);
		
		Circle c = new Circle(xOnView(pos.x)+r,yOnView(pos.y)+r,r,32);
		
		gh.g().fill(c,new ShapeFill(){
			public Color colorAt(Shape shape, float x, float y) {
				return Colors.merge(cBgTop,cBgBottom,(y-shape.getMinY())/(shape.getMaxY()-shape.getMinY())).multiply(color);
			}
			public Vector2f getOffsetAt(Shape shape, float x, float y) {
				return new Vector2f(0,0);
			}
		});
		gh.g().setColor(cBorder.multiply(color));
		gh.g().draw(c);
		
		float mult = pressed ? cMultPress : (over ? cMultOver : 0f);
		
		if (mult != 0f) {
			gh.setBlendMode(mult > 0 ? BM_ADD : BM_SUBTRACT);
			mult = Math.abs(mult);
			gh.g().setColor(Colors.merge(Color.black,Color.white,mult).multiply(color));
			gh.g().fill(c);
			gh.setPreviousBlendMode();
		}
		
		if (radioSet.getValue() == this) {
			c = new Circle(xOnView(pos.x)+r,yOnView(pos.y)+r,r/2f,32);
			gh.g().fill(c);
		}
		
		gh.g().setAntiAlias(false);
		
		gh.g().setFont(font);
		gh.g().setColor(cText.multiply(color));
		Fonts.setFontAlign(Fonts.MiddleLeft);
		Fonts.drawString(gh,caption,xOnView(pos.x)+2*r+2,yOnView(pos.y)+r);
		Fonts.resetFontAlign();
	}