+++ /dev/null
-package org.apache.fop.render.awt;
-
-import javax.swing.*;
-import java.awt.*;
-import java.awt.font.FontRenderContext;
-import java.awt.font.LineBreakMeasurer;
-import java.awt.font.TextLayout;
-import java.util.Hashtable;
-import java.text.AttributedCharacterIterator;
-import java.text.AttributedString;
-import java.awt.font.TextAttribute;
-import java.awt.event.WindowAdapter;
-import java.awt.event.WindowEvent;
-
-/**
- * This class demonstrates how to line-break and draw a paragraph
- * of text using LineBreakMeasurer and TextLayout.
- *
- * This class constructs a LineBreakMeasurer from an
- * AttributedCharacterIterator. It uses the LineBreakMeasurer
- * to create and draw TextLayouts (lines of text) which fit within
- * the Component's width.
- */
-
-public class LineBreakSample extends JApplet {
-
- // The LineBreakMeasurer used to line-break the paragraph.
- private LineBreakMeasurer lineMeasurer;
-
- // The index in the LineBreakMeasurer of the first character
- // in the paragraph.
- private int paragraphStart;
-
- // The index in the LineBreakMeasurer of the first character
- // after the end of the paragraph.
- private int paragraphEnd;
-
- private static final Hashtable map = new Hashtable();
- static {
- map.put(TextAttribute.FAMILY, "Utopia");
- map.put(TextAttribute.POSTURE, TextAttribute.POSTURE_OBLIQUE);
- map.put(TextAttribute.WIDTH, TextAttribute.WIDTH_CONDENSED);
- map.put(TextAttribute.WEIGHT, TextAttribute.WEIGHT_BOLD);
- map.put(TextAttribute.UNDERLINE, TextAttribute.UNDERLINE_LOW_ONE_PIXEL);
- map.put(TextAttribute.FOREGROUND, Color.red);
- map.put(TextAttribute.STRIKETHROUGH, TextAttribute.STRIKETHROUGH_ON);
- map.put(TextAttribute.SIZE, new Float(18.0));
- }
-
- private static AttributedString vanGogh = new AttributedString(
- "Many people believe that Vincent van Gogh painted his best works " +
- "during the two-year period he spent in Provence. Here is where he " +
- "painted The Starry Night--which some consider to be his greatest " +
- "work of all. However, as his artistic brilliance reached new heights " +
- "in Provence, his physical and mental health plummeted. ", map);
-
- public void init() {
- buildUI(getContentPane());
- }
-
- public void buildUI(Container container){
- LineBreakPanel lineBreakPanel = new LineBreakPanel();
- container.add(lineBreakPanel, BorderLayout.CENTER);
- }
-
- class LineBreakPanel extends JPanel {
-
- public LineBreakPanel() {
- //setFont(Font.decode("utopia-plain-14"));
- AttributedCharacterIterator paragraph = vanGogh.getIterator();
- paragraphStart = paragraph.getBeginIndex();
- paragraphEnd = paragraph.getEndIndex();
-
- // Create a new LineBreakMeasurer from the paragraph.
- lineMeasurer = new LineBreakMeasurer(paragraph,
- new FontRenderContext(null, true, true));
- }
-
- public void paintComponent(Graphics g) {
-
- super.paintComponent(g);
- setBackground(Color.white);
-
- Graphics2D graphics2D = (Graphics2D) g;
-
- // Set formatting width to width of Component.
- Dimension size = getSize();
- float formatWidth = (float) size.width;
-
- float drawPosY = 0;
-
- lineMeasurer.setPosition(paragraphStart);
-
- // Get lines from lineMeasurer until the entire
- // paragraph has been displayed.
- while (lineMeasurer.getPosition() < paragraphEnd) {
-
- // Retrieve next layout.
- TextLayout layout = lineMeasurer.nextLayout(formatWidth);
- // Move y-coordinate by the ascent of the layout.
- drawPosY += layout.getAscent();
-
- // Compute pen x position. If the paragraph is
- // right-to-left, we want to align the TextLayouts
- // to the right edge of the panel.
- float drawPosX;
- if (layout.isLeftToRight()) {
- drawPosX = 0;
- }
- else {
- drawPosX = formatWidth - layout.getAdvance();
- }
-
- // Draw the TextLayout at (drawPosX, drawPosY).
- layout.draw(graphics2D, drawPosX, drawPosY);
-
- // Move y-coordinate in preparation for next layout.
- drawPosY += layout.getDescent() + layout.getLeading();
- }
-
- }
- }
-
- public static void main(String[] args) {
-
- JFrame f = new JFrame("HitTestSample");
-
- f.addWindowListener(new WindowAdapter(){
- public void windowClosing(WindowEvent e) {
- System.exit(0);
- }
- });
-
- LineBreakSample controller = new LineBreakSample();
- controller.buildUI(f.getContentPane());
- f.setSize(new Dimension(400, 250));
- f.setVisible(true);
- }
-
-}