/** * Draws the specified string. * * @param g graphics reference * @param s text * @param x x coordinate * @param y y coordinate * @param w width * @param fs font size */ public static void chopString( final Graphics g, final byte[] s, final int x, final int y, final int w, final int fs) { if (w < 12) return; final int[] cw = fontWidths(g.getFont()); int j = s.length; try { int l = 0; int fw = 0; for (int k = 0; k < j; k += l) { final int ww = width(g, cw, cp(s, k)); if (fw + ww >= w - 4) { j = Math.max(1, k - l); if (k > 1) fw -= width(g, cw, cp(s, k - 1)); g.drawString("..", x + fw, y + fs); break; } fw += ww; l = cl(s, k); } } catch (final Exception ex) { Util.debug(ex); } g.drawString(string(s, 0, j), x, y + fs); }
/** * Draws a visualization tooltip. * * @param g graphics reference * @param tt tooltip label * @param x horizontal position * @param y vertical position * @param w width * @param c color color depth */ public static void drawTooltip( final Graphics g, final String tt, final int x, final int y, final int w, final int c) { final int tw = width(g, tt); final int th = g.getFontMetrics().getHeight(); final int xx = Math.min(w - tw - 8, x); g.setColor(color(c)); g.fillRect(xx - 1, y - th, tw + 4, th); g.setColor(BACK); g.drawString(tt, xx, y - 4); }
/** * Writes the current string to the graphics reference. * * @param g graphics reference */ private void write(final Graphics g) { if (high) { high = false; } else { color = isEnabled() ? syntax.getColor(text) : Color.gray; } final int ch = text.curr(); if (y > 0 && y < h) { if (ch == TokenBuilder.MARK) { color = GUIConstants.GREEN; high = true; } // mark error if (text.erroneous()) { g.setColor(GUIConstants.LRED); g.fillRect(x, y - fontH + 4, wordW, fontH); } // mark text int xx = x; if (text.markStart()) { final int p = text.pos(); while (text.more()) { final int cw = charW(g, text.curr()); if (text.inMark()) { g.setColor(GUIConstants.color(3)); g.fillRect(xx, y - fontH + 4, cw, fontH); } xx += cw; text.next(); } text.pos(p); } if (found()) { int cw = 0; for (int c = 0; c < keyword.length(); ++c) { cw += charW(g, keyword.charAt(c)); } g.setColor(GUIConstants.color(text.cursor() == text.pos() ? 5 : 2)); g.fillRect(x, y - fontH + 4, cw, fontH); } // don't write whitespaces if (ch > ' ') { g.setColor(color); String n = text.nextWord(); int ww = w - x; if (x + wordW > ww) { // shorten string if it cannot be completely shown (saves memory) int c = 0; for (final int nl = n.length(); c < nl && ww > 0; c++) { ww -= charW(g, n.charAt(c)); } n = n.substring(0, c); } g.drawString(n, x, y); } else if (ch <= TokenBuilder.MARK) { g.setFont(font); } // show cursor if (cursor && text.edited()) { xx = x; final int p = text.pos(); while (text.more()) { if (text.cursor() == text.pos()) { cursor(g, xx); break; } xx += charW(g, text.next()); } text.pos(p); } } next(); }
/** * Draws a centered string to the panel. * * @param g graphics reference * @param text text to be painted * @param w panel width * @param y vertical position */ public static void drawCenter(final Graphics g, final String text, final int w, final int y) { g.drawString(text, (w - width(g, text)) / 2, y); }
/** * Writes the current string to the graphics reference. * * @param g graphics reference */ private void write(final Graphics g) { if (high) { high = false; } else { color = isEnabled() ? syntax.getColor(text) : Color.gray; } final int ch = text.curr(); if (y > 0 && y < h) { if (ch == TokenBuilder.MARK) { color = GUIConstants.GREEN; high = true; } // mark selected text final int cp = text.pos(); if (text.selectStart()) { int xx = x, cw = 0; while (!text.inSelect() && text.more()) xx += charW(g, text.next()); while (text.inSelect() && text.more()) cw += charW(g, text.next()); g.setColor(GUIConstants.color(3)); g.fillRect(xx, y - fontH * 4 / 5, cw, fontH); text.pos(cp); } // mark found text int xx = x; while (text.more() && text.searchStart()) { int cw = 0; while (!text.inSearch() && text.more()) xx += charW(g, text.next()); while (text.inSearch() && text.more()) cw += charW(g, text.next()); g.setColor(GUIConstants.color2A); g.fillRect(xx, y - fontH * 4 / 5, cw, fontH); xx += cw; } text.pos(cp); if (text.erroneous()) drawError(g); // don't write whitespaces if (ch > ' ') { g.setColor(color); String n = text.nextString(); int ww = w - x; if (x + wordW > ww) { // shorten string if it cannot be completely shown (saves memory) int c = 0; for (final int nl = n.length(); c < nl && ww > 0; c++) { ww -= charW(g, n.charAt(c)); } n = n.substring(0, c); } g.drawString(n, x, y); } else if (ch <= TokenBuilder.MARK) { g.setFont(font); } // show cursor if (cursor && text.edited()) { xx = x; while (text.more()) { if (text.cursor() == text.pos()) { drawCursor(g, xx); break; } xx += charW(g, text.next()); } text.pos(cp); } } next(); }