/** * Copyright 2010 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.java; import forplay.core.Asserts; 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.Path; import forplay.core.Pattern; import forplay.core.CanvasImage; import forplay.core.SurfaceLayer; import java.awt.Component; import java.awt.Dimension; import java.awt.image.BufferedImage; import javax.swing.JFrame; class JavaGraphics implements Graphics { private final Component component; private final JavaGroupLayer rootLayer; private final JFrame frame; JavaGraphics(JFrame frame, Component component) { this.frame = frame; this.component = component; this.rootLayer = new JavaGroupLayer(); } @Override public CanvasLayer createCanvasLayer(int width, int height) { return new JavaCanvasLayer(width, height); } @Override public GroupLayer createGroupLayer() { return new JavaGroupLayer(); } @Override public ImageLayer createImageLayer() { return new JavaImageLayer(); } @Override public ImageLayer createImageLayer(Image image) { Asserts.checkArgument(image instanceof JavaImage); return new JavaImageLayer((JavaImage) image); } @Override public SurfaceLayer createSurfaceLayer(int width, int height) { return new JavaSurfaceLayer(width, height); } @Override public JavaGroupLayer rootLayer() { return rootLayer; } @Override public CanvasImage createImage(int w, int h) { return new JavaImage(new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB)); } @Override public Gradient createLinearGradient(float x0, float y0, float x1, float y1, int[] colors, float[] positions) { return JavaGradient.createLinear(x0, y0, x1, y1, positions, colors); } @Override public Path createPath() { return new JavaPath(); } @Override public Pattern createPattern(Image img) { return JavaPattern.create((JavaImage) img); } @Override public Gradient createRadialGradient(float x, float y, float r, int[] colors, float[] positions) { return JavaGradient.createRadial(x, y, r, positions, colors); } @Override public int screenWidth() { // TODO: Do we actually want to return the true screen width? return component.getWidth(); } @Override public int screenHeight() { // TODO: Do we actually want to return the true screen height? return component.getHeight(); } @Override public int width() { return component.getWidth(); } @Override public int height() { return component.getHeight(); } @Override public void setSize(int width, int height) { component.setPreferredSize(new Dimension(width, height)); frame.pack(); } }