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

Commit 6ba30b85 authored by Behdad Esfahbod's avatar Behdad Esfahbod
Browse files

Add android.Paint that inherits SkPaint

The idea is that extra paint parameters that only affect text layout
(not rendering) will go in android.Paint instead of going into
SkPaintOptionsAndroid.  We will eventually move those out of SkPaint
too.

This is currently implemented in PaintImpl.cpp.  Will be renamed when
current Paint.cpp that has JNI bits is moved to android_graphics_Paint.cpp.

Change-Id: Iba66c34dea5da503a13b9c864cb9f2211ac4ba7d
parent ad88e1b1
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -113,6 +113,7 @@ LOCAL_SRC_FILES:= \
	android/graphics/NinePatchImpl.cpp \
	android/graphics/NinePatchPeeker.cpp \
	android/graphics/Paint.cpp \
	android/graphics/PaintImpl.cpp \
	android/graphics/Path.cpp \
	android/graphics/PathMeasure.cpp \
	android/graphics/PathEffect.cpp \
+2 −1
Original line number Diff line number Diff line
#include "Paint.h"
#include "SkBitmap.h"
#include "SkPixelRef.h"
#include "SkImageEncoder.h"
@@ -676,7 +677,7 @@ static jobject Bitmap_extractAlpha(JNIEnv* env, jobject clazz,
                                   jlong srcHandle, jlong paintHandle,
                                   jintArray offsetXY) {
    const SkBitmap* src = reinterpret_cast<SkBitmap*>(srcHandle);
    const SkPaint* paint = reinterpret_cast<SkPaint*>(paintHandle);
    const android::Paint* paint = reinterpret_cast<android::Paint*>(paintHandle);
    SkIPoint  offset;
    SkBitmap* dst = new SkBitmap;
    JavaPixelAllocator allocator(env);
+21 −20
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ namespace android {

// TODO: move this further up the stack so that all interaction with minikin
//       happens prior to calling into this interface
class Paint;
class TypefaceImpl;

class Canvas {
@@ -60,7 +61,7 @@ public:
    virtual void restoreToCount(int saveCount) = 0;

    virtual int saveLayer(float left, float top, float right, float bottom,
                const SkPaint* paint, SkCanvas::SaveFlags flags) = 0;
                const Paint* paint, SkCanvas::SaveFlags flags) = 0;
    virtual int saveLayerAlpha(float left, float top, float right, float bottom,
            int alpha, SkCanvas::SaveFlags flags) = 0;

@@ -90,47 +91,47 @@ public:
// Canvas draw operations
// ----------------------------------------------------------------------------
    virtual void drawColor(int color, SkXfermode::Mode mode) = 0;
    virtual void drawPaint(const SkPaint& paint) = 0;
    virtual void drawPaint(const Paint& paint) = 0;

    // Geometry
    virtual void drawPoint(float x, float y, const SkPaint& paint) = 0;
    virtual void drawPoints(const float* points, int count, const SkPaint& paint) = 0;
    virtual void drawPoint(float x, float y, const Paint& paint) = 0;
    virtual void drawPoints(const float* points, int count, const Paint& paint) = 0;
    virtual void drawLine(float startX, float startY, float stopX, float stopY,
                const SkPaint& paint) = 0;
    virtual void drawLines(const float* points, int count, const SkPaint& paint) = 0;
                const Paint& paint) = 0;
    virtual void drawLines(const float* points, int count, const Paint& paint) = 0;
    virtual void drawRect(float left, float top, float right, float bottom,
            const SkPaint& paint) = 0;
            const Paint& paint) = 0;
    virtual void drawRoundRect(float left, float top, float right, float bottom,
            float rx, float ry, const SkPaint& paint) = 0;
    virtual void drawCircle(float x, float y, float radius, const SkPaint& paint) = 0;
            float rx, float ry, const Paint& paint) = 0;
    virtual void drawCircle(float x, float y, float radius, const Paint& paint) = 0;
    virtual void drawOval(float left, float top, float right, float bottom,
            const SkPaint& paint) = 0;
            const Paint& paint) = 0;
    virtual void drawArc(float left, float top, float right, float bottom,
            float startAngle, float sweepAngle, bool useCenter, const SkPaint& paint) = 0;
    virtual void drawPath(const SkPath& path, const SkPaint& paint) = 0;
            float startAngle, float sweepAngle, bool useCenter, const Paint& paint) = 0;
    virtual void drawPath(const SkPath& path, const Paint& paint) = 0;
    virtual void drawVertices(SkCanvas::VertexMode vertexMode, int vertexCount,
                              const float* verts, const float* tex, const int* colors,
                              const uint16_t* indices, int indexCount, const SkPaint& paint) = 0;
                              const uint16_t* indices, int indexCount, const Paint& paint) = 0;

    // Bitmap-based
    virtual void drawBitmap(const SkBitmap& bitmap, float left, float top,
            const SkPaint* paint) = 0;
            const Paint* paint) = 0;
    virtual void drawBitmap(const SkBitmap& bitmap, const SkMatrix& matrix,
            const SkPaint* paint) = 0;
            const Paint* paint) = 0;
    virtual void drawBitmap(const SkBitmap& bitmap, float srcLeft, float srcTop,
            float srcRight, float srcBottom, float dstLeft, float dstTop,
            float dstRight, float dstBottom, const SkPaint* paint) = 0;
            float dstRight, float dstBottom, const Paint* paint) = 0;
    virtual void drawBitmapMesh(const SkBitmap& bitmap, int meshWidth, int meshHeight,
            const float* vertices, const int* colors, const SkPaint* paint) = 0;
            const float* vertices, const int* colors, const Paint* paint) = 0;

    // Text
    virtual void drawText(const uint16_t* text, int start, int count, int contextCount,
            float x, float y, int bidiFlags, const SkPaint& paint,
            float x, float y, int bidiFlags, const Paint& paint,
            TypefaceImpl* typeface) = 0;
    virtual void drawPosText(const uint16_t* text, const float* positions, int count,
            int posCount, const SkPaint& paint) = 0;
            int posCount, const Paint& paint) = 0;
    virtual void drawTextOnPath(const uint16_t* glyphs, int count, const SkPath& path,
            float hOffset, float vOffset, const SkPaint& paint) = 0;
            float hOffset, float vOffset, const Paint& paint) = 0;
};

}; // namespace android
+2 −1
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

#include "jni.h"
#include "GraphicsJNI.h"
#include "Paint.h"
#include <android_runtime/AndroidRuntime.h>

#include <utils/RefBase.h>
@@ -32,7 +33,7 @@ static jlong createFloat(JNIEnv* env, jobject clazz, jfloat initialValue) {
}

static jlong createPaint(JNIEnv* env, jobject clazz, jlong paintPtr) {
    const SkPaint* paint = reinterpret_cast<const SkPaint*>(paintPtr);
    const Paint* paint = reinterpret_cast<const Paint*>(paintPtr);
    return reinterpret_cast<jlong>(new CanvasPropertyPaint(*paint));
}

+2 −2
Original line number Diff line number Diff line
@@ -370,12 +370,12 @@ SkCanvas* GraphicsJNI::getNativeCanvas(JNIEnv* env, jobject canvas) {
    return c;
}

SkPaint* GraphicsJNI::getNativePaint(JNIEnv* env, jobject paint) {
android::Paint* GraphicsJNI::getNativePaint(JNIEnv* env, jobject paint) {
    SkASSERT(env);
    SkASSERT(paint);
    SkASSERT(env->IsInstanceOf(paint, gPaint_class));
    jlong paintHandle = env->GetLongField(paint, gPaint_nativeInstanceID);
    SkPaint* p = reinterpret_cast<SkPaint*>(paintHandle);
    android::Paint* p = reinterpret_cast<android::Paint*>(paintHandle);
    SkASSERT(p);
    return p;
}
Loading