diff options
-rw-r--r-- | libs/hwui/apex/android_paint.cpp | 25 | ||||
-rw-r--r-- | libs/hwui/apex/include/android/graphics/paint.h | 14 | ||||
-rw-r--r-- | libs/hwui/libhwui.map.txt | 1 |
3 files changed, 36 insertions, 4 deletions
diff --git a/libs/hwui/apex/android_paint.cpp b/libs/hwui/apex/android_paint.cpp index cc79cba5e19c..5e73e7628568 100644 --- a/libs/hwui/apex/android_paint.cpp +++ b/libs/hwui/apex/android_paint.cpp @@ -14,12 +14,13 @@ * limitations under the License. */ -#include "android/graphics/paint.h" +#include <SkBlendMode.h> +#include <SkImageFilter.h> +#include <hwui/Paint.h> #include "TypeCast.h" - -#include <hwui/Paint.h> -#include <SkBlendMode.h> +#include "android/graphics/paint.h" +#include "include/effects/SkImageFilters.h" using namespace android; @@ -43,6 +44,22 @@ static SkBlendMode convertBlendMode(ABlendMode blendMode) { } } +static sk_sp<SkImageFilter> convertImageFilter(AImageFilter imageFilter) { + switch (imageFilter) { + case AIMAGE_FILTER_DROP_SHADOW_FOR_POINTER_ICON: + // Material Elevation Level 1 Drop Shadow. + sk_sp<SkImageFilter> key_shadow = SkImageFilters::DropShadow( + 0.0f, 1.0f, 2.0f, 2.0f, SkColorSetARGB(0x4D, 0x00, 0x00, 0x00), nullptr); + sk_sp<SkImageFilter> ambient_shadow = SkImageFilters::DropShadow( + 0.0f, 1.0f, 3.0f, 3.0f, SkColorSetARGB(0x26, 0x00, 0x00, 0x00), nullptr); + return SkImageFilters::Compose(ambient_shadow, key_shadow); + } +} + void APaint_setBlendMode(APaint* paint, ABlendMode blendMode) { TypeCast::toPaint(paint)->setBlendMode(convertBlendMode(blendMode)); } + +void APaint_setImageFilter(APaint* paint, AImageFilter imageFilter) { + TypeCast::toPaint(paint)->setImageFilter(convertImageFilter(imageFilter)); +} diff --git a/libs/hwui/apex/include/android/graphics/paint.h b/libs/hwui/apex/include/android/graphics/paint.h index 058db8d37619..36b7575d585d 100644 --- a/libs/hwui/apex/include/android/graphics/paint.h +++ b/libs/hwui/apex/include/android/graphics/paint.h @@ -26,6 +26,14 @@ __BEGIN_DECLS */ typedef struct APaint APaint; +/** + * Predefined Image filter type. + */ +enum AImageFilter { + /** Drop shadow image filter for PointerIcons. */ + AIMAGE_FILTER_DROP_SHADOW_FOR_POINTER_ICON = 0, +}; + /** Bitmap pixel format. */ enum ABlendMode { /** replaces destination with zero: fully transparent */ @@ -42,6 +50,8 @@ ANDROID_API void APaint_destroyPaint(APaint* paint); ANDROID_API void APaint_setBlendMode(APaint* paint, ABlendMode blendMode); +ANDROID_API void APaint_setImageFilter(APaint* paint, AImageFilter imageFilter); + __END_DECLS #ifdef __cplusplus @@ -54,6 +64,10 @@ namespace graphics { void setBlendMode(ABlendMode blendMode) { APaint_setBlendMode(mPaint, blendMode); } + void setImageFilter(AImageFilter imageFilter) { + APaint_setImageFilter(mPaint, imageFilter); + } + const APaint& get() const { return *mPaint; } private: diff --git a/libs/hwui/libhwui.map.txt b/libs/hwui/libhwui.map.txt index fdb237387098..d03ceb471d6c 100644 --- a/libs/hwui/libhwui.map.txt +++ b/libs/hwui/libhwui.map.txt @@ -32,6 +32,7 @@ LIBHWUI { # platform-only /* HWUI isn't current a module, so all of these are st APaint_createPaint; APaint_destroyPaint; APaint_setBlendMode; + APaint_setImageFilter; ARegionIterator_acquireIterator; ARegionIterator_releaseIterator; ARegionIterator_isComplex; |