/* (non-Javadoc) * @see javax.swing.JComponent#paintComponent(java.awt.Graphics) */ public void paint(Graphics g) { g.setColor(Color.BLACK); HTMLElementImpl rootElement = this.rootElement; String type = rootElement.getAttribute("type"); int bulletType = 0; boolean numbered = rootElement instanceof HTMLOListElement; FontMetrics fm = null; int bulletNumber = 0; if (numbered) { HTMLOListElementImpl oList = (HTMLOListElementImpl) rootElement; bulletNumber = oList.getStart(); Font f = g.getFont(); fm = Toolkit.getDefaultToolkit().getFontMetrics(f); } else { if ("disc".equalsIgnoreCase(type)) { bulletType = 0; } else if ("circle".equalsIgnoreCase(type)) { bulletType = 1; } else if ("square".equals(type)) { bulletType = 2; } else { bulletType = this.nesting; } } Iterator i = this.blocks.iterator(); while (i.hasNext()) { Object c = i.next(); if (c instanceof RBlock) { RBlock hp = (RBlock) c; Rectangle bounds = hp.getBounds(); Graphics newG = g.create(bounds.x, bounds.y, bounds.width, bounds.height); hp.paint(newG); int lineHeight = hp.getFirstLineHeight(); int bulletRight = bounds.x - BULLET_SPACING; int bulletBottom = bounds.y + lineHeight; if (numbered) { // TODO: value attribute from LI element // TODO: type attribute from LI element String numberText = bulletNumber + "."; int bulletLeft = bulletRight - fm.stringWidth(numberText); int bulletY = bulletBottom - fm.getDescent(); g.drawString(numberText, bulletLeft, bulletY); } else { bulletBottom -= BULLET_BOTTOM_PADDING; int bulletTop = bulletBottom - BULLET_HEIGHT; int bulletLeft = bulletRight - BULLET_WIDTH; if (bulletType == 0) { g.fillOval(bulletLeft, bulletTop, BULLET_WIDTH, BULLET_HEIGHT); } else if (bulletType == 1) { g.drawOval(bulletLeft, bulletTop, BULLET_WIDTH, BULLET_HEIGHT); } else { g.fillRect(bulletLeft, bulletTop, BULLET_WIDTH, BULLET_HEIGHT); } } bulletNumber++; } } }
private HTMLElementImpl[] getSubFrames(HTMLElementImpl parent) { NodeImpl[] children = parent.getChildrenArray(); ArrayList subFrames = new ArrayList(); for (int i = 0; i < children.length; i++) { NodeImpl child = children[i]; if (child instanceof HTMLElementImpl) { String nodeName = child.getNodeName(); if ("FRAME".equalsIgnoreCase(nodeName) || "FRAMESET".equals(nodeName)) { subFrames.add(child); } } } return (HTMLElementImpl[]) subFrames.toArray(new HTMLElementImpl[0]); }
public void setRootNode(NodeImpl node) { if (!(node instanceof HTMLElementImpl)) { throw new IllegalArgumentException("node=" + node); } HTMLElementImpl element = (HTMLElementImpl) node; HtmlRendererContext context = element.getHtmlRendererContext(); this.htmlContext = context; if (context != null) { String rows = element.getAttribute("rows"); String cols = element.getAttribute("cols"); HtmlLength[] rowLengths = this.getLengths(rows); HtmlLength[] colLengths = this.getLengths(cols); this.rowHtmlLengths = rowLengths; this.colHtmlLengths = colLengths; HTMLElementImpl[] subframes = this.getSubFrames(element); Component[] frameComponents = new Component[subframes.length]; this.frameComponents = frameComponents; for (int i = 0; i < subframes.length; i++) { HTMLElementImpl frameElement = subframes[i]; if (frameElement != null && "FRAMESET".equalsIgnoreCase(frameElement.getTagName())) { FrameSetPanel fsp = new FrameSetPanel(); fsp.setRootNode(frameElement); frameComponents[i] = fsp; } else { BrowserFrame frame = context.createBrowserFrame(); if (frameElement != null) { String src = frameElement.getAttribute("src"); if (src != null) { java.net.URL url; try { url = frameElement.getFullURL(src); if (url != null) { frame.loadURL(url); } } catch (MalformedURLException mfu) { // ignore } } } frameComponents[i] = frame.getComponent(); } } } }