@Override
	public void drawHeader(Graphics2D gc) {
		super.drawHeader(gc);
		boolean active = isFocusOwner();
		Rectangle clipBounds = gc.getClipBounds();
		int left = clipBounds.x;
		int right = clipBounds.x + clipBounds.width;
		Rectangle colBounds = getHeaderViewBounds();
		int dividerWidth = getColumnDividerWidth();
		colBounds.x = 0;
		colBounds.height -= dividerWidth;
		int count = mColumns.size();
		for (int i = 0; i < count; i++) {
			TreeColumn column = mColumns.get(i);
			if (i != count - 1) {
				colBounds.width = column.getWidth();
			} else {
				colBounds.width = Math.max(column.getWidth(), right - colBounds.x);
			}
			if (colBounds.x < right && colBounds.x + colBounds.width > left) {
				column.drawHeader(gc, this, colBounds, active);
			}
			colBounds.x += colBounds.width + dividerWidth;
		}
		if (dividerWidth > 0) {
			Color savedColor = gc.getColor();
			gc.setColor(mDividerColor);
			int bottom = colBounds.y + colBounds.height;
			gc.drawLine(left, bottom, right, bottom);
			gc.setColor(savedColor);
			drawColumnDividers(gc);
		}
		if (!isDrawingDragImage() && mDragState != null && mDragState.isHeaderFocus()) {
			Composite savedComposite = gc.getComposite();
			Color savedColor = gc.getColor();
			setHighlightColorAndComposite(gc);
			Rectangle bounds = getHeaderViewBounds();
			gc.fillRect(bounds.x + DRAG_FOCUS_WIDTH, bounds.y, bounds.width - DRAG_FOCUS_WIDTH * 2, DRAG_FOCUS_WIDTH);
			if (!mDragState.isContentsFocus()) {
				gc.fillRect(bounds.x + DRAG_FOCUS_WIDTH, bounds.y + bounds.height - DRAG_FOCUS_WIDTH, bounds.width - DRAG_FOCUS_WIDTH * 2, DRAG_FOCUS_WIDTH);
			}
			gc.fillRect(bounds.x, bounds.y, DRAG_FOCUS_WIDTH, bounds.height);
			gc.fillRect(bounds.x + bounds.width - DRAG_FOCUS_WIDTH, bounds.y, DRAG_FOCUS_WIDTH, bounds.height);
			gc.setColor(savedColor);
			gc.setComposite(savedComposite);
		}
	}