private void renderLines(@Nonnull final Element w, @Nonnull final NiftyRenderEngine r, @Nonnull String... lines) { RenderFont font = ensureFont(r); if (font == null) { return; } boolean stateSaved = prepareRenderEngine(r, font); int y = getStartYWithVerticalAlign(lines.length * font.getHeight(), w.getHeight(), textVAlign); for (String line : lines) { int yy = w.getY() + y; if (Math.abs(xOffsetHack) > 0) { int fittingOffset = FontHelper.getVisibleCharactersFromStart(font, line, Math.abs(xOffsetHack), 1.0f); String cut = line.substring(0, fittingOffset); String substring = line.substring(fittingOffset, line.length()); int xx = w.getX() + xOffsetHack + font.getWidth(cut); renderLine(xx, yy, substring, r, selectionStart - fittingOffset, selectionEnd - fittingOffset); } else { int xx = w.getX() + getStartXWithHorizontalAlign(font.getWidth(line), w.getWidth(), textHAlign); renderLine(xx, yy, line, r, selectionStart, selectionEnd); } y += font.getHeight(); } restoreRenderEngine(r, stateSaved); }