Revert "Refactor setting an SkPaint onto a hwui Layer."
This reverts commit e889298cd6
.
Change-Id: I4b1d609b2d4280595d40cb10d6c18875c22999f8
This commit is contained in:
@ -66,7 +66,8 @@ final class HardwareLayer {
|
||||
* @see View#setLayerPaint(android.graphics.Paint)
|
||||
*/
|
||||
public void setLayerPaint(Paint paint) {
|
||||
nSetLayerPaint(mFinalizer.mDeferredUpdater, paint.mNativePaint);
|
||||
nSetLayerPaint(mFinalizer.mDeferredUpdater, paint.mNativePaint,
|
||||
paint.getColorFilter() != null ? paint.getColorFilter().native_instance : 0);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -249,7 +250,7 @@ final class HardwareLayer {
|
||||
private static native void nDestroyLayerUpdater(long layerUpdater);
|
||||
|
||||
private static native boolean nPrepare(long layerUpdater, int width, int height, boolean isOpaque);
|
||||
private static native void nSetLayerPaint(long layerUpdater, long paint);
|
||||
private static native void nSetLayerPaint(long layerUpdater, long paint, long colorFilter);
|
||||
private static native void nSetTransform(long layerUpdater, long matrix);
|
||||
private static native void nSetSurfaceTexture(long layerUpdater,
|
||||
SurfaceTexture surface, boolean isAlreadyAttached);
|
||||
|
@ -88,11 +88,13 @@ static jboolean android_view_HardwareLayer_prepare(JNIEnv* env, jobject clazz,
|
||||
}
|
||||
|
||||
static void android_view_HardwareLayer_setLayerPaint(JNIEnv* env, jobject clazz,
|
||||
jlong layerUpdaterPtr, jlong paintPtr) {
|
||||
jlong layerUpdaterPtr, jlong paintPtr, jlong colorFilterPtr) {
|
||||
DeferredLayerUpdater* layer = reinterpret_cast<DeferredLayerUpdater*>(layerUpdaterPtr);
|
||||
if (layer) {
|
||||
SkPaint* paint = reinterpret_cast<SkPaint*>(paintPtr);
|
||||
SkColorFilter* colorFilter = reinterpret_cast<SkColorFilter*>(colorFilterPtr);
|
||||
layer->setPaint(paint);
|
||||
layer->setColorFilter(colorFilter);
|
||||
}
|
||||
}
|
||||
|
||||
@ -160,7 +162,7 @@ static JNINativeMethod gMethods[] = {
|
||||
{ "nDestroyLayerUpdater", "(J)V", (void*) android_view_HardwareLayer_destroyLayerUpdater },
|
||||
|
||||
{ "nPrepare", "(JIIZ)Z", (void*) android_view_HardwareLayer_prepare },
|
||||
{ "nSetLayerPaint", "(JJ)V", (void*) android_view_HardwareLayer_setLayerPaint },
|
||||
{ "nSetLayerPaint", "(JJJ)V", (void*) android_view_HardwareLayer_setLayerPaint },
|
||||
{ "nSetTransform", "(JJ)V", (void*) android_view_HardwareLayer_setTransform },
|
||||
{ "nSetSurfaceTexture", "(JLandroid/graphics/SurfaceTexture;Z)V",
|
||||
(void*) android_view_HardwareLayer_setSurfaceTexture },
|
||||
|
@ -32,26 +32,24 @@ DeferredLayerUpdater::DeferredLayerUpdater(Layer* layer, OpenGLRenderer* rendere
|
||||
, mRenderer(renderer)
|
||||
, mCaches(Caches::getInstance()) {
|
||||
mCaches.resourceCache.incrementRefcount(mLayer);
|
||||
SkRefCnt_SafeAssign(mColorFilter, mLayer->getColorFilter());
|
||||
mWidth = mLayer->layer.getWidth();
|
||||
mHeight = mLayer->layer.getHeight();
|
||||
mBlend = mLayer->isBlend();
|
||||
mColorFilter = mLayer->getColorFilter();
|
||||
mAlpha = mLayer->getAlpha();
|
||||
mMode = mLayer->getMode();
|
||||
mDirtyRect.setEmpty();
|
||||
}
|
||||
|
||||
DeferredLayerUpdater::~DeferredLayerUpdater() {
|
||||
SkSafeUnref(mColorFilter);
|
||||
setColorFilter(NULL);
|
||||
if (mLayer) {
|
||||
mCaches.resourceCache.decrementRefcount(mLayer);
|
||||
}
|
||||
delete mRenderer;
|
||||
}
|
||||
|
||||
void DeferredLayerUpdater::setPaint(const SkPaint* paint) {
|
||||
OpenGLRenderer::getAlphaAndModeDirect(paint, &mAlpha, &mMode);
|
||||
SkColorFilter* colorFilter = (paint) ? paint->getColorFilter() : NULL;
|
||||
void DeferredLayerUpdater::setColorFilter(SkColorFilter* colorFilter) {
|
||||
SkRefCnt_SafeAssign(mColorFilter, colorFilter);
|
||||
}
|
||||
|
||||
@ -138,10 +136,9 @@ void DeferredLayerUpdater::applyDeferred(DeferredLayerUpdater* deferredApply) {
|
||||
deferredApply->mSurfaceTexture = mSurfaceTexture;
|
||||
deferredApply->mNeedsGLContextAttach = mNeedsGLContextAttach;
|
||||
deferredApply->mUpdateTexImage = mUpdateTexImage;
|
||||
deferredApply->setColorFilter(mColorFilter);
|
||||
deferredApply->setTransform(mTransform);
|
||||
|
||||
SkRefCnt_SafeAssign(deferredApply->mColorFilter, mColorFilter);
|
||||
|
||||
mDisplayList = 0;
|
||||
mDirtyRect.setEmpty();
|
||||
mTransform = 0;
|
||||
|
@ -73,7 +73,11 @@ public:
|
||||
ANDROID_API void setDisplayList(DisplayList* displayList,
|
||||
int left, int top, int right, int bottom);
|
||||
|
||||
ANDROID_API void setPaint(const SkPaint* paint);
|
||||
ANDROID_API void setPaint(const SkPaint* paint) {
|
||||
OpenGLRenderer::getAlphaAndModeDirect(paint, &mAlpha, &mMode);
|
||||
}
|
||||
|
||||
ANDROID_API void setColorFilter(SkColorFilter* colorFilter);
|
||||
|
||||
ANDROID_API bool apply();
|
||||
ANDROID_API void applyDeferred(DeferredLayerUpdater* deferredApply);
|
||||
|
@ -131,9 +131,8 @@ void Layer::removeFbo(bool flush) {
|
||||
}
|
||||
}
|
||||
|
||||
void Layer::setPaint(const SkPaint* paint) {
|
||||
void Layer::setPaint(SkPaint* paint) {
|
||||
OpenGLRenderer::getAlphaAndModeDirect(paint, &alpha, &mode);
|
||||
setColorFilter((paint) ? paint->getColorFilter() : NULL);
|
||||
}
|
||||
|
||||
void Layer::setColorFilter(SkColorFilter* filter) {
|
||||
|
@ -117,7 +117,7 @@ public:
|
||||
texture.height = height;
|
||||
}
|
||||
|
||||
ANDROID_API void setPaint(const SkPaint* paint);
|
||||
ANDROID_API void setPaint(SkPaint* paint);
|
||||
|
||||
inline void setBlend(bool blend) {
|
||||
texture.blend = blend;
|
||||
|
@ -868,11 +868,14 @@ bool OpenGLRenderer::createLayer(float left, float top, float right, float botto
|
||||
|
||||
const bool fboLayer = flags & SkCanvas::kClipToLayer_SaveFlag;
|
||||
|
||||
SkXfermode::Mode mode = getXfermodeDirect(paint);
|
||||
int alpha = getAlphaDirect(paint);
|
||||
|
||||
// Window coordinates of the layer
|
||||
Rect clip;
|
||||
Rect bounds(left, top, right, bottom);
|
||||
calculateLayerBoundsAndClip(bounds, clip, fboLayer);
|
||||
updateSnapshotIgnoreForLayer(bounds, clip, fboLayer, getAlphaDirect(paint));
|
||||
updateSnapshotIgnoreForLayer(bounds, clip, fboLayer, alpha);
|
||||
|
||||
// Bail out if we won't draw in this snapshot
|
||||
if (currentSnapshot()->isIgnored()) {
|
||||
@ -885,11 +888,12 @@ bool OpenGLRenderer::createLayer(float left, float top, float right, float botto
|
||||
return false;
|
||||
}
|
||||
|
||||
layer->setPaint(paint);
|
||||
layer->setAlpha(alpha, mode);
|
||||
layer->layer.set(bounds);
|
||||
layer->texCoords.set(0.0f, bounds.getHeight() / float(layer->getHeight()),
|
||||
bounds.getWidth() / float(layer->getWidth()), 0.0f);
|
||||
|
||||
layer->setColorFilter(getColorFilter(paint));
|
||||
layer->setBlend(true);
|
||||
layer->setDirty(false);
|
||||
|
||||
@ -1007,6 +1011,7 @@ void OpenGLRenderer::composeLayer(const Snapshot& removed, const Snapshot& resto
|
||||
}
|
||||
|
||||
if (!fboLayer && layer->getAlpha() < 255) {
|
||||
// TODO: this seems to point to the fact that the layer should store the paint
|
||||
SkPaint layerPaint;
|
||||
layerPaint.setAlpha(layer->getAlpha());
|
||||
layerPaint.setXfermodeMode(SkXfermode::kDstIn_Mode);
|
||||
|
Reference in New Issue
Block a user