334 notifyDisposeListeners(gids);
335 }
336 }
337 }
338
339 freeIntMemory(glyphPtrs, pContext);
340 }
341
342 private static void freeCachedLongMemory(long[] glyphPtrs, long pContext) {
343 synchronized(disposeListeners) {
344 if (disposeListeners.size() > 0) {
345 ArrayList<Long> gids = null;
346
347 for (int i=0; i < glyphPtrs.length; i++) {
348 if (glyphPtrs[i] != 0
349 && unsafe.getByte(glyphPtrs[i] + managedOffset) == 0) {
350
351 if (gids == null) {
352 gids = new ArrayList<Long>();
353 }
354 gids.add((long) glyphPtrs[i]);
355 }
356 }
357
358 if (gids != null) {
359 // Any reference by the disposers to the native glyph ptrs
360 // must be done before this returns.
361 notifyDisposeListeners(gids);
362 }
363 }
364 }
365
366 freeLongMemory(glyphPtrs, pContext);
367 }
368
369 public static void addGlyphDisposedListener(GlyphDisposedListener listener) {
370 synchronized(disposeListeners) {
371 disposeListeners.add(listener);
372 }
373 }
374
|
334 notifyDisposeListeners(gids);
335 }
336 }
337 }
338
339 freeIntMemory(glyphPtrs, pContext);
340 }
341
342 private static void freeCachedLongMemory(long[] glyphPtrs, long pContext) {
343 synchronized(disposeListeners) {
344 if (disposeListeners.size() > 0) {
345 ArrayList<Long> gids = null;
346
347 for (int i=0; i < glyphPtrs.length; i++) {
348 if (glyphPtrs[i] != 0
349 && unsafe.getByte(glyphPtrs[i] + managedOffset) == 0) {
350
351 if (gids == null) {
352 gids = new ArrayList<Long>();
353 }
354 gids.add(glyphPtrs[i]);
355 }
356 }
357
358 if (gids != null) {
359 // Any reference by the disposers to the native glyph ptrs
360 // must be done before this returns.
361 notifyDisposeListeners(gids);
362 }
363 }
364 }
365
366 freeLongMemory(glyphPtrs, pContext);
367 }
368
369 public static void addGlyphDisposedListener(GlyphDisposedListener listener) {
370 synchronized(disposeListeners) {
371 disposeListeners.add(listener);
372 }
373 }
374
|