001 /*--------------------------------------------------------------------------+
002 $Id: FlatTreeMapRenderer.java 26931 2010-03-17 14:53:13Z besenreu $
003 | |
004 | Copyright 2005-2010 Technische Universitaet Muenchen |
005 | |
006 | Licensed under the Apache License, Version 2.0 (the "License"); |
007 | you may not use this file except in compliance with the License. |
008 | You may obtain a copy of the License at |
009 | |
010 | http://www.apache.org/licenses/LICENSE-2.0 |
011 | |
012 | Unless required by applicable law or agreed to in writing, software |
013 | distributed under the License is distributed on an "AS IS" BASIS, |
014 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
015 | See the License for the specific language governing permissions and |
016 | limitations under the License. |
017 +--------------------------------------------------------------------------*/
018 package edu.tum.cs.commons.treemap;
019
020 import java.awt.Color;
021 import java.awt.Graphics2D;
022 import java.awt.Rectangle;
023 import java.awt.geom.Rectangle2D;
024
025
026 /**
027 * A very simple tree map renderer just drawing "flat" rectangles.
028 *
029 * @author Benjamin Hummel
030 * @author $Author: besenreu $
031 * @version $Rev: 26931 $
032 * @levd.rating GREEN Hash: B52F73980DF98FACCD4B858A5872C409
033 */
034 public class FlatTreeMapRenderer implements ITreeMapRenderer {
035
036 /** {@inheritDoc} */
037 public <T> void renderTreeMap(ITreeMapNode<T> node, Graphics2D graphics) {
038 if (node.getChildren().isEmpty()) {
039 Rectangle2D rect = node.getLayoutRectangle();
040 graphics.setColor(node.getColor());
041 graphics.fill(rect);
042
043 if (node.getDrawingPattern() != null) {
044 drawPattern(graphics, rect, node);
045 }
046
047 graphics.setColor(Color.BLACK);
048 graphics.draw(rect);
049 } else {
050 for (ITreeMapNode<T> child : node.getChildren()) {
051 renderTreeMap(child, graphics);
052 }
053 }
054 }
055
056 /** Draws the pattern. */
057 private <T> void drawPattern(Graphics2D graphics, Rectangle2D rect,
058 ITreeMapNode<T> node) {
059 IDrawingPattern drawingPattern = node.getDrawingPattern();
060 graphics.setColor(node.getPatternColor());
061 for (int x = (int) rect.getMinX(); x <= rect.getMaxX(); ++x) {
062 for (int y = (int) rect.getMinY(); y <= rect.getMaxY(); ++y) {
063 if (drawingPattern.isForeground(x, y)) {
064 graphics.fill(new Rectangle(x, y, 1, 1));
065 }
066 }
067 }
068 }
069
070 }