HtmlCanvas.java
_______________________________________________________

//Decafe PRO - Java Decompiler
import java.awt.*;
import java.awt.image.ImageObserver;
import java.net.URL;
import java.util.Hashtable;
public class HtmlCanvas extends Canvas
{
        private HtmlDocument document;
        private int start;
        private int width;
        private int heights[];
        private Href hrefs[];
        private Hashtable names;
        private Image image;
        private HtmlImage imgs[];
        public HtmlCanvas()
        {
                width = 300;
                document = null;
        }
        public HtmlCanvas(HtmlDocument htmldocument)
        {
                width = 300;
                changeDocument(htmldocument);
        }
        public void changeDocument(HtmlDocument htmldocument)
        {
                htmldocument.draw(new HtmlPager(this, width));
                document = htmldocument;
                start = 0;
        }
        public URL getHref(int i, int j)
        {
                if(hrefs == null)
                    return null;
                int k = lineAt(j + start);
                for(int l = 0; l < hrefs.length; l++)
                {
                        Href href = hrefs[l];
                        if((k != href.startLine || i >= href.startOffset) && (k != href.endLine || i < href.endOffset) && k >= href.startLine && k <= href.endLine)
                            return href.url;
                }
                return null;
        }
        public int setStart(String s)
        {
                if(names == null || s == null)
                {
                        start = 0;
                }
                else
                {
                        Integer integer = (Integer)names.get(s);
                        if(integer == null)
                            start = 0;
                        else
                            start = heights[integer.intValue() - 1];
                }
                repaint();
                return start;
        }
        public void setStart(int i)
        {
                start = i;
                repaint();
        }
        public int setWidth(int i)
        {
                if(document == null)
                {
                        width = i;
                        return 0;
                }
                if(i != width)
                {
                        width = i;
                        document.draw(new HtmlPager(this, i));
                }
                return heights[heights.length - 1];
        }
        private String statusString(int i)
        {
                String s = "";
                if((i & 0x80) != 0)
                    s += "ABORT ";
                if((i & 0x20) != 0)
                    s += "ALLBITS ";
                if((i & 0x40) != 0)
                    s += "ERROR ";
                if((i & 0x10) != 0)
                    s += "FRAMEBITS ";
                if((i & 0x2) != 0)
                    s += "HEIGHT ";
                if((i & 0x4) != 0)
                    s += "PROPERTIES ";
                if((i & 0x8) != 0)
                    s += "SOMEBITS ";
                if((i & 0x1) != 0)
                    s += "WIDTH ";
                return s + i;
        }
        public synchronized void paint(Graphics g)
        {
                g.setColor(getBackground());
                if(document == null)
                {
                        g.fillRect(0, 0, size().width, size().height);
                        return;
                }
                if(image == null)
                    document.draw(new HtmlPager(this, width));
                Graphics g1 = image.getGraphics();
                for(int i = 0; i < imgs.length; i++)
                    g1.drawImage(imgs[i].img, imgs[i].x, imgs[i].y, imgs[i].w, imgs[i].h, this);
                g.drawImage(image, 0, -start, this);
                int j = image.getWidth(null);
                if(j < size().width)
                    g.fillRect(j, 0, size().width - j, size().height);
                int k = image.getHeight(null) - start;
                if(k < size().height)
                    g.fillRect(0, k, size().width, size().height - k);
        }
        public void update(Graphics g)
        {
                paint(g);
        }
        protected synchronized void setData(int ai[], Href ahref[], Hashtable hashtable, HtmlImage ahtmlimage[], Image image1)
        {
                heights = ai;
                hrefs = ahref;
                names = hashtable;
                imgs = ahtmlimage;
                image = image1;
        }
        private int lineAt(int i)
        {
                for(int j = 0; j < heights.length - 1; j++)
                    if(i >= heights[j] && i < heights[j + 1])
                        return j;
                return -1;
        }
}


Created with Decafe Pro