Added methods to FontAsset to make it usable.

This commit is contained in:
lieght
2025-10-01 04:30:35 +02:00
parent 5e4db91750
commit b2b8601f0c
2 changed files with 39 additions and 2 deletions

View File

@@ -10,6 +10,7 @@ import java.util.function.Function;
import org.reflections.Reflections;
import org.toop.framework.asset.resources.FileExtension;
import org.toop.framework.asset.resources.FontAsset;
public class AssetLoader {
@@ -58,6 +59,7 @@ public class AssetLoader {
BaseResource resource = resourceMapper(fileEntry, BaseResource.class);
if (resource != null) {
assets.add(new Asset<>(fileEntry.getName(), resource));
if (resource instanceof FontAsset fontAsset) fontAsset.load(); // Autoload if is a FONT for easy css support.
}
}
}

View File

@@ -1,8 +1,13 @@
package org.toop.framework.asset.resources;
import javafx.scene.text.Font;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
@FileExtension({"ttf", "otf"})
public class FontAsset extends BaseResource implements LoadableResource {
private String family;
public FontAsset(final File fontFile) {
super(fontFile);
@@ -10,11 +15,25 @@ public class FontAsset extends BaseResource implements LoadableResource {
@Override
public void load() {
if (!this.isLoaded) {
try (FileInputStream fis = new FileInputStream(this.file)) {
// Register font with JavaFX
Font font = Font.loadFont(fis, 12); // Default preview size
if (font == null) {
throw new RuntimeException("Failed to load font: " + this.file);
}
this.family = font.getFamily(); // Save family name for CSS / future use
this.isLoaded = true;
} catch (IOException e) {
throw new RuntimeException("Error reading font file: " + this.file, e);
}
}
}
@Override
public void unload() {
// Font remains globally registered with JavaFX, but we just forget it locally
this.family = null;
this.isLoaded = false;
}
@@ -22,4 +41,20 @@ public class FontAsset extends BaseResource implements LoadableResource {
public boolean isLoaded() {
return this.isLoaded;
}
/** Get a new font instance with the given size */
public Font getFont(double size) {
if (!this.isLoaded) {
load();
}
return Font.font(this.family, size);
}
/** Get the family name (for CSS usage) */
public String getFamily() {
if (!this.isLoaded) {
load();
}
return this.family;
}
}