package com.xenoage.zong.renderer.frames; import static com.xenoage.utils.collections.CollectionUtils.map; import java.util.Map; import com.xenoage.utils.annotations.MaybeNull; import com.xenoage.zong.layout.frames.Frame; import com.xenoage.zong.layout.frames.FrameType; import com.xenoage.zong.renderer.RendererArgs; import com.xenoage.zong.renderer.canvas.Canvas; /** * Renderer for all types of {@link Frame}s. * * Platform-specific implementations are provided in subclasses. * * @author Andreas Wenger */ public abstract class FramesRenderer { private static Map<FrameType, FrameRenderer> renderers = getRenderers(); private static Map<FrameType, FrameRenderer> getRenderers() { Map<FrameType, FrameRenderer> renderers = map(); renderers.put(FrameType.GroupFrame, new GroupFrameRenderer()); renderers.put(FrameType.ImageFrame, new ImageFrameRenderer()); renderers.put(FrameType.ScoreFrame, new ScoreFrameRenderer()); renderers.put(FrameType.TextFrame, new TextFrameRenderer()); return renderers; } @MaybeNull public static FrameRenderer get(FrameType frameType) { return renderers.get(frameType); } /** * Registers the given renderer for the given type of frame. */ public static void registerRenderer(FrameType frameType, FrameRenderer renderer) { renderers.put(frameType, renderer); } /** * Paints the given {@link Frame} on the * given {@link Canvas} using the given {@link RendererArgs}. */ public static void paintAny(Frame frame, Canvas canvas, RendererArgs args) { FrameRenderer renderer = get(frame.getType()); if (renderer != null) renderer.paint(frame, canvas, args); } }