/** @param sep the pane where to remove the LaTeXViewer */ public static void removeLaTeXViewer(JTextComponent tc) { if (viewer.icon != null) { viewer.icon = null; viewer.setVisible(false); tc.remove(viewer); tc.repaint(); } }
/** * @param sep the pane where to display the LaTeX * @param exp the expression * @param b the beginning of the expression * @param e the end of the expression */ public static int displayExpression( JTextComponent tc, int totalHeight, String exp, int b, int e) { String latex = exp; if (exp.startsWith("$") || exp.startsWith("\"$") || exp.startsWith("'$")) { int n = 1; // We have $...$ or "$...$" if (exp.charAt(0) != '$') { n = 2; } latex = exp.substring(n, exp.length() - n); } viewer.icon = ScilabSpecialTextUtilities.compilePartialLaTeXExpression(latex, defaultSize); if (viewer.icon == null) { return 0; } width = viewer.icon.getIconWidth(); height = viewer.icon.getIconHeight(); viewer.setSize(width + 2 * INSET, height + 2 * INSET); tc.add(viewer); Rectangle begin; Rectangle end; try { begin = tc.modelToView(b); end = tc.modelToView(e); } catch (BadLocationException ex) { begin = NULLRECT; end = NULLRECT; } int abs; int ord; if (begin.y == end.y) { // We're on the same line abs = Math.max(1, (end.x + begin.x - width) / 2); ord = begin.y + begin.height + 1; if (height + ord > totalHeight) { ord = begin.y - 1 - height - 2 * INSET; } } else if (begin.y + begin.height == end.y) { // The line is drawn on two lines ord = end.y + end.height + 1; if (height + ord > totalHeight) { ord = begin.y - 1 - height - 2 * INSET; abs = begin.x; } else { abs = end.x; } } else { // Guess abs = Math.max(1, (tc.getWidth() - width) / 2); ord = end.y + end.height + 1; if (height + ord > totalHeight) { ord = begin.y - 1 - height - 2 * INSET; } } viewer.setLocation(abs, ord); viewer.setVisible(true); viewer.repaint(); return height + 2 * INSET; }