All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.fife.ui.rsyntaxtextarea.SquiggleUnderlineHighlightPainter Maven / Gradle / Ivy

The newest version!
/*
 * 09/13/2005
 *
 * SquiggleUnderlineHighlightPainter.java - Highlighter that draws a squiggle
 * underline under "highlighted" text, similar to error markers in Microsoft
 * Visual Studio or Eclipse.
 * 
 * This library is distributed under a modified BSD license.  See the included
 * RSyntaxTextArea.License.txt file for details.
 */
package org.fife.ui.rsyntaxtextarea;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Rectangle;
import java.awt.Shape;
import javax.swing.text.BadLocationException;
import javax.swing.text.JTextComponent;
import javax.swing.text.Position;
import javax.swing.text.View;

import org.fife.ui.rtextarea.ChangeableHighlightPainter;


/**
 * Highlight painter that paints a squiggly underline underneath text, similar
 * to what popular IDE's such as Visual Studio and Eclipse do to indicate
 * errors, warnings, etc.

* * This class must be used as a LayerPainter. * * @author Robert Futrell * @version 1.0 */ public class SquiggleUnderlineHighlightPainter extends ChangeableHighlightPainter { private static final int AMT = 2; /** * Constructor. * * @param color The color of the squiggle. This cannot be * null. */ public SquiggleUnderlineHighlightPainter(Color color) { super(color); setPaint(color); } /** * Paints a portion of a highlight. * * @param g the graphics context * @param offs0 the starting model offset >= 0 * @param offs1 the ending model offset >= offs1 * @param bounds the bounding box of the view, which is not * necessarily the region to paint. * @param c the editor * @param view View painting for * @return region drawing occurred in */ @Override public Shape paintLayer(Graphics g, int offs0, int offs1, Shape bounds, JTextComponent c, View view) { g.setColor((Color)getPaint()); if (offs0 == view.getStartOffset() && offs1 == view.getEndOffset()) { // Contained in view, can just use bounds. Rectangle alloc; if (bounds instanceof Rectangle) alloc = (Rectangle)bounds; else alloc = bounds.getBounds(); paintSquiggle(g, alloc); return alloc; } // Otherwise, should only render part of View. try { // --- determine locations --- Shape shape = view.modelToView(offs0, Position.Bias.Forward, offs1,Position.Bias.Backward, bounds); Rectangle r = (shape instanceof Rectangle) ? (Rectangle)shape : shape.getBounds(); paintSquiggle(g, r); return r; } catch (BadLocationException e) { e.printStackTrace(); // can't render } // Only if exception return null; } /** * Paints a squiggle underneath text in the specified rectangle. * * @param g The graphics context with which to paint. * @param r The rectangle containing the text. */ protected void paintSquiggle(Graphics g, Rectangle r) { int x = r.x; int y = r.y + r.height - AMT; int delta = -AMT; while (x





© 2015 - 2024 Weber Informatics LLC | Privacy Policy