@Override
	public void drawUp(Point p, Node node) {
		this.node = node;
		
		// Adjust color when we are selected
		updateColors();
		
		// Update the button
		updateButton();
		
		// Update font
		updateFont();
		
		// Draw the TextArea
		setText(node.getValue());
		
		int indent = node.getDepth() * pIndent;
		int width = textAreaWidth - indent;
		
		// Size needs to be set twice. The first time forces the lines to flow. The second then sets the correct height.
		setSize(width,32);
		height = getBestHeight();
		p.y -= (height + pVerticalSpacing);
		setBounds(p.x + indent + OutlineButton.BUTTON_WIDTH, p.y, width, height);
		
		// Draw the Button
		button.setBounds(p.x + indent, p.y, OutlineButton.BUTTON_WIDTH, height);
		
		// Draw the LineNumber
		if (pShowLineNumbers) {
			if (node.getTree().getDocument().hoistStack.isHoisted()) {
				// TODO: This value should be pre-calculated.
				int offset = node.getTree().getDocument().hoistStack.getLineCountOffset() + node.getLineNumber(node.getTree().getLineCountKey());
				lineNumber.setText("" + offset);
			} else {
				lineNumber.setText("" + node.getLineNumber(node.getTree().getLineCountKey()));
			}
		}
		
		lineNumber.setBounds(
			lineNumberOffset, 
			p.y, 
			OutlineLineNumber.LINE_NUMBER_WIDTH + indent, 
			height
		);
		
		// Draw Indicators
		if (pShowIndicators) {
			// Update the Indicators
			updateCommentIndicator();
			updateEditableIndicator();
			updateMoveableIndicator();
			
			iComment.setBounds(
				commentOffset, 
				p.y, 
				OutlineCommentIndicator.BUTTON_WIDTH, 
				height
			);
			
			iEditable.setBounds(
				editableOffset, 
				p.y, 
				OutlineEditableIndicator.BUTTON_WIDTH, 
				height
			);
			
			iMoveable.setBounds(
				moveableOffset, 
				p.y, 
				OutlineMoveableIndicator.BUTTON_WIDTH, 
				height
			);
		}
	}