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

org.protege.editor.owl.ui.renderer.styledstring.StyledStringLayout Maven / Gradle / Ivy

package org.protege.editor.owl.ui.renderer.styledstring;

import com.google.common.collect.ImmutableList;

import java.awt.*;
import java.awt.font.FontRenderContext;
import java.awt.font.TextLayout;
import java.text.AttributedCharacterIterator;
import java.text.AttributedString;

/**
 * Author: Matthew Horridge
* Stanford University
* Bio-Medical Informatics Research Group
* Date: 26/09/2012 */ public class StyledStringLayout { private final ImmutableList textLayoutLines; public StyledStringLayout(StyledString styledString) { textLayoutLines = createLines(styledString); } private static ImmutableList createLines(StyledString styledString) { if (styledString.isEmpty()) { return ImmutableList.of(); } String[] lines = styledString.getString().split("\\n"); int lineStart = 0; int lineEnd; ImmutableList.Builder textLayoutLinesBuilder = ImmutableList.builder(); for (String line : lines) { lineEnd = lineStart + line.length(); if (line.length() != 0) { AttributedCharacterIterator iterator = styledString.toAttributedString().getIterator(); AttributedString attributedLine = new AttributedString(iterator, lineStart, lineEnd); textLayoutLinesBuilder.add(new TextLayoutCache(attributedLine)); lineStart = lineEnd + 1; } } return textLayoutLinesBuilder.build(); } public float getWidth(FontRenderContext fontRenderContext) { float maxWidth = 0; for (TextLayoutCache cache : textLayoutLines) { float visibleAdvance = cache.getVisibleAdvance(fontRenderContext); if (visibleAdvance > maxWidth) { maxWidth = visibleAdvance; } } return maxWidth; } public float getHeight(FontRenderContext fontRenderContext) { float height = 0; for (TextLayoutCache textLayoutCache : textLayoutLines) { height += textLayoutCache.getHeight(fontRenderContext); } return height; } public void draw(Graphics2D g2, float x, float y) { float yOffset = y; float leading = 0; float ascent = 0; float descent = 0; for (TextLayoutCache cache : textLayoutLines) { FontRenderContext frc = g2.getFontRenderContext(); TextLayout textLayout = cache.getTextLayout(frc); leading = textLayout.getLeading(); ascent = textLayout.getAscent(); yOffset += leading + ascent + descent; textLayout.draw(g2, x, yOffset); descent = textLayout.getDescent(); } } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy