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

edu.mit.csail.sdg.alloy4.OurHighlighter Maven / Gradle / Ivy

The newest version!
/* Alloy Analyzer 4 -- Copyright (c) 2006-2009, Felix Chang
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files
 * (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify,
 * merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
 * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
 * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 */

package edu.mit.csail.sdg.alloy4;

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.Highlighter;
import javax.swing.text.JTextComponent;

/**
 * Graphica highlighter.
 * 

* Thread Safety: Can be called only by the AWT event thread. */ public final class OurHighlighter implements Highlighter.HighlightPainter { /** The color to use when drawing highlights. */ public final Color color; /** Construct a highlighter with the given color. */ public OurHighlighter(Color color) { this.color = color; } /** This method is called by Swing to draw highlights. */ @Override public void paint(Graphics gr, int start, int end, Shape shape, JTextComponent text) { Color old = gr.getColor(); gr.setColor(color); try { Rectangle box = shape.getBounds(), a = text.getUI().modelToView(text, start), b = text.getUI().modelToView(text, end); if (a.y == b.y) { // same line (Note: furthermore, if start==end, then we draw all // the way to the right edge) Rectangle r = a.union(b); gr.fillRect(r.x, r.y, (r.width <= 1 ? (box.x + box.width - r.x) : r.width), r.height); } else { // Multiple lines; (Note: on first line we'll draw from "start" // and extend to rightmost) gr.fillRect(a.x, a.y, box.x + box.width - a.x, a.height); if (a.y + a.height < b.y) gr.fillRect(box.x, a.y + a.height, box.width, b.y - (a.y + a.height)); gr.fillRect(box.x, b.y, b.x - box.x, b.height); } } catch (BadLocationException e) {} // Failure to highlight is not fatal gr.setColor(old); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy