Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1239a7cd authored by Pat Manning's avatar Pat Manning
Browse files

Add support for ImageFilters to paint in APEX.

Bug: 305193969
Test: Manual
Flag: ACONFIG com.android.systemui.enable_vector_cursors DEVELOPMENT
Change-Id: I0e5310c51aea32df304cc28ce1824debfe47af44
parent e9f31666
Loading
Loading
Loading
Loading
+21 −4
Original line number Diff line number Diff line
@@ -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));
}
+14 −0
Original line number Diff line number Diff line
@@ -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:
+1 −0
Original line number Diff line number Diff line
@@ -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;