提交 2d8240aa 编写于 作者: V Viktor Lidholt

Adds support for transfer mode in Paint and SpriteNode classes. Adds support...

Adds support for transfer mode in Paint and SpriteNode classes. Adds support for opacity in sprites, and modifies example game.

R=eseidel@chromium.org

Review URL: https://codereview.chromium.org/1164633004
上级 ab909941
......@@ -37,4 +37,9 @@ void Paint::setMaskFilter(MaskFilter* filter)
m_paint.setMaskFilter(filter->filter());
}
void Paint::setTransferMode(SkXfermode::Mode transfer_mode)
{
m_paint.setXfermodeMode(transfer_mode);
}
} // namespace blink
......@@ -6,6 +6,7 @@
#define SKY_ENGINE_CORE_PAINTING_PAINT_H_
#include "sky/engine/core/painting/CanvasColor.h"
#include "sky/engine/core/painting/TransferMode.h"
#include "sky/engine/tonic/dart_wrappable.h"
#include "sky/engine/wtf/PassRefPtr.h"
#include "sky/engine/wtf/RefCounted.h"
......@@ -43,6 +44,8 @@ public:
const SkPaint& paint() const { return m_paint; }
void setPaint(const SkPaint& paint) { m_paint = paint; }
void setTransferMode(SkXfermode::Mode transfer_mode);
private:
Paint();
......
......@@ -13,4 +13,5 @@
void setDrawLooper(DrawLooper looper);
void setColorFilter(ColorFilter filter);
void setMaskFilter(MaskFilter filter);
void setTransferMode(TransferMode transferMode);
};
......@@ -66,6 +66,8 @@ class GameWorld extends TransformNode {
SpriteNode sprt = new SpriteNode.withImage(_image);
sprt.width = radius*2;
sprt.height = radius*2;
sprt.colorOverlay = new Color(0x33ff0000);
sprt.transferMode = TransferMode.plusMode;
body.userData = sprt;
this.children.add(sprt);
}
......
......@@ -6,6 +6,9 @@ class SpriteNode extends TransformNode {
Image _image;
bool constrainProportions = false;
double _opacity = 1.0;
Color colorOverlay;
TransferMode transferMode;
SpriteNode() {
this.pivot = new Vector2(0.5, 0.5);
......@@ -15,7 +18,14 @@ class SpriteNode extends TransformNode {
this.pivot = new Vector2(0.5, 0.5);
_image = image;
}
double get opacity => _opacity;
void set opacity(double opacity) {
assert(opacity >= 0.0 && opacity <= 1.0);
_opacity = opacity;
}
void paint(PictureRecorder canvas) {
if (_image != null && _image.width > 0 && _image.height > 0) {
......@@ -37,7 +47,18 @@ class SpriteNode extends TransformNode {
}
canvas.scale(scaleX, scaleY);
canvas.drawImage(_image, 0.0, 0.0, new Paint()..setARGB(255, 255, 255, 255));
// Setup paint object for opacity and transfer mode
Paint paint = new Paint();
paint.setARGB((255.0*_opacity).toInt(), 255, 255, 255);
if (colorOverlay != null) {
paint.setColorFilter(new ColorFilter(colorOverlay, TransferMode.srcATopMode));
}
if (transferMode != null) {
paint.setTransferMode(transferMode);
}
canvas.drawImage(_image, 0.0, 0.0, paint);
canvas.restore();
}
else {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册