Loading libs/hwui/CanvasTransform.cpp +12 −13 Original line number Diff line number Diff line Loading @@ -33,35 +33,35 @@ namespace android::uirenderer { SkColor makeLight(SkColor color) { SkColor4f makeLight(SkColor4f color) { Lab lab = sRGBToLab(color); float invertedL = std::min(110 - lab.L, 100.0f); if (invertedL > lab.L) { lab.L = invertedL; return LabToSRGB(lab, SkColorGetA(color)); return LabToSRGB(lab, color.fA); } else { return color; } } SkColor makeDark(SkColor color) { SkColor4f makeDark(SkColor4f color) { Lab lab = sRGBToLab(color); float invertedL = std::min(110 - lab.L, 100.0f); if (invertedL < lab.L) { lab.L = invertedL; return LabToSRGB(lab, SkColorGetA(color)); return LabToSRGB(lab, color.fA); } else { return color; } } SkColor invert(SkColor color) { SkColor4f invert(SkColor4f color) { Lab lab = sRGBToLab(color); lab.L = 100 - lab.L; return LabToSRGB(lab, SkColorGetA(color)); return LabToSRGB(lab, color.fA); } SkColor transformColor(ColorTransform transform, SkColor color) { SkColor4f transformColor(ColorTransform transform, SkColor4f color) { switch (transform) { case ColorTransform::Light: return makeLight(color); Loading @@ -74,7 +74,7 @@ SkColor transformColor(ColorTransform transform, SkColor color) { } } SkColor transformColorInverse(ColorTransform transform, SkColor color) { SkColor4f transformColorInverse(ColorTransform transform, SkColor4f color) { switch (transform) { case ColorTransform::Dark: return makeLight(color); Loading @@ -88,7 +88,7 @@ SkColor transformColorInverse(ColorTransform transform, SkColor color) { static void applyColorTransform(ColorTransform transform, SkPaint& paint) { if (transform == ColorTransform::None) return; SkColor newColor = transformColor(transform, paint.getColor()); SkColor4f newColor = transformColor(transform, paint.getColor4f()); paint.setColor(newColor); if (paint.getShader()) { Loading @@ -102,8 +102,7 @@ static void applyColorTransform(ColorTransform transform, SkPaint& paint) { if (SkAndroidFrameworkUtils::ShaderAsALinearGradient(paint.getShader(), &info) && info.fColorCount <= _colorStorage.size()) { for (int i = 0; i < info.fColorCount; i++) { SkColor transformedColor = transformColor(transform, info.fColors[i].toSkColor()); info.fColors[i] = SkColor4f::FromColor(transformedColor); info.fColors[i] = transformColor(transform, info.fColors[i]); } paint.setShader(SkGradientShader::MakeLinear( info.fPoints, info.fColors, nullptr, info.fColorOffsets, info.fColorCount, Loading @@ -116,8 +115,8 @@ static void applyColorTransform(ColorTransform transform, SkPaint& paint) { SkColor color; // TODO: LRU this or something to avoid spamming new color mode filters if (paint.getColorFilter()->asAColorMode(&color, &mode)) { color = transformColor(transform, color); paint.setColorFilter(SkColorFilters::Blend(color, mode)); SkColor4f transformedColor = transformColor(transform, SkColor4f::FromColor(color)); paint.setColorFilter(SkColorFilters::Blend(transformedColor, nullptr, mode)); } } } Loading libs/hwui/CanvasTransform.h +2 −2 Original line number Diff line number Diff line Loading @@ -45,8 +45,8 @@ bool transformPaint(ColorTransform transform, SkPaint* paint); bool transformPaint(ColorTransform transform, SkPaint* paint, BitmapPalette palette); SkColor transformColor(ColorTransform transform, SkColor color); SkColor transformColorInverse(ColorTransform transform, SkColor color); SkColor4f transformColor(ColorTransform transform, SkColor4f color); SkColor4f transformColorInverse(ColorTransform transform, SkColor4f color); /** Returns a palette corrected in case it is tinted by the given paint's filter */ BitmapPalette filterPalette(const SkPaint* paint, BitmapPalette palette); Loading libs/hwui/ColorArea.cpp +4 −4 Original line number Diff line number Diff line Loading @@ -21,7 +21,7 @@ namespace android::uirenderer { constexpr static int kMinimumAlphaToConsiderArea = 200; constexpr static float kMinimumAlphaToConsiderArea = 200.0f / 255.0f; inline uint64_t calculateArea(int32_t width, int32_t height) { // HWUI doesn't draw anything with negative width or height Loading Loading @@ -49,7 +49,7 @@ void ColorArea::addArea(uint64_t area, const SkPaint& paint) { return; } addArea(area, paint.getColor()); addArea(area, paint.getColor4f()); } void ColorArea::addArea(const SkRect& bounds, const SkPaint& paint, Loading @@ -70,8 +70,8 @@ void ColorArea::addArea(const SkRect& bounds, const SkPaint& paint, } } void ColorArea::addArea(uint64_t area, SkColor color) { if (CC_UNLIKELY(SkColorGetA(color) < kMinimumAlphaToConsiderArea)) return; void ColorArea::addArea(uint64_t area, SkColor4f color) { if (CC_UNLIKELY(color.fA < kMinimumAlphaToConsiderArea)) return; // TODO(b/381930266): optimize by detecting common black/white/grey colors and avoid converting // also maybe cache colors or something? Loading libs/hwui/ColorArea.h +1 −1 Original line number Diff line number Diff line Loading @@ -79,7 +79,7 @@ public: /** * See [addArea(uint64_t, SkPaint&)] */ void addArea(uint64_t area, SkColor color); void addArea(uint64_t area, SkColor4f color); /** * Prefer [addArea(uint64_t, SkPaint&)], unless the area you're measuring doesn't have a paint Loading libs/hwui/RecordingCanvas.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -1253,7 +1253,7 @@ constexpr color_transform_fn colorTransformForOp<DrawRippleDrawable>() { return [](const void* opRaw, ColorTransform transform) { const DrawRippleDrawable* op = reinterpret_cast<const DrawRippleDrawable*>(opRaw); // Ripple drawable needs to contrast against the background, so we need the inverse color. SkColor color = transformColorInverse(transform, op->mParams.color); SkColor4f color = transformColorInverse(transform, op->mParams.color); const_cast<DrawRippleDrawable*>(op)->mParams.color = color; }; } Loading Loading
libs/hwui/CanvasTransform.cpp +12 −13 Original line number Diff line number Diff line Loading @@ -33,35 +33,35 @@ namespace android::uirenderer { SkColor makeLight(SkColor color) { SkColor4f makeLight(SkColor4f color) { Lab lab = sRGBToLab(color); float invertedL = std::min(110 - lab.L, 100.0f); if (invertedL > lab.L) { lab.L = invertedL; return LabToSRGB(lab, SkColorGetA(color)); return LabToSRGB(lab, color.fA); } else { return color; } } SkColor makeDark(SkColor color) { SkColor4f makeDark(SkColor4f color) { Lab lab = sRGBToLab(color); float invertedL = std::min(110 - lab.L, 100.0f); if (invertedL < lab.L) { lab.L = invertedL; return LabToSRGB(lab, SkColorGetA(color)); return LabToSRGB(lab, color.fA); } else { return color; } } SkColor invert(SkColor color) { SkColor4f invert(SkColor4f color) { Lab lab = sRGBToLab(color); lab.L = 100 - lab.L; return LabToSRGB(lab, SkColorGetA(color)); return LabToSRGB(lab, color.fA); } SkColor transformColor(ColorTransform transform, SkColor color) { SkColor4f transformColor(ColorTransform transform, SkColor4f color) { switch (transform) { case ColorTransform::Light: return makeLight(color); Loading @@ -74,7 +74,7 @@ SkColor transformColor(ColorTransform transform, SkColor color) { } } SkColor transformColorInverse(ColorTransform transform, SkColor color) { SkColor4f transformColorInverse(ColorTransform transform, SkColor4f color) { switch (transform) { case ColorTransform::Dark: return makeLight(color); Loading @@ -88,7 +88,7 @@ SkColor transformColorInverse(ColorTransform transform, SkColor color) { static void applyColorTransform(ColorTransform transform, SkPaint& paint) { if (transform == ColorTransform::None) return; SkColor newColor = transformColor(transform, paint.getColor()); SkColor4f newColor = transformColor(transform, paint.getColor4f()); paint.setColor(newColor); if (paint.getShader()) { Loading @@ -102,8 +102,7 @@ static void applyColorTransform(ColorTransform transform, SkPaint& paint) { if (SkAndroidFrameworkUtils::ShaderAsALinearGradient(paint.getShader(), &info) && info.fColorCount <= _colorStorage.size()) { for (int i = 0; i < info.fColorCount; i++) { SkColor transformedColor = transformColor(transform, info.fColors[i].toSkColor()); info.fColors[i] = SkColor4f::FromColor(transformedColor); info.fColors[i] = transformColor(transform, info.fColors[i]); } paint.setShader(SkGradientShader::MakeLinear( info.fPoints, info.fColors, nullptr, info.fColorOffsets, info.fColorCount, Loading @@ -116,8 +115,8 @@ static void applyColorTransform(ColorTransform transform, SkPaint& paint) { SkColor color; // TODO: LRU this or something to avoid spamming new color mode filters if (paint.getColorFilter()->asAColorMode(&color, &mode)) { color = transformColor(transform, color); paint.setColorFilter(SkColorFilters::Blend(color, mode)); SkColor4f transformedColor = transformColor(transform, SkColor4f::FromColor(color)); paint.setColorFilter(SkColorFilters::Blend(transformedColor, nullptr, mode)); } } } Loading
libs/hwui/CanvasTransform.h +2 −2 Original line number Diff line number Diff line Loading @@ -45,8 +45,8 @@ bool transformPaint(ColorTransform transform, SkPaint* paint); bool transformPaint(ColorTransform transform, SkPaint* paint, BitmapPalette palette); SkColor transformColor(ColorTransform transform, SkColor color); SkColor transformColorInverse(ColorTransform transform, SkColor color); SkColor4f transformColor(ColorTransform transform, SkColor4f color); SkColor4f transformColorInverse(ColorTransform transform, SkColor4f color); /** Returns a palette corrected in case it is tinted by the given paint's filter */ BitmapPalette filterPalette(const SkPaint* paint, BitmapPalette palette); Loading
libs/hwui/ColorArea.cpp +4 −4 Original line number Diff line number Diff line Loading @@ -21,7 +21,7 @@ namespace android::uirenderer { constexpr static int kMinimumAlphaToConsiderArea = 200; constexpr static float kMinimumAlphaToConsiderArea = 200.0f / 255.0f; inline uint64_t calculateArea(int32_t width, int32_t height) { // HWUI doesn't draw anything with negative width or height Loading Loading @@ -49,7 +49,7 @@ void ColorArea::addArea(uint64_t area, const SkPaint& paint) { return; } addArea(area, paint.getColor()); addArea(area, paint.getColor4f()); } void ColorArea::addArea(const SkRect& bounds, const SkPaint& paint, Loading @@ -70,8 +70,8 @@ void ColorArea::addArea(const SkRect& bounds, const SkPaint& paint, } } void ColorArea::addArea(uint64_t area, SkColor color) { if (CC_UNLIKELY(SkColorGetA(color) < kMinimumAlphaToConsiderArea)) return; void ColorArea::addArea(uint64_t area, SkColor4f color) { if (CC_UNLIKELY(color.fA < kMinimumAlphaToConsiderArea)) return; // TODO(b/381930266): optimize by detecting common black/white/grey colors and avoid converting // also maybe cache colors or something? Loading
libs/hwui/ColorArea.h +1 −1 Original line number Diff line number Diff line Loading @@ -79,7 +79,7 @@ public: /** * See [addArea(uint64_t, SkPaint&)] */ void addArea(uint64_t area, SkColor color); void addArea(uint64_t area, SkColor4f color); /** * Prefer [addArea(uint64_t, SkPaint&)], unless the area you're measuring doesn't have a paint Loading
libs/hwui/RecordingCanvas.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -1253,7 +1253,7 @@ constexpr color_transform_fn colorTransformForOp<DrawRippleDrawable>() { return [](const void* opRaw, ColorTransform transform) { const DrawRippleDrawable* op = reinterpret_cast<const DrawRippleDrawable*>(opRaw); // Ripple drawable needs to contrast against the background, so we need the inverse color. SkColor color = transformColorInverse(transform, op->mParams.color); SkColor4f color = transformColorInverse(transform, op->mParams.color); const_cast<DrawRippleDrawable*>(op)->mParams.color = color; }; } Loading