< prev index next >
modules/javafx.graphics/src/main/java/com/sun/javafx/font/freetype/PangoGlyphLayout.java
Print this page
@@ -33,10 +33,15 @@
import com.sun.javafx.font.PrismFontFactory;
import com.sun.javafx.text.GlyphLayout;
import com.sun.javafx.text.TextRun;
class PangoGlyphLayout extends GlyphLayout {
+ private static long fontmap;
+
+ static {
+ fontmap = OSPango.pango_ft2_font_map_new();
+ }
private int getSlot(PGFont font, PangoGlyphString glyphString) {
CompositeFontResource fr = (CompositeFontResource)font.getFontResource();
long fallbackFont = glyphString.font;
long fallbackFd = OSPango.pango_font_describe(fallbackFont);
@@ -61,20 +66,19 @@
}
}
return slot;
}
- private boolean check(long checkValue, String message, long fontmap, long context, long desc, long attrList) {
+ private boolean check(long checkValue, String message, long context, long desc, long attrList) {
if (checkValue != 0) return false;
if (message != null && PrismFontFactory.debugFonts) {
System.err.println(message);
}
/* pango_attr_list_unref() also frees the attributes it contains */
if (attrList != 0) OSPango.pango_attr_list_unref(attrList);
if (desc != 0) OSPango.pango_font_description_free(desc);
if (context != 0) OSPango.g_object_unref(context);
- if (fontmap != 0) OSPango.g_object_unref(fontmap);
return true;
}
private long str = 0L;
public void layout(TextRun run, PGFont font, FontStrike strike, char[] text) {
@@ -83,51 +87,50 @@
FontResource fr = font.getFontResource();
boolean composite = fr instanceof CompositeFontResource;
if (composite) {
fr = ((CompositeFontResource)fr).getSlotResource(0);
}
- long fontmap = OSPango.pango_ft2_font_map_new();
- if (check(fontmap, "Failed allocating PangoFontMap.", 0, 0, 0, 0)) {
+ if (check(fontmap, "Failed allocating PangoFontMap.", 0, 0, 0)) {
return;
}
long context = OSPango.pango_font_map_create_context(fontmap);
- if (check(context, "Failed allocating PangoContext.", fontmap, 0, 0, 0)) {
+ if (check(context, "Failed allocating PangoContext.", 0, 0, 0)) {
return;
}
boolean rtl = (run.getLevel() & 1) != 0;
if (rtl) {
OSPango.pango_context_set_base_dir(context, OSPango.PANGO_DIRECTION_RTL);
}
float size = font.getSize();
int style = fr.isItalic() ? OSPango.PANGO_STYLE_ITALIC : OSPango.PANGO_STYLE_NORMAL;
int weight = fr.isBold() ? OSPango.PANGO_WEIGHT_BOLD : OSPango.PANGO_WEIGHT_NORMAL;
long desc = OSPango.pango_font_description_new();
- if (check(desc, "Failed allocating FontDescription.", fontmap, context, 0, 0)) {
+ if (check(desc, "Failed allocating FontDescription.", context, 0, 0)) {
return;
}
OSPango.pango_font_description_set_family(desc, fr.getFamilyName());
OSPango.pango_font_description_set_absolute_size(desc, size * OSPango.PANGO_SCALE);
OSPango.pango_font_description_set_stretch(desc, OSPango.PANGO_STRETCH_NORMAL);
OSPango.pango_font_description_set_style(desc, style);
OSPango.pango_font_description_set_weight(desc, weight);
long attrList = OSPango.pango_attr_list_new();
- if (check(attrList, "Failed allocating PangoAttributeList.", fontmap, context, desc, 0)) {
+ if (check(attrList, "Failed allocating PangoAttributeList.", context, desc, 0)) {
return;
}
long attr = OSPango.pango_attr_font_desc_new(desc);
- if (check(attr, "Failed allocating PangoAttribute.", fontmap, context, desc, attrList)) {
+ if (check(attr, "Failed allocating PangoAttribute.", context, desc, attrList)) {
return;
}
OSPango.pango_attr_list_insert(attrList, attr);
if (!composite) {
attr = OSPango.pango_attr_fallback_new(false);
OSPango.pango_attr_list_insert(attrList, attr);
}
if (str == 0L) {
str = OSPango.g_utf16_to_utf8(text);
- if (check(str, "Failed allocating UTF-8 buffer.", fontmap, context, desc, attrList)) {
+ if (check(str, "Failed allocating UTF-8 buffer.", context, desc, attrList)) {
return;
}
}
/* Itemize */
@@ -188,11 +191,11 @@
}
}
run.shape(glyphCount, glyphs, pos, indices);
}
- check(0, null, fontmap, context, desc, attrList);
+ check(0, null, context, desc, attrList);
}
@Override
public void dispose() {
super.dispose();
< prev index next >