diff --git a/api/net/sf/briar/api/i18n/FontManager.java b/api/net/sf/briar/api/i18n/FontManager.java index 13249bb41ad4a238a124f645d2788ff70e80638e..b1bd3a1fb0236b97db9977a1d709d46e1d01e404 100644 --- a/api/net/sf/briar/api/i18n/FontManager.java +++ b/api/net/sf/briar/api/i18n/FontManager.java @@ -1,12 +1,16 @@ package net.sf.briar.api.i18n; import java.awt.Font; +import java.io.File; import java.util.Locale; public interface FontManager { - /** Initializes the FontManager for the given locale. */ - void initialize(Locale locale); + /** + * Initializes the FontManager for the given locale. Fonts are loaded from + * the given directory if they cannot be loaded from the running jar. + */ + void initialize(Locale locale, File dir); /** Returns the appropriate font for the given language. */ Font getFontForLanguage(String language); diff --git a/components/net/sf/briar/i18n/FontManagerImpl.java b/components/net/sf/briar/i18n/FontManagerImpl.java index 8787b62f103edc3e144898f1be9c95bd27ec5141..783b6bef4efc039693deb35ce5d7e7d77a48a3d9 100644 --- a/components/net/sf/briar/i18n/FontManagerImpl.java +++ b/components/net/sf/briar/i18n/FontManagerImpl.java @@ -18,7 +18,6 @@ import java.util.logging.Logger; import javax.swing.UIManager; import net.sf.briar.api.i18n.FontManager; -import net.sf.briar.util.FileUtils; // Needs to be public for installer public class FontManagerImpl implements FontManager { @@ -43,18 +42,15 @@ public class FontManagerImpl implements FontManager { private volatile Font defaultFont = null, uiFont = null; - public void initialize(Locale locale) { + public void initialize(Locale locale, File dir) { // Look for bundled fonts in the jar and the filesystem. If any fonts // are missing or fail to load, fall back to the default font. ClassLoader loader = getClass().getClassLoader(); for(BundledFont bf : BUNDLED_FONTS) { try { InputStream in = loader.getResourceAsStream(bf.filename); - if(in == null) { - File root = FileUtils.getBriarDirectory(); - File file = new File(root, "Data/" + bf.filename); - in = new FileInputStream(file); - } + if(in == null) + in = new FileInputStream(new File(dir, bf.filename)); Font font = Font.createFont(Font.TRUETYPE_FONT, in); font = font.deriveFont(bf.size); for(String language : bf.languages) fonts.put(language, font); diff --git a/installer/net/sf/briar/ui/setup/SetupMain.java b/installer/net/sf/briar/ui/setup/SetupMain.java index 5529703e577156593126050170126813d2f84dec..5553dcb8fc1fc101f507e1850067c5523f3d34ac 100644 --- a/installer/net/sf/briar/ui/setup/SetupMain.java +++ b/installer/net/sf/briar/ui/setup/SetupMain.java @@ -1,5 +1,6 @@ package net.sf.briar.ui.setup; +import java.io.File; import java.util.Locale; import javax.swing.UIManager; @@ -11,6 +12,7 @@ import net.sf.briar.api.setup.SetupWorkerFactory; import net.sf.briar.i18n.FontManagerImpl; import net.sf.briar.i18n.I18nImpl; import net.sf.briar.setup.SetupWorkerFactoryImpl; +import net.sf.briar.util.FileUtils; import net.sf.briar.util.OsUtils; public class SetupMain { @@ -30,7 +32,8 @@ public class SetupMain { SetupParameters parameters = new SetupParametersImpl(locationPanel); new SetupWorkerPanel(wizard, workerFactory, parameters, i18n); - fontManager.initialize(Locale.getDefault()); + File dir = new File(FileUtils.getBriarDirectory(), "Data"); + fontManager.initialize(Locale.getDefault(), dir); wizard.display(); } } diff --git a/test/net/sf/briar/TestUtils.java b/test/net/sf/briar/TestUtils.java index 6046f6544390b2d0a09da32779df1831203f87de..d8c25231b78bca3463c96c424ac795da3a7c0f59 100644 --- a/test/net/sf/briar/TestUtils.java +++ b/test/net/sf/briar/TestUtils.java @@ -47,6 +47,14 @@ public class TestUtils { throw new RuntimeException("Could not find build directory"); } + public static File getFontDirectory() { + File f = new File("i18n"); + if(f.exists() && f.isDirectory()) return f; + f = new File("../i18n"); + if(f.exists() && f.isDirectory()) return f; + throw new RuntimeException("Could not find font directory"); + } + public static byte[] getRandomId() { byte[] b = new byte[UniqueId.LENGTH]; random.nextBytes(b); diff --git a/test/net/sf/briar/i18n/FontManagerTest.java b/test/net/sf/briar/i18n/FontManagerTest.java index 0b5ebc415d50067976cdf4c5e3c06212e86a13e8..b423a1df9f504a54d5894e4f150799fba507dd96 100644 --- a/test/net/sf/briar/i18n/FontManagerTest.java +++ b/test/net/sf/briar/i18n/FontManagerTest.java @@ -1,18 +1,22 @@ package net.sf.briar.i18n; import java.awt.Font; +import java.io.File; import java.util.Locale; import junit.framework.TestCase; +import net.sf.briar.TestUtils; import net.sf.briar.api.i18n.FontManager; import org.junit.Test; public class FontManagerTest extends TestCase { + private final File fontDir = TestUtils.getFontDirectory(); + @Test public void testBundledFontsAreLoaded() { FontManager fontManager = new FontManagerImpl(); - fontManager.initialize(Locale.UK); + fontManager.initialize(Locale.UK, fontDir); Font font = fontManager.getFontForLanguage("en"); // English assertEquals(12, font.getSize()); @@ -29,7 +33,7 @@ public class FontManagerTest extends TestCase { @Test public void testInternationalCharactersCanBeDisplayed() { FontManager fontManager = new FontManagerImpl(); - fontManager.initialize(Locale.UK); + fontManager.initialize(Locale.UK, fontDir); Font font = fontManager.getFontForLanguage("en"); // English assertTrue(font.canDisplay('a')); @@ -53,7 +57,7 @@ public class FontManagerTest extends TestCase { @Test public void testSetAndGetUiFont() { FontManager fontManager = new FontManagerImpl(); - fontManager.initialize(Locale.UK); + fontManager.initialize(Locale.UK, fontDir); Font font = fontManager.getUiFont(); assertEquals(12, font.getSize()); diff --git a/test/net/sf/briar/i18n/I18nTest.java b/test/net/sf/briar/i18n/I18nTest.java index f6be63182e75af23c8363cc988cd85d8f2628937..6545025a9a7e5fde0b65c343a076e5842db7edf5 100644 --- a/test/net/sf/briar/i18n/I18nTest.java +++ b/test/net/sf/briar/i18n/I18nTest.java @@ -18,25 +18,21 @@ import org.junit.Test; public class I18nTest extends TestCase { - final File base = + private final File base = new File(TestUtils.getBuildDirectory(), "i18n.properties"); - final File french = + private final File french = new File(TestUtils.getBuildDirectory(), "i18n_fr.properties"); - final File testDir = TestUtils.getTestDirectory(); + private final File testDir = TestUtils.getTestDirectory(); FontManager fontManager = null; I18n i18n = null; @Before public void setUp() throws IOException { - TestUtils.createFile(base, - "FOO=foo\r\n" + - "BAR=bar\r\n"); - TestUtils.createFile(french, - "FOO=le foo\r\n" + - "BAR=la bar\r\n"); + TestUtils.createFile(base, "FOO=foo\r\nBAR=bar\r\n"); + TestUtils.createFile(french, "FOO=le foo\r\nBAR=la bar\r\n"); fontManager = new FontManagerImpl(); - fontManager.initialize(Locale.UK); + fontManager.initialize(Locale.UK, TestUtils.getFontDirectory()); i18n = new I18nImpl(fontManager); } diff --git a/util/net/sf/briar/util/FileUtils.java b/util/net/sf/briar/util/FileUtils.java index e8052c79f494e1b55b0fd5ea5153e9e6b6801863..360791e93420417387e7afec881c97aeddf462fe 100644 --- a/util/net/sf/briar/util/FileUtils.java +++ b/util/net/sf/briar/util/FileUtils.java @@ -20,10 +20,8 @@ public class FileUtils { // Running from a jar - return the jar's grandparent f = f.getParentFile().getParentFile(); } else { - // Running from Eclipse or ant + // Running from Eclipse f = new File(f.getParentFile(), "Briar"); - if(!f.exists()) - f = new File(f.getParentFile().getParentFile(), "Briar"); // Ant } assert f.exists(); assert f.isDirectory();