Bounds cbo = rre.getBounds( );   if ( ca.getShadowColor( ) != null ) { rre.setBounds( cbo.translateInstance( 3, 3 ) ); rre.setBackground( ca.getShadowColor( ) ); ipr.fillRectangle( rre ); }   rre.setBounds( cbo );
	protected void renderBackground( IPrimitiveRenderer ipr, Plot p )			throws ChartException	{		final double dScale = getDevice( ).getDisplayServer( )				.getDpiResolution( ) / 72d;		final RectangleRenderEvent rre = (RectangleRenderEvent) ( (EventObjectCache) ipr ).getEventObject( StructureSource.createPlot( p ),				RectangleRenderEvent.class );		rre.updateFrom( p, dScale ); // POINTS => PIXELS		ipr.fillRectangle( rre );		ipr.drawRectangle( rre );		Object oComputations = getComputations( );		if ( oComputations instanceof PlotWithoutAxes )		{			final ClientArea ca = p.getClientArea( );			rre.setBackground( ca.getBackground( ) );			ipr.fillRectangle( rre );			ipr.drawRectangle( rre );			if ( !ca.getOutline( ).isSetVisible( ) )			{				throw new ChartException( ChartEnginePlugin.ID,						ChartException.RENDERING,						"exception.client.area.outline.visibility", //$NON-NLS-1$ 						ResourceBundle.getBundle( Messages.ENGINE,								rtc.getLocale( ) ) );			}			if ( ca.getOutline( ).isVisible( ) )			{				final Bounds bo = p.getBounds( ).scaledInstance( dScale ); // POINTS				// =>				// PIXELS				final PlotWithoutAxes pwoa = (PlotWithoutAxes) oComputations;				final Size sz = SizeImpl.create( bo.getWidth( )						/ pwoa.getColumnCount( ), bo.getHeight( )						/ pwoa.getRowCount( ) );				final LineRenderEvent lre = (LineRenderEvent) ( (EventObjectCache) ipr ).getEventObject( StructureSource.createPlot( p ),						LineRenderEvent.class );				lre.setLineAttributes( ca.getOutline( ) );				int colCount = pwoa.getColumnCount( );				int rowCount = pwoa.getRowCount( );				ChartWithoutAxes cwoa = pwoa.getModel( );				if ( cwoa instanceof DialChart						&& ( (DialChart) cwoa ).isDialSuperimposition( ) )				{					colCount = 1;					rowCount = 1;				}				for ( int i = 1; i < colCount; i++ )				{					lre.setStart( LocationImpl.create( bo.getLeft( )							+ i							* sz.getWidth( ), bo.getTop( ) ) );					lre.setEnd( LocationImpl.create( bo.getLeft( )							+ i							* sz.getWidth( ), bo.getTop( ) + bo.getHeight( ) ) );					ipr.drawLine( lre );				}				for ( int j = 1; j < rowCount; j++ )				{					lre.setStart( LocationImpl.create( bo.getLeft( ),							bo.getTop( ) + j * sz.getHeight( ) ) );					lre.setEnd( LocationImpl.create( bo.getLeft( )							+ bo.getWidth( ), bo.getTop( ) + j * sz.getHeight( ) ) );					ipr.drawLine( lre );				}			}		}	}