/**
* 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.flash;
import com.google.gwt.canvas.dom.client.CssColor;
import flash.display.StageScaleMode;
import flash.display.Sprite;
import forplay.core.Asserts;
import forplay.core.ForPlay;
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.Path;
import forplay.core.Pattern;
import forplay.core.SurfaceLayer;
class FlashGraphics implements Graphics {
static CssColor cssColor(int color) {
return CssColor.make(cssColorString(color));
}
static String cssColorString(int color) {
double a = ((color >> 24) & 0xff) / 255.0;
int r = (color >> 16) & 0xff;
int g = (color >> 8) & 0xff;
int b = (color >> 0) & 0xff;
return "rgba(" + r + "," + g + "," + b + "," + a + ")";
}
protected FlashGraphics() {
rootLayer = FlashGroupLayer.getRoot();
setSize (screenWidth(), screenHeight());
Sprite.getRootSprite().getStage().setScaleMode(StageScaleMode.EXACT_FIT);
ForPlay.log().info("Graphics System Initialized: Dimensions ("
+ screenWidth() + " x " + screenHeight() + ")");
}
FlashGroupLayer rootLayer;
@Override
public GroupLayer rootLayer() {
return rootLayer;
}
@Override
public CanvasLayer createCanvasLayer(int width, int height) {
return new FlashCanvasLayer(width, height);
}
@Override
public GroupLayer createGroupLayer() {
return new FlashGroupLayer();
}
@Override
public SurfaceLayer createSurfaceLayer(int width, int height) {
return new FlashSurfaceLayer(width, height);
}
@Override
public ImageLayer createImageLayer(Image image) {
return new FlashImageLayer(image);
}
@Override
public CanvasImage createImage(int w, int h) {
FlashCanvas surface = new FlashCanvas(w, h, null);
return new FlashCanvasImage(surface);
}
@Override
public Gradient createLinearGradient(float x0, float y0, float x1, float y1,
int[] colors, float[] positions) {
Asserts.checkArgument(colors.length == positions.length);
return new FlashGradient();
}
@Override
public Path createPath() {
return new FlashPath();
}
@Override
public Pattern createPattern(Image img) {
Asserts.checkArgument(img instanceof FlashImage);
return new FlashPattern(img);
}
@Override
public Gradient createRadialGradient(float x, float y, float r, int[] colors,
float[] positions) {
Asserts.checkArgument(colors.length == positions.length);
return new FlashGradient();
}
@Override
public int screenHeight() {
return Sprite.getRootSprite().getStage().getStageHeight();
}
@Override
public int screenWidth() {
return Sprite.getRootSprite().getStage().getStageWidth();
}
@Override
public int width() {
return Sprite.getRootSprite().getWidth();
}
@Override
public int height() {
return Sprite.getRootSprite().getHeight();
}
@Override
public void setSize(int width, int height) {
ForPlay.log().info("Setting size " + width + "x" + height);
Sprite.getRootSprite().setWidth(width);
Sprite.getRootSprite().setHeight(height);
}
public void updateLayers() {
rootLayer.update();
}
/* (non-Javadoc)
* @see forplay.core.Graphics#createImageLayer()
*/
@Override
public ImageLayer createImageLayer() {
return new FlashImageLayer();
}
}