/** * Copyright 2011 The ForPlay Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package forplay.android; import android.graphics.Bitmap; import android.graphics.BitmapShader; import android.graphics.LinearGradient; import android.graphics.RadialGradient; import android.graphics.Shader.TileMode; import android.util.DisplayMetrics; import forplay.core.Asserts; import forplay.core.CanvasImage; import forplay.core.CanvasLayer; import forplay.core.Gradient; import forplay.core.Graphics; import forplay.core.GroupLayer; import forplay.core.Image; import forplay.core.ImageLayer; import forplay.core.Pattern; import forplay.core.SurfaceLayer; class AndroidGraphics implements Graphics { final AndroidGroupLayer rootLayer; private int width, height; private DisplayMetrics displayMetrics; public AndroidGraphics(GameActivity activity) { rootLayer = new AndroidGroupLayer(); displayMetrics = new DisplayMetrics(); activity.getWindowManager().getDefaultDisplay().getMetrics(displayMetrics); } @Override public CanvasImage createImage(int w, int h) { return new AndroidImage(w, h, true); } public CanvasImage createImage(int w, int h, boolean alpha) { return new AndroidImage(w, h, alpha); } @Override public Gradient createLinearGradient(float x0, float y0, float x1, float y1, int[] colors, float[] positions) { LinearGradient gradient = new LinearGradient(x0, y0, x1, y1, colors, positions, TileMode.CLAMP); return new AndroidGradient(gradient); } public forplay.core.Path createPath() { return new AndroidPath(); } @Override public Pattern createPattern(Image img) { Asserts.checkArgument(img instanceof AndroidImage); Bitmap bitmap = ((AndroidImage) img).getBitmap(); BitmapShader shader = new BitmapShader(bitmap, TileMode.REPEAT, TileMode.REPEAT); return new AndroidPattern(shader); } @Override public Gradient createRadialGradient(float x, float y, float r, int[] colors, float[] positions) { RadialGradient gradient = new RadialGradient(x, y, r, colors, positions, TileMode.CLAMP); return new AndroidGradient(gradient); } @Override public int screenHeight() { return displayMetrics.heightPixels; } @Override public int screenWidth() { return displayMetrics.widthPixels; } @Override public CanvasLayer createCanvasLayer(int width, int height) { return new AndroidCanvasLayer(width, height, true); } public CanvasLayer createCanvasLayer(int width, int height, boolean alpha) { return new AndroidCanvasLayer(width, height, alpha); } @Override public GroupLayer createGroupLayer() { return new AndroidGroupLayer(); } @Override public ImageLayer createImageLayer() { return new AndroidImageLayer(); } @Override public ImageLayer createImageLayer(Image image) { return new AndroidImageLayer((AndroidImage) image); } @Override public SurfaceLayer createSurfaceLayer(int width, int height) { return new AndroidSurfaceLayer(width, height); } @Override public int height() { return height; } @Override public GroupLayer rootLayer() { return rootLayer; } @Override public void setSize(int width, int height) { this.width = width; this.height = height; } @Override public int width() { return width; } }