< 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 >