[aseprite] 162/250: Implement SkiaSurface::setDrawMode()
Tobias Hansen
thansen at moszumanska.debian.org
Sun Dec 20 15:27:24 UTC 2015
This is an automated email from the git hooks/post-receive script.
thansen pushed a commit to branch master
in repository aseprite.
commit 0a1f492c240abad1903d22fa5dd5d8fe1c54e8d6
Author: David Capello <davidcapello at gmail.com>
Date: Tue Oct 13 18:44:31 2015 -0300
Implement SkiaSurface::setDrawMode()
---
src/she/skia/skia_surface.h | 72 +++++++++++++++++++++++++++++++--------------
1 file changed, 50 insertions(+), 22 deletions(-)
diff --git a/src/she/skia/skia_surface.h b/src/she/skia/skia_surface.h
index cc01676..1bc499e 100644
--- a/src/she/skia/skia_surface.h
+++ b/src/she/skia/skia_surface.h
@@ -118,7 +118,41 @@ public:
}
void setDrawMode(DrawMode mode, int param) override {
- // TODO
+ switch (mode) {
+ case DrawMode::Solid:
+ m_paint.setXfermodeMode(SkXfermode::kSrcOver_Mode);
+ m_paint.setShader(nullptr);
+ break;
+ case DrawMode::Xor:
+ m_paint.setXfermodeMode(SkXfermode::kXor_Mode);
+ m_paint.setShader(nullptr);
+ break;
+ case DrawMode::Checked: {
+ m_paint.setXfermodeMode(SkXfermode::kSrcOver_Mode);
+ {
+ SkBitmap bitmap;
+ bitmap.tryAllocPixels(SkImageInfo::MakeN32Premul(8, 8));
+ {
+ bitmap.lockPixels();
+ SkPMColor bg = SkPreMultiplyARGB(255, 0, 0, 0);
+ SkPMColor fg = SkPreMultiplyARGB(255, 255, 255, 255);
+ int offset = 7 - (param & 7);
+ for (int y=0; y<8; y++)
+ for (int x=0; x<8; x++)
+ *bitmap.getAddr32(x, y) = (((x+y+offset)&7) < 4 ? fg: bg);
+ bitmap.unlockPixels();
+ }
+
+ SkAutoTUnref<SkShader> shader(
+ SkShader::CreateBitmapShader(
+ bitmap,
+ SkShader::kRepeat_TileMode,
+ SkShader::kRepeat_TileMode, nullptr));
+ m_paint.setShader(shader);
+ }
+ break;
+ }
+ }
}
LockedSurface* lock() override {
@@ -252,48 +286,41 @@ public:
}
void putPixel(gfx::Color color, int x, int y) override {
- SkPaint paint;
- paint.setColor(to_skia(color));
- m_canvas->drawPoint(SkIntToScalar(x), SkIntToScalar(y), paint);
+ m_paint.setColor(to_skia(color));
+ m_canvas->drawPoint(SkIntToScalar(x), SkIntToScalar(y), m_paint);
}
void drawHLine(gfx::Color color, int x, int y, int w) override {
- SkPaint paint;
- paint.setColor(to_skia(color));
+ m_paint.setColor(to_skia(color));
m_canvas->drawLine(
SkIntToScalar(x), SkIntToScalar(y),
- SkIntToScalar(x+w), SkIntToScalar(y), paint);
+ SkIntToScalar(x+w), SkIntToScalar(y), m_paint);
}
void drawVLine(gfx::Color color, int x, int y, int h) override {
- SkPaint paint;
- paint.setColor(to_skia(color));
+ m_paint.setColor(to_skia(color));
m_canvas->drawLine(
SkIntToScalar(x), SkIntToScalar(y),
- SkIntToScalar(x), SkIntToScalar(y+h), paint);
+ SkIntToScalar(x), SkIntToScalar(y+h), m_paint);
}
void drawLine(gfx::Color color, const gfx::Point& a, const gfx::Point& b) override {
- SkPaint paint;
- paint.setColor(to_skia(color));
+ m_paint.setColor(to_skia(color));
m_canvas->drawLine(
SkIntToScalar(a.x), SkIntToScalar(a.y),
- SkIntToScalar(b.x), SkIntToScalar(b.y), paint);
+ SkIntToScalar(b.x), SkIntToScalar(b.y), m_paint);
}
void drawRect(gfx::Color color, const gfx::Rect& rc) override {
- SkPaint paint;
- paint.setColor(to_skia(color));
- paint.setStyle(SkPaint::kStroke_Style);
- m_canvas->drawIRect(to_skia(gfx::Rect(rc.x, rc.y, rc.w-1, rc.h-1)), paint);
+ m_paint.setColor(to_skia(color));
+ m_paint.setStyle(SkPaint::kStroke_Style);
+ m_canvas->drawIRect(to_skia(gfx::Rect(rc.x, rc.y, rc.w-1, rc.h-1)), m_paint);
}
void fillRect(gfx::Color color, const gfx::Rect& rc) override {
- SkPaint paint;
- paint.setColor(to_skia(color));
- paint.setStyle(SkPaint::kFill_Style);
- paint.setXfermodeMode(SkXfermode::kSrcOver_Mode);
- m_canvas->drawIRect(to_skia(rc), paint);
+ m_paint.setColor(to_skia(color));
+ m_paint.setStyle(SkPaint::kFill_Style);
+ m_canvas->drawIRect(to_skia(rc), m_paint);
}
void blitTo(LockedSurface* dest, int srcx, int srcy, int dstx, int dsty, int width, int height) const override {
@@ -449,6 +476,7 @@ private:
SkBitmap m_bitmap;
SkSurface* m_surface;
SkCanvas* m_canvas;
+ SkPaint m_paint;
gfx::Rect m_clip;
};
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/aseprite.git
More information about the Pkg-games-commits
mailing list