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

Commit 0eef10e5 authored by Derek Sollenberger's avatar Derek Sollenberger Committed by Android (Google) Code Review
Browse files

Merge "Update Canvas API with view system calls."

parents b3187cc6 6f485569
Loading
Loading
Loading
Loading
+12 −17
Original line number Diff line number Diff line
@@ -27,13 +27,8 @@
#include <SkBitmap.h>
#include <SkRegion.h>

#if HWUI_NEW_OPS
#include <RecordingCanvas.h>
typedef android::uirenderer::RecordingCanvas canvas_t;
#else
#include <DisplayListCanvas.h>
typedef android::uirenderer::DisplayListCanvas canvas_t;
#endif

#include <Canvas.h>
#include <Rect.h>
#include <RenderNode.h>
#include <CanvasProperty.h>
@@ -52,7 +47,7 @@ using namespace uirenderer;

static void android_view_DisplayListCanvas_insertReorderBarrier(JNIEnv* env, jobject clazz,
        jlong canvasPtr, jboolean reorderEnable) {
    canvas_t* canvas = reinterpret_cast<canvas_t*>(canvasPtr);
    Canvas* canvas = reinterpret_cast<Canvas*>(canvasPtr);
    canvas->insertReorderBarrier(reorderEnable);
}

@@ -62,7 +57,7 @@ static void android_view_DisplayListCanvas_insertReorderBarrier(JNIEnv* env, job

static void android_view_DisplayListCanvas_callDrawGLFunction(JNIEnv* env, jobject clazz,
        jlong canvasPtr, jlong functorPtr) {
    canvas_t* canvas = reinterpret_cast<canvas_t*>(canvasPtr);
    Canvas* canvas = reinterpret_cast<Canvas*>(canvasPtr);
    Functor* functor = reinterpret_cast<Functor*>(functorPtr);
    canvas->callDrawGLFunction(functor);
}
@@ -92,7 +87,7 @@ static jint android_view_DisplayListCanvas_getMaxTextureHeight(JNIEnv* env, jobj
static void android_view_DisplayListCanvas_drawRoundRectProps(JNIEnv* env, jobject clazz,
        jlong canvasPtr, jlong leftPropPtr, jlong topPropPtr, jlong rightPropPtr,
        jlong bottomPropPtr, jlong rxPropPtr, jlong ryPropPtr, jlong paintPropPtr) {
    canvas_t* canvas = reinterpret_cast<canvas_t*>(canvasPtr);
    Canvas* canvas = reinterpret_cast<Canvas*>(canvasPtr);
    CanvasPropertyPrimitive* leftProp = reinterpret_cast<CanvasPropertyPrimitive*>(leftPropPtr);
    CanvasPropertyPrimitive* topProp = reinterpret_cast<CanvasPropertyPrimitive*>(topPropPtr);
    CanvasPropertyPrimitive* rightProp = reinterpret_cast<CanvasPropertyPrimitive*>(rightPropPtr);
@@ -105,7 +100,7 @@ static void android_view_DisplayListCanvas_drawRoundRectProps(JNIEnv* env, jobje

static void android_view_DisplayListCanvas_drawCircleProps(JNIEnv* env, jobject clazz,
        jlong canvasPtr, jlong xPropPtr, jlong yPropPtr, jlong radiusPropPtr, jlong paintPropPtr) {
    canvas_t* canvas = reinterpret_cast<canvas_t*>(canvasPtr);
    Canvas* canvas = reinterpret_cast<Canvas*>(canvasPtr);
    CanvasPropertyPrimitive* xProp = reinterpret_cast<CanvasPropertyPrimitive*>(xPropPtr);
    CanvasPropertyPrimitive* yProp = reinterpret_cast<CanvasPropertyPrimitive*>(yPropPtr);
    CanvasPropertyPrimitive* radiusProp = reinterpret_cast<CanvasPropertyPrimitive*>(radiusPropPtr);
@@ -119,25 +114,25 @@ static void android_view_DisplayListCanvas_drawCircleProps(JNIEnv* env, jobject

static jlong android_view_DisplayListCanvas_finishRecording(JNIEnv* env,
        jobject clazz, jlong canvasPtr) {
    canvas_t* canvas = reinterpret_cast<canvas_t*>(canvasPtr);
    Canvas* canvas = reinterpret_cast<Canvas*>(canvasPtr);
    return reinterpret_cast<jlong>(canvas->finishRecording());
}

static jlong android_view_DisplayListCanvas_createDisplayListCanvas(JNIEnv* env, jobject clazz,
        jint width, jint height) {
    return reinterpret_cast<jlong>(new canvas_t(width, height));
    return reinterpret_cast<jlong>(Canvas::create_recording_canvas(width, height));
}

static void android_view_DisplayListCanvas_resetDisplayListCanvas(JNIEnv* env, jobject clazz,
        jlong canvasPtr, jint width, jint height) {
    canvas_t* canvas = reinterpret_cast<canvas_t*>(canvasPtr);
    canvas->reset(width, height);
    Canvas* canvas = reinterpret_cast<Canvas*>(canvasPtr);
    canvas->resetRecording(width, height);
}


static void android_view_DisplayListCanvas_drawRenderNode(JNIEnv* env,
        jobject clazz, jlong canvasPtr, jlong renderNodePtr) {
    canvas_t* canvas = reinterpret_cast<canvas_t*>(canvasPtr);
    Canvas* canvas = reinterpret_cast<Canvas*>(canvasPtr);
    RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr);
    canvas->drawRenderNode(renderNode);
}
@@ -148,7 +143,7 @@ static void android_view_DisplayListCanvas_drawRenderNode(JNIEnv* env,

static void android_view_DisplayListCanvas_drawLayer(JNIEnv* env, jobject clazz,
        jlong canvasPtr, jlong layerPtr) {
    canvas_t* canvas = reinterpret_cast<canvas_t*>(canvasPtr);
    Canvas* canvas = reinterpret_cast<Canvas*>(canvasPtr);
    DeferredLayerUpdater* layer = reinterpret_cast<DeferredLayerUpdater*>(layerPtr);
    canvas->drawLayer(layer);
}
+10 −0
Original line number Diff line number Diff line
@@ -16,10 +16,20 @@

#include "Canvas.h"

#include "DisplayListCanvas.h"
#include "RecordingCanvas.h"
#include <SkDrawFilter.h>

namespace android {

Canvas* Canvas::create_recording_canvas(int width, int height) {
#if HWUI_NEW_OPS
    return new uirenderer::RecordingCanvas(width, height);
#else
    return new uirenderer::DisplayListCanvas(width, height);
#endif
}

void Canvas::drawTextDecorations(float x, float y, float length, const SkPaint& paint) {
    uint32_t flags;
    SkDrawFilter* drawFilter = getDrawFilter();
+32 −0
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@
#define ANDROID_GRAPHICS_CANVAS_H

#include <cutils/compiler.h>
#include <utils/Functor.h>

#include "utils/NinePatch.h"

@@ -27,6 +28,14 @@

namespace android {

namespace uirenderer {
    class CanvasPropertyPaint;
    class CanvasPropertyPrimitive;
    class DeferredLayerUpdater;
    class DisplayList;
    class RenderNode;
}

namespace SaveFlags {

// These must match the corresponding Canvas API constants.
@@ -56,6 +65,8 @@ public:

    static Canvas* create_canvas(const SkBitmap& bitmap);

    static Canvas* create_recording_canvas(int width, int height);

    /**
     *  Create a new Canvas object which delegates to an SkCanvas.
     *
@@ -81,15 +92,36 @@ public:
     */
    virtual SkCanvas* asSkCanvas() = 0;


    virtual void setBitmap(const SkBitmap& bitmap) = 0;

    virtual bool isOpaque() = 0;
    virtual int width() = 0;
    virtual int height() = 0;

// ----------------------------------------------------------------------------
// View System operations (not exposed in public Canvas API)
// ----------------------------------------------------------------------------

    virtual void resetRecording(int width, int height) = 0;
    virtual uirenderer::DisplayList* finishRecording() = 0;
    virtual void insertReorderBarrier(bool enableReorder) = 0;

    virtual void setHighContrastText(bool highContrastText) = 0;
    virtual bool isHighContrastText() = 0;

    virtual void drawRoundRect(uirenderer::CanvasPropertyPrimitive* left,
            uirenderer::CanvasPropertyPrimitive* top, uirenderer::CanvasPropertyPrimitive* right,
            uirenderer::CanvasPropertyPrimitive* bottom, uirenderer::CanvasPropertyPrimitive* rx,
            uirenderer::CanvasPropertyPrimitive* ry, uirenderer::CanvasPropertyPaint* paint) = 0;
    virtual void drawCircle(uirenderer::CanvasPropertyPrimitive* x,
            uirenderer::CanvasPropertyPrimitive* y, uirenderer::CanvasPropertyPrimitive* radius,
            uirenderer::CanvasPropertyPaint* paint) = 0;

    virtual void drawLayer(uirenderer::DeferredLayerUpdater* layerHandle) = 0;
    virtual void drawRenderNode(uirenderer::RenderNode* renderNode) = 0;
    virtual void callDrawGLFunction(Functor* functor) = 0;

// ----------------------------------------------------------------------------
// Canvas state operations
// ----------------------------------------------------------------------------
+2 −2
Original line number Diff line number Diff line
@@ -42,7 +42,7 @@ DisplayListCanvas::DisplayListCanvas(int width, int height)
    , mDeferredBarrierType(kBarrier_None)
    , mHighContrastText(false)
    , mRestoreSaveCount(-1) {
    reset(width, height);
    resetRecording(width, height);
}

DisplayListCanvas::~DisplayListCanvas() {
@@ -50,7 +50,7 @@ DisplayListCanvas::~DisplayListCanvas() {
            "Destroyed a DisplayListCanvas during a record!");
}

void DisplayListCanvas::reset(int width, int height) {
void DisplayListCanvas::resetRecording(int width, int height) {
    LOG_ALWAYS_FATAL_IF(mDisplayList,
            "prepareDirty called a second time during a recording!");
    mDisplayList = new DisplayList();
+10 −13
Original line number Diff line number Diff line
@@ -67,36 +67,33 @@ public:
    DisplayListCanvas(int width, int height);
    virtual ~DisplayListCanvas();

    void reset(int width, int height);
    WARN_UNUSED_RESULT DisplayList* finishRecording();
    virtual void resetRecording(int width, int height) override;
    virtual WARN_UNUSED_RESULT DisplayList* finishRecording() override;

// ----------------------------------------------------------------------------
// HWUI Canvas state operations
// ----------------------------------------------------------------------------

    void insertReorderBarrier(bool enableReorder);
    virtual void insertReorderBarrier(bool enableReorder) override;

// ----------------------------------------------------------------------------
// HWUI Canvas draw operations
// ----------------------------------------------------------------------------

    // Shapes
    void drawRoundRect(CanvasPropertyPrimitive* left, CanvasPropertyPrimitive* top,
    virtual void drawRoundRect(CanvasPropertyPrimitive* left, CanvasPropertyPrimitive* top,
                CanvasPropertyPrimitive* right, CanvasPropertyPrimitive* bottom,
                CanvasPropertyPrimitive* rx, CanvasPropertyPrimitive* ry,
                CanvasPropertyPaint* paint);
    void drawCircle(CanvasPropertyPrimitive* x, CanvasPropertyPrimitive* y,
                CanvasPropertyPrimitive* radius, CanvasPropertyPaint* paint);

                CanvasPropertyPaint* paint) override;
    virtual void drawCircle(CanvasPropertyPrimitive* x, CanvasPropertyPrimitive* y,
                CanvasPropertyPrimitive* radius, CanvasPropertyPaint* paint) override;

// ----------------------------------------------------------------------------
// HWUI Canvas draw operations - special
// ----------------------------------------------------------------------------
    void drawLayer(DeferredLayerUpdater* layerHandle);
    void drawRenderNode(RenderNode* renderNode);

    // TODO: rename for consistency
    void callDrawGLFunction(Functor* functor);
    virtual void drawLayer(DeferredLayerUpdater* layerHandle) override;
    virtual void drawRenderNode(RenderNode* renderNode) override;
    virtual void callDrawGLFunction(Functor* functor) override;

// ----------------------------------------------------------------------------
// CanvasStateClient interface
Loading