001    package org.util.xml.renderer.html;
002    
003    import org.util.xml.parse.policy.*;
004    import org.util.xml.parse.*;
005    import org.util.xml.element.*;
006    import java.awt.*;
007    import java.awt.event.*;
008    import java.awt.geom.*;
009    import javax.swing.*;
010    import javax.swing.event.*;
011    import java.util.*;
012    import java.awt.font.*;
013    import java.awt.image.*;
014    
015    public class HTMLText extends HTMLObject {
016    
017            private String html_text_;
018    
019            public HTMLText(String html_text) {
020                    html_text_ = html_text;
021            }
022            public void mousePressed(MouseEvent e) {
023                    setBackground(Color.blue);
024            }
025            public void mouseReleased(MouseEvent e) {
026                    setBackground(Color.red);
027            }
028            public void mouseEntered(MouseEvent e) {
029                    setBackground(Color.green);
030            }
031            public void mouseExited(MouseEvent e) {
032                    setBackground(Color.white);
033            }
034            public boolean hit(double x, double y) {
035                    if(x-x_<0 || x-x_>width_) return false;
036                    if(y-y_<0 || y-y_>height_) return false;
037                    return true;
038            }
039            public void paint(Graphics g) {
040                    debug("draw start");
041                    g.setColor(background_);
042                    g.fillRect((int)x_,(int)y_,(int)width_,(int)height_);
043                    g.setColor(foreground_);
044                    
045                    Font font = new Font("Arial", Font.PLAIN, 10);
046                    FontRenderContext frc = new FontRenderContext(new AffineTransform(), true, true);
047                    String text = html_text_;
048                    String[] lines = text.split("\n");
049                    double now_y = margin_up_;
050                    double max_width = 0;
051                    
052                    TextLayout text_layout = null;
053                    for(int i=0;i<lines.length;i++) {
054                            if(lines[i].length()==0) continue;
055                            text_layout = new TextLayout(lines[i], font, frc);
056                            float d = text_layout.getAscent();
057                            text_layout.draw((Graphics2D)g, (float)(x_+margin_left_), (float)(y_+d+now_y));
058                            Rectangle2D rect = text_layout.getBounds();
059                            now_y += rect.getHeight();
060                            max_width = Math.max(max_width, rect.getWidth());
061                    }
062                    if(!init_) {
063                            if(text_layout != null)
064                                    now_y += text_layout.getDescent();
065                            setPreferredSize(margin_left_+max_width+margin_right_, now_y+margin_bottom_);
066                            init_ = true;
067                    }
068                    debug("draw end");
069            }
070    
071            public Element allowElement(Element element) {
072                    if(element.isTagElement()) {
073                            TagElement tag = (TagElement)element;
074                            System.out.println("tag["+tag+"]");
075                    } else {
076                            TextElement text_element = (TextElement)element;
077    //                      System.out.println("text["+element+"]");
078                            html_text = text_element.getValue();
079                    }
080                    return element;
081            }
082    
083    }