/************************************************************************** OmegaT - Computer Assisted Translation (CAT) tool with fuzzy matching, translation memory, keyword search, glossaries, and translation leveraging into updated projects. Copyright (C) 2012 Martin Fleurke Home page: http://www.omegat.org/ Support center: http://groups.yahoo.com/group/OmegaT/ This file is part of OmegaT. OmegaT is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. OmegaT 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. **************************************************************************/ package org.omegat.gui.editor.mark; import java.awt.Color; import java.awt.Graphics; import java.awt.Polygon; import java.awt.Rectangle; import javax.swing.text.JTextComponent; /** * Class to paint a direction marker for bidirectional control characters * @author Martin Fleurke */ public class BidiPainter extends SymbolPainter { protected boolean rtl; protected boolean ltr; /** * * @param c * color to use when painting * @param s * Bidirectonal formatting character/code that is marked. */ public BidiPainter(Color c, String s) { super(c, s); if (symbol.equals("\u200F") || symbol.equals("\u202E") || symbol.equals("\u202B")) { rtl = true; ltr = false; } else if (symbol.equals("\u200E") || symbol.equals("\u202A") || symbol.equals("\u202D")) { ltr = true; rtl = false; } } protected void paint(Graphics g, Rectangle rect, JTextComponent c) { g.setColor(color); Polygon p = new Polygon(); p.addPoint(rect.x, rect.y + rect.height); p.addPoint(rect.x, rect.y); if (rtl) { p.addPoint(rect.x - 4, rect.y); p.addPoint(rect.x, rect.y + 4); } else if (ltr) { p.addPoint(rect.x + 4, rect.y); p.addPoint(rect.x, rect.y + 4); } else { p.addPoint(rect.x - 2, rect.y); p.addPoint(rect.x, rect.y - 4); p.addPoint(rect.x + 2, rect.y); p.addPoint(rect.x, rect.y); } g.fillPolygon(p); } }