Image improvements, compile fix

This commit is contained in:
Joshua Granick
2014-08-03 15:30:46 -07:00
parent 9a87e17f60
commit 40c5065569
3 changed files with 92 additions and 48 deletions

View File

@@ -39,27 +39,20 @@ class Image {
public var rect (get, null):Rectangle;
public var src (get, set):Dynamic;
public var transparent (get, set):Bool;
public var type:ImageType;
public var width:Int;
private var __type:DataStoreType;
public function new (buffer:ImageBuffer = null, offsetX:Int = 0, offsetY:Int = 0, width:Int = 0, height:Int = 0, color:Null<Int> = null, type:ImageType = null) {
public function new (buffer:ImageBuffer, context:RenderContext = null) {
this.offsetX = offsetX;
this.offsetY = offsetY;
this.width = width;
this.height = height;
this.buffer = buffer;
if (type == null) {
if (context == null) {
context = Application.__instance.window.currentRenderer.context;
}
width = buffer.width;
height = buffer.height;
offsetX = 0;
offsetY = 0;
__type = switch (context) {
this.type = switch (Application.__instance.window.currentRenderer.context) {
case DOM (_), CANVAS (_): CANVAS;
case FLASH (_): FLASH;
@@ -67,6 +60,35 @@ class Image {
}
} else {
this.type = type;
}
if (buffer == null) {
if (width > 0 && height > 0) {
this.buffer = new ImageBuffer (new UInt8Array (width * height * 4), width, height);
if (color != null) {
fillRect (new Rectangle (0, 0, width, height), color);
}
}
} else {
this.buffer = buffer;
if (width == 0) this.width = buffer.width;
if (height == 0) this.height = buffer.height;
}
}
@@ -76,14 +98,7 @@ class Image {
ImageCanvasUtil.sync (this);
#end
var image = new Image (buffer.clone (), null);
image.__type = __type;
image.width = width;
image.height = height;
image.offsetX = offsetX;
image.offsetY = offsetY;
var image = new Image (buffer.clone (), offsetX, offsetY, width, height, null, type);
return image;
}
@@ -94,7 +109,7 @@ class Image {
rect = __clipRect (rect);
if (buffer == null || rect == null) return;
switch (__type) {
switch (type) {
case CANVAS:
@@ -113,6 +128,8 @@ class Image {
rect.offset (offsetX, offsetY);
buffer.__srcBitmapData.colorTransform (rect.__toFlashRectangle (), colorMatrix.__toFlashColorTransform ());
default:
}
}
@@ -128,7 +145,7 @@ class Image {
if (sourceRect.x + sourceRect.width > sourceImage.width) sourceRect.width = sourceImage.width - sourceRect.x;
if (sourceRect.y + sourceRect.height > sourceImage.height) sourceRect.height = sourceImage.height - sourceRect.y;
switch (__type) {
switch (type) {
case CANVAS:
@@ -163,6 +180,8 @@ class Image {
buffer.__srcBitmapData.copyChannel (sourceImage.buffer.src, sourceRect.__toFlashRectangle (), destPoint.__toFlashPoint (), srcChannel, dstChannel);
default:
}
}
@@ -176,7 +195,7 @@ class Image {
if (sourceRect.y + sourceRect.height > sourceImage.height) sourceRect.height = sourceImage.height - sourceRect.y;
if (sourceRect.width <= 0 || sourceRect.height <= 0) return;
switch (__type) {
switch (type) {
case CANVAS:
@@ -203,6 +222,8 @@ class Image {
buffer.__srcBitmapData.copyPixels (sourceImage.buffer.__srcBitmapData, sourceRect.__toFlashRectangle (), destPoint.__toFlashPoint (), alphaImage != null ? alphaImage.buffer.src : null, alphaPoint != null ? alphaPoint.__toFlashPoint () : null, mergeAlpha);
default:
}
}
@@ -213,7 +234,7 @@ class Image {
rect = __clipRect (rect);
if (buffer == null || rect == null) return;
switch (__type) {
switch (type) {
case CANVAS:
@@ -232,6 +253,8 @@ class Image {
rect.offset (offsetX, offsetY);
buffer.__srcBitmapData.fillRect (rect.__toFlashRectangle (), color);
default:
}
}
@@ -241,7 +264,7 @@ class Image {
if (buffer == null) return;
switch (__type) {
switch (type) {
case CANVAS:
@@ -259,6 +282,8 @@ class Image {
buffer.__srcBitmapData.floodFill (x + offsetX, y + offsetY, color);
default:
}
}
@@ -342,7 +367,7 @@ class Image {
if (buffer == null || x < 0 || y < 0 || x >= width || y >= height) return 0;
switch (__type) {
switch (type) {
case CANVAS:
@@ -360,6 +385,10 @@ class Image {
return buffer.__srcBitmapData.getPixel (x + offsetX, y + offsetY);
default:
return 0;
}
}
@@ -369,7 +398,7 @@ class Image {
if (buffer == null || x < 0 || y < 0 || x >= width || y >= height) return 0;
switch (__type) {
switch (type) {
case CANVAS:
@@ -387,6 +416,10 @@ class Image {
return buffer.__srcBitmapData.getPixel32 (x + offsetX, y + offsetY);
default:
return 0;
}
}
@@ -396,7 +429,7 @@ class Image {
if (buffer == null || x < 0 || y < 0 || x >= width || y >= height) return;
switch (__type) {
switch (type) {
case CANVAS:
@@ -414,6 +447,8 @@ class Image {
buffer.__srcBitmapData.setPixel (x + offsetX, y + offsetX, color);
default:
}
}
@@ -423,7 +458,7 @@ class Image {
if (buffer == null || x < 0 || y < 0 || x >= width || y >= height) return;
switch (__type) {
switch (type) {
case CANVAS:
@@ -441,6 +476,8 @@ class Image {
buffer.__srcBitmapData.setPixel32 (x + offsetX, y + offsetY, color);
default:
}
}
@@ -548,7 +585,7 @@ class Image {
}
switch (__type) {
switch (type) {
case CANVAS:
@@ -569,6 +606,7 @@ class Image {
buffer.height = newHeight;
#end
default:
}
}
@@ -589,7 +627,7 @@ class Image {
if (value && !buffer.premultiplied) {
switch (__type) {
switch (type) {
case DATA:
@@ -603,7 +641,7 @@ class Image {
} else if (!value && buffer.premultiplied) {
switch (__type) {
switch (type) {
case DATA:
@@ -674,15 +712,6 @@ class Image {
}
private enum DataStoreType {
CANVAS;
DATA;
FLASH;
}
enum ImageChannel {
RED;

View File

@@ -0,0 +1,11 @@
package lime.graphics;
enum ImageType {
CANVAS;
DATA;
FLASH;
CUSTOM;
}

View File

@@ -116,7 +116,8 @@ abstract ColorMatrix(Float32Array) from Float32Array to Float32Array {
private inline function set_alphaMultiplier (value:Float):Float {
return this[18] = value;
this[18] = value;
return value;
}
@@ -145,7 +146,8 @@ abstract ColorMatrix(Float32Array) from Float32Array to Float32Array {
private inline function set_blueMultiplier (value:Float):Float {
return this[12] = value;
this[12] = value;
return value;
}
@@ -196,7 +198,8 @@ abstract ColorMatrix(Float32Array) from Float32Array to Float32Array {
private inline function set_greenMultiplier (value:Float):Float {
return this[6] = value;
this[6] = value;
return value;
}
@@ -225,7 +228,8 @@ abstract ColorMatrix(Float32Array) from Float32Array to Float32Array {
private inline function set_redMultiplier (value:Float):Float {
return this[0] = value;
this[0] = value;
return value;
}