/** * @(#)DrawingComponent2D.java * * Copyright 2002 EGANTT LLP. All rights reserved. * PROPRIETARY/QPL. Use is subject to license terms. */ package com.egantt.drawing.component; import java.awt.Graphics; import java.awt.event.MouseEvent; import javax.swing.JComponent; import com.egantt.awt.graphics.GraphicsState; import com.egantt.drawing.DrawingComponent; import com.egantt.swing.cell.CellState; import com.egantt.swing.component.tooltip.ToolTipState; import com.egantt.swing.component.tooltip.state.DrawingToolTipState; import com.egantt.util.Trace; /** * Intent: A 2D implementation of a Drawing */ public class DrawingComponent2D extends JComponent implements DrawingComponent { private static final long serialVersionUID = -4762638988341558612L; protected transient ToolTipState state = new DrawingToolTipState(); protected DrawingComponentPainter painter; protected GraphicsState graphics; protected CellState cellState; // _________________________________________________________________________ public void setCellState(CellState cellState) { this.cellState = cellState; } public void setComponentPainter(DrawingComponentPainter painter) { this.painter = painter; } public void setGraphicsState(GraphicsState graphics) { this.graphics = graphics; } public void setToolTipState(ToolTipState state) { this.state = state; } // __________________________________________________________________________ public String getToolTipText(MouseEvent event) { return state == null ? super.getToolTipText(event) : state.getToolTipText(event, cellState); } // _________________________________________________________________________ /** * Delegates, the painting of this component to a series of graphics objects' * known as painters. These painters, do not write to sun graphics instead * they write to a GraphicsState object which writes everything out in one go. */ public void paintComponent(Graphics g) { super.paintComponent(g); if (isPaintingTile()) return; graphics.initialise(g); try { painter.paint(this, graphics, cellState); } catch (Throwable throwable) { throwable.printStackTrace(Trace.out); } graphics.terminate(g); } }