/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.core.gui.resources.internal;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.widgets.Display;
import de.rcenvironment.core.gui.resources.api.FontManager;
import de.rcenvironment.core.gui.resources.api.FontSource;
/**
* Implementation of {@link FontManager}.
*
* @author Sascha Zur
*/
public class FontManagerImpl extends FontManager {
private final Log log = LogFactory.getLog(getClass());
private final Map<FontSource, Font> sharedFonts = new HashMap<>();
@Override
public Font getFont(FontSource fonts) {
synchronized (sharedFonts) {
Font font = sharedFonts.get(fonts);
if (font == null) {
font = new Font(Display.getCurrent(), fonts.getFontName(), fonts.getFontWidth(), fonts.getFontSwtFlag());
sharedFonts.put(fonts, font);
}
return font;
}
}
@Override
protected void dispose() {
synchronized (sharedFonts) {
log.debug("Disposing " + sharedFonts.values().size() + " shared fonts");
for (Font f : sharedFonts.values()) {
f.dispose();
}
sharedFonts.clear();
}
log.debug("Font manager disposed");
}
}