/* * File : ScaledGraphic.java * Created : 15 d�c. 2003} * By : Olivier * * Azureus - a Java Bittorrent client * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details ( see the LICENSE file ). * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ package org.gudy.azureus2.ui.swt.components.graphics; import org.eclipse.swt.graphics.GC; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.Rectangle; import org.gudy.azureus2.core3.util.Debug; import org.gudy.azureus2.ui.swt.mainwindow.Colors; /** * @author Olivier * */ public class ScaledGraphic extends BackGroundGraphic { protected Scale scale; protected ValueFormater formater; protected Image bufferScale; protected int lastMax; private int update_divider_width = 0; public ScaledGraphic(Scale scale,ValueFormater formater) { this.scale = scale; this.formater = formater; } public void setUpdateDividerWidth(int width) { this.update_divider_width = width; } protected void drawScale(boolean sizeChanged) { if(drawCanvas == null || drawCanvas.isDisposed() || !drawCanvas.isVisible()) return; drawBackGround(sizeChanged); if (bufferBackground == null || bufferBackground.isDisposed()) { return; } boolean scaleChanged = lastMax != scale.getMax(); if(sizeChanged || scaleChanged || bufferScale == null) { Rectangle bounds = drawCanvas.getClientArea(); if(bounds.height < 30 || bounds.width < 100) return; if(bufferScale != null && ! bufferScale.isDisposed()) bufferScale.dispose(); bufferScale = new Image(drawCanvas.getDisplay(),bounds); GC gcBuffer = new GC(bufferScale); try { gcBuffer.drawImage(bufferBackground,0,0); gcBuffer.setForeground(Colors.black); //gcImage.setBackground(null); scale.setNbPixels(bounds.height - 16); int[] levels = scale.getScaleValues(); for(int i = 0 ; i < levels.length ; i++) { int height = bounds.height - scale.getScaledValue(levels[i]) - 2; gcBuffer.drawLine(1,height,bounds.width - 70 ,height); gcBuffer.drawText(formater.format(levels[i]),bounds.width - 65,height - 12,true); } if (this.update_divider_width > 0) { for (int i=bounds.width - 70; i > 0; i-=this.update_divider_width) { gcBuffer.setForeground(Colors.grey); gcBuffer.drawLine(i, 0, i, bounds.height); } } } catch (Exception e) { Debug.out(e); } finally { gcBuffer.dispose(); } } } public void dispose() { super.dispose(); if(bufferScale != null && ! bufferScale.isDisposed()) bufferScale.dispose(); } }