/*******************************************************************************
 * Copyright (c) 2015, 2016 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
package org.eclipse.jface.text.contentassist;

import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.FontData;
import org.eclipse.swt.graphics.TextStyle;

import org.eclipse.jface.viewers.StyledString.Styler;


/**
 * Provides {@link Styler} that applies bold style on the given font.
 *
 * @since 3.11
 */
public final class BoldStylerProvider {

	private Font fFont;

	private Font fBoldFont;

	private Styler fBoldStyler;

	/**
	 * Creates a {@link BoldStylerProvider} instance which uses the given <code>font</code>.
	 *
	 * @param font the font to use for creating the bold font
	 */
	public BoldStylerProvider(Font font) {
		fFont= font;
	}

	/**
	 * Disposes the bold font created for the styler.
	 */
	public void dispose() {
		if (fBoldFont != null) {
			fBoldFont.dispose();
			fBoldFont= null;
		}
	}

	/**
	 * Returns a {@link Styler} that applies bold style to the given {@link TextStyle}'s font.
	 *
	 * @return a bold styler
	 */
	public Styler getBoldStyler() {
		if (fBoldStyler == null) {
			fBoldStyler= new Styler() {
				@Override
				public void applyStyles(TextStyle textStyle) {
					textStyle.font= getBoldFont();
				}
			};
		}
		return fBoldStyler;
	}

	/**
	 * Creates (if not already done) and returns the bold font used by the styler to apply the bold
	 * style.
	 *
	 * <p>
	 * <strong>Note:</strong> The callers must not cache and re-use the returned font outside the
	 * current call.
	 * </p>
	 *
	 * @return the bold font used by the styler
	 */
	public Font getBoldFont() {
		if (fBoldFont == null) {
			FontData[] data= fFont.getFontData();
			for (int i= 0; i < data.length; i++) {
				data[i].setStyle(SWT.BOLD);
			}
			fBoldFont= new Font(fFont.getDevice(), data);
		}
		return fBoldFont;
	}

	/**
	 * Returns the font used by the styler to create the bold font.
	 *
	 * @return the font used for creating the bold font
	 */
	public Font getFont() {
		return fFont;
	}

}
