package com.xenoage.zong.android.renderer; import android.graphics.Bitmap; import android.graphics.Canvas; import com.xenoage.utils.math.Units; import com.xenoage.utils.math.geom.Point2i; import com.xenoage.utils.math.geom.Size2f; import com.xenoage.zong.android.renderer.canvas.AndroidCanvas; import com.xenoage.zong.layout.Layout; import com.xenoage.zong.layout.Page; import com.xenoage.zong.layout.frames.Frame; import com.xenoage.zong.renderer.LayoutRenderer; import com.xenoage.zong.renderer.RendererArgs; import com.xenoage.zong.renderer.canvas.CanvasDecoration; import com.xenoage.zong.renderer.canvas.CanvasFormat; import com.xenoage.zong.renderer.canvas.CanvasIntegrity; import static com.xenoage.utils.math.geom.Point2i.origin; /** * Like {@link LayoutRenderer}, but more Android specific rendering methods. * * @author Andreas Wenger */ public class AndroidLayoutRenderer { public static AndroidLayoutRenderer androidLayoutRenderer = new AndroidLayoutRenderer(); /** * Returns a {@link Bitmap} with the given page of the given {@link Layout} * which is rendered at the given zoom level. */ public Bitmap paint(Layout layout, int pageIndex, float zoom) { Page page = layout.getPages().get(pageIndex); Size2f pageSize = page.getFormat().getSize(); int width = Units.mmToPxInt(pageSize.width, zoom); int height = Units.mmToPxInt(pageSize.height, zoom); Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(bitmap); canvas.drawARGB(255, 255, 255, 255); //TODO: necessary? and really 8888 bitmap? canvas.scale(zoom, zoom); paint(layout, pageIndex, new AndroidCanvas(canvas, pageSize, CanvasFormat.Raster, CanvasDecoration.None, CanvasIntegrity.Perfect), zoom); return bitmap; } /** * Paints the given page of the given {@link Layout} on the given {@link AndroidCanvas} * with no offset and the given scaling. */ public void paint(Layout layout, int pageIndex, AndroidCanvas canvas, float scaling) { Page page = layout.getPages().get(pageIndex); LayoutRenderer.paintToCanvas(layout, pageIndex, scaling, origin, canvas); } }