mirror of
https://github.com/peterdell/wudsn-ide.git
synced 2025-03-13 10:33:03 +00:00
Correctly reuse hardware font files and fonts
This commit is contained in:
parent
f338e19db1
commit
30358e6cb3
@ -21,7 +21,9 @@ package com.wudsn.ide.base.hardware;
|
|||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
import java.util.TreeMap;
|
import java.util.TreeMap;
|
||||||
|
import java.util.TreeSet;
|
||||||
|
|
||||||
import org.eclipse.jface.resource.JFaceResources;
|
import org.eclipse.jface.resource.JFaceResources;
|
||||||
import org.eclipse.swt.SWT;
|
import org.eclipse.swt.SWT;
|
||||||
@ -34,7 +36,7 @@ import com.wudsn.ide.base.common.FileUtility;
|
|||||||
import com.wudsn.ide.base.common.ResourceUtility;
|
import com.wudsn.ide.base.common.ResourceUtility;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Logical character set with physical font and character mapping.
|
* Logical character set with physical font and character mapping.
|
||||||
*
|
*
|
||||||
* @since 1.7.0
|
* @since 1.7.0
|
||||||
*/
|
*/
|
||||||
@ -55,13 +57,16 @@ public enum HardwareCharacterSet {
|
|||||||
private final static int CBM_UPPER_FONT_BASE = 0x0100;
|
private final static int CBM_UPPER_FONT_BASE = 0x0100;
|
||||||
private final static int CBM_LOWER_FONT_BASE = 0x0200;
|
private final static int CBM_LOWER_FONT_BASE = 0x0200;
|
||||||
|
|
||||||
private static Map<HardwareCharacterSet, CharacterMapping> characterMappingMap;
|
|
||||||
private static Map<String, File> fontNameFileMap;
|
private static Map<String, File> fontNameFileMap;
|
||||||
private static Map<String, Font> fontNameAndSizeFontMap;
|
private static Set<String> fontPathSet;
|
||||||
|
private static Map<String, Font> fontNameSizeFontMap;
|
||||||
|
private static Map<HardwareCharacterSet, CharacterMapping> characterMappingMap;
|
||||||
|
|
||||||
static {
|
static {
|
||||||
fontNameFileMap = new TreeMap<String, File>();
|
fontNameFileMap = new TreeMap<String, File>();
|
||||||
fontNameAndSizeFontMap = new TreeMap<String, Font>();
|
fontPathSet = new TreeSet<String>();
|
||||||
|
fontNameSizeFontMap = new TreeMap<String, Font>();
|
||||||
|
|
||||||
characterMappingMap = new TreeMap<HardwareCharacterSet, CharacterMapping>();
|
characterMappingMap = new TreeMap<HardwareCharacterSet, CharacterMapping>();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -203,7 +208,7 @@ public enum HardwareCharacterSet {
|
|||||||
// Check if temporary file is already cached?
|
// Check if temporary file is already cached?
|
||||||
if (!fontNameFileMap.containsKey(fontName)) {
|
if (!fontNameFileMap.containsKey(fontName)) {
|
||||||
try {
|
try {
|
||||||
file = File.createTempFile("HardwareCharacterSet-"+fontName, null);
|
file = File.createTempFile("HardwareCharacterSet-" + fontName, null);
|
||||||
byte[] content = ResourceUtility.loadResourceAsByteArray(fontPath);
|
byte[] content = ResourceUtility.loadResourceAsByteArray(fontPath);
|
||||||
FileUtility.writeBytes(file, content);
|
FileUtility.writeBytes(file, content);
|
||||||
// Make sure the file is kept until the process ends.
|
// Make sure the file is kept until the process ends.
|
||||||
@ -219,25 +224,31 @@ public enum HardwareCharacterSet {
|
|||||||
}
|
}
|
||||||
// Remember the file, may be null
|
// Remember the file, may be null
|
||||||
fontNameFileMap.put(fontName, file);
|
fontNameFileMap.put(fontName, file);
|
||||||
|
} else {
|
||||||
|
file = fontNameFileMap.get(fontName);
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
file = fontNameFileMap.get(fontName);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// If temporary file is present,try to load the font.
|
// If temporary file is present,try to load the font.
|
||||||
if (file != null) {
|
if (file != null) {
|
||||||
var fontSizeKey = fontName + "/" + fontSize;
|
Device device = Display.getDefault();
|
||||||
if (!fontNameAndSizeFontMap.containsKey(fontSizeKey)) {
|
if (!fontPathSet.contains(fontPath)) {
|
||||||
Device device = Display.getDefault();
|
|
||||||
String absolutePath = file.getAbsolutePath();
|
String absolutePath = file.getAbsolutePath();
|
||||||
if (device.loadFont(absolutePath)) {
|
if (device.loadFont(absolutePath)) {
|
||||||
font = new Font(device, fontName, fontSize, SWT.NORMAL);
|
fontPathSet.add(fontPath);
|
||||||
fontNameAndSizeFontMap.put(fontSizeKey, font);
|
|
||||||
|
|
||||||
|
} else {
|
||||||
|
throw new RuntimeException(
|
||||||
|
"Cannot load font '" + fontName + "' from file '" + absolutePath + "'");
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
font = fontNameAndSizeFontMap.get(fontSizeKey);
|
|
||||||
}
|
}
|
||||||
|
var fontNameSizeKey = fontName + "/" + fontSize;
|
||||||
|
font = fontNameSizeFontMap.get(fontNameSizeKey);
|
||||||
|
if (font == null) {
|
||||||
|
font = new Font(device, fontName, fontSize, SWT.NORMAL);
|
||||||
|
fontNameSizeFontMap.put(fontNameSizeKey, font);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return font;
|
return font;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user