package org.ebookdroid.core; import android.graphics.PointF; import org.ebookdroid.ui.viewer.IViewController.InvalidateSizeReason; import java.util.concurrent.ConcurrentLinkedQueue; import org.emdev.ui.gl.GLCanvas; public class EventPool { private static final ConcurrentLinkedQueue<EventGLDraw> glEvents = new ConcurrentLinkedQueue<EventGLDraw>(); private static final ConcurrentLinkedQueue<EventReset> resetEvents = new ConcurrentLinkedQueue<EventReset>(); private static final ConcurrentLinkedQueue<EventScrollUp> scrollUpEvents = new ConcurrentLinkedQueue<EventScrollUp>(); private static final ConcurrentLinkedQueue<EventScrollDown> scrollDownEvents = new ConcurrentLinkedQueue<EventScrollDown>(); private static final ConcurrentLinkedQueue<EventScrollTo> scrollToEvents = new ConcurrentLinkedQueue<EventScrollTo>(); private static final ConcurrentLinkedQueue<EventChildLoaded> childLoadedEvents = new ConcurrentLinkedQueue<EventChildLoaded>(); private static final ConcurrentLinkedQueue<EventZoomIn> zoomInEvents = new ConcurrentLinkedQueue<EventZoomIn>(); private static final ConcurrentLinkedQueue<EventZoomOut> zoomOutEvents = new ConcurrentLinkedQueue<EventZoomOut>(); public static EventGLDraw newGLEventDraw(final ViewState viewState, final GLCanvas canvas) { EventGLDraw event = glEvents.poll(); if (event == null) { event = new EventGLDraw(glEvents); } event.init(viewState, canvas); return event; } public static EventReset newEventReset(final AbstractViewController ctrl, final InvalidateSizeReason reason, final boolean clearPages) { EventReset event = resetEvents.poll(); if (event == null) { event = new EventReset(resetEvents); } event.init(ctrl, reason, clearPages); return event; } public static AbstractEventScroll<?> newEventScroll(final AbstractViewController ctrl, final int delta) { AbstractEventScroll<?> event = null; if (delta > 0) { event = scrollDownEvents.poll(); if (event == null) { event = new EventScrollDown(scrollDownEvents); } } else { event = scrollUpEvents.poll(); if (event == null) { event = new EventScrollUp(scrollUpEvents); } } event.init(ctrl); return event; } public static EventScrollTo newEventScrollTo(final AbstractViewController ctrl, final int viewIndex) { EventScrollTo event = scrollToEvents.poll(); if (event == null) { event = new EventScrollTo(scrollToEvents); } event.init(ctrl, viewIndex); return event; } public static EventChildLoaded newEventChildLoaded(final AbstractViewController ctrl, final PageTreeNode child) { EventChildLoaded event = childLoadedEvents.poll(); if (event == null) { event = new EventChildLoaded(childLoadedEvents); } event.init(ctrl, child); return event; } public static AbstractEventZoom<?> newEventZoom(final AbstractViewController ctrl, final float oldZoom, final float newZoom, final boolean committed, PointF center) { AbstractEventZoom<?> event = null; if (newZoom > oldZoom) { event = zoomInEvents.poll(); if (event == null) { event = new EventZoomIn(zoomInEvents); } } else { event = zoomOutEvents.poll(); if (event == null) { event = new EventZoomOut(zoomOutEvents); } } event.init(ctrl, oldZoom, newZoom, committed, center); return event; } }