/* * Geotoolkit - An Open Source Java GIS Toolkit * http://www.geotoolkit.org * * (C) 2010, Geomatys * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; * version 2.1 of the License. * * This library 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 * Lesser General Public License for more details. */ package org.geotoolkit.gui.swing.navigator; import java.awt.BasicStroke; import java.awt.Color; import java.awt.Font; import java.awt.GradientPaint; import java.awt.Graphics2D; import java.awt.Rectangle; import java.awt.RenderingHints; import org.geotoolkit.display.axis.Graduation; import org.geotoolkit.display.axis.NumberGraduation; import org.geotoolkit.display.axis.TickIterator; import static javax.swing.SwingConstants.*; /** * * @author Johann Sorel (Geomatys) * @module */ public class DoubleRenderer implements NavigatorRenderer{ private static final Color CBASE = Color.GRAY; private static final Color CTOP = CBASE.brighter(); private static final Color CLAST = CBASE.darker(); public DoubleRenderer(){ } @Override public int getGraduationHeight() { return 20; } @Override public void render(final JNavigator navigator, final Graphics2D g, final Rectangle area) { final int extent; final int orientation = navigator.getOrientation(); final boolean horizontal = orientation == NORTH || orientation == SOUTH; final boolean flipText = orientation == NORTH || orientation == WEST; //draw the background gradient ----------------------------------------- int sx = 0; int sy = 0; int ex = 0; int ey = 0; switch(orientation){ case NORTH : sx=0;sy=0;ex=0;ey=area.height;break; case SOUTH : sx=0;sy=area.height;ex=0;ey=0;break; case EAST : sx=area.width;sy=0;ex=0;ey=0;break; case WEST : sx=0;sy=0;ex=area.width;ey=0;break; } final GradientPaint mask = new GradientPaint( sx, sy, CBASE, ex, ey, CTOP); g.setPaint(mask); g.fill(area); if(horizontal){ extent = area.width; }else{ extent = area.height; } //draw the graduations ------------------------------------------------- final int spacing = 200; final NavigatorModel model = navigator.getModel(); final double start = model.getDimensionValueAt(-spacing); final double end = model.getDimensionValueAt(extent+spacing); final RenderingHints tickHint = new RenderingHints(null); tickHint.put(Graduation.VISUAL_AXIS_LENGTH, extent+spacing); tickHint.put(Graduation.VISUAL_TICK_SPACING, spacing/2); final NumberGraduation graduationX = new NumberGraduation(null); graduationX.setRange(start, end, null); final TickIterator tickIte = graduationX.getTickIterator(tickHint, null); while(!tickIte.isDone()){ tickIte.next(); final String label = tickIte.currentLabel(); final double d = tickIte.currentPosition(); int p = (int)model.getGraphicValueAt(d); if(tickIte.isMajorTick()){ g.setStroke(new BasicStroke(2.5f)); g.setColor(CTOP); g.setFont(new Font("Serif", Font.BOLD, 12)); }else{ g.setStroke(new BasicStroke(1f)); g.setColor(CTOP); g.setFont(new Font("Serif", Font.PLAIN, 10)); } switch(orientation){ case NORTH : break; case SOUTH : g.drawLine(p, 0, p,area.height); g.drawString(label, p, area.height-2); break; case EAST : break; case WEST : g.drawLine(0, p, area.width, p); g.drawString(label, 2, p-2); break; } } } private int toVal(){ return 0; } }