| // Copyright 2015 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef SKY_ENGINE_CORE_PAINTING_CANVAS_H_ |
| #define SKY_ENGINE_CORE_PAINTING_CANVAS_H_ |
| |
| #include "sky/engine/core/painting/CanvasPath.h" |
| #include "sky/engine/core/painting/Paint.h" |
| #include "sky/engine/core/painting/Picture.h" |
| #include "sky/engine/core/painting/RRect.h" |
| #include "sky/engine/core/painting/Rect.h" |
| #include "sky/engine/platform/graphics/DisplayList.h" |
| #include "sky/engine/tonic/dart_wrappable.h" |
| #include "sky/engine/tonic/float32_list.h" |
| #include "sky/engine/wtf/PassRefPtr.h" |
| #include "sky/engine/wtf/RefCounted.h" |
| |
| namespace blink { |
| class Element; |
| class CanvasImage; |
| |
| class Canvas : public RefCounted<Canvas>, public DartWrappable { |
| DEFINE_WRAPPERTYPEINFO(); |
| public: |
| Canvas(const FloatSize& size); |
| ~Canvas() override; |
| |
| // Width/Height define a culling rect which Skia may use for optimizing |
| // out draw calls issued outside the rect. |
| float width() const { return m_size.width(); } |
| float height() const { return m_size.height(); } |
| |
| void save(); |
| void saveLayer(const Rect& bounds, const Paint* paint = nullptr); |
| void restore(); |
| |
| void translate(float dx, float dy); |
| void scale(float sx, float sy); |
| void rotate(float radians); |
| void skew(float sx, float sy); |
| void concat(const Float32List& matrix4); |
| |
| void clipRect(const Rect& rect); |
| void clipRRect(const RRect* rrect); |
| void clipPath(const CanvasPath* path); |
| |
| void drawLine(float x0, float y0, float x1, float y1, const Paint* paint); |
| void drawPicture(Picture* picture); |
| void drawPaint(const Paint* paint); |
| void drawRect(const Rect& rect, const Paint* paint); |
| void drawRRect(const RRect* rrect, const Paint* paint); |
| void drawOval(const Rect& rect, const Paint* paint); |
| void drawCircle(float x, float y, float radius, const Paint* paint); |
| void drawPath(const CanvasPath* path, const Paint* paint); |
| void drawImage(const CanvasImage* image, |
| float x, |
| float y, |
| const Paint* paint); |
| |
| SkCanvas* skCanvas() { return m_canvas; } |
| |
| protected: |
| PassRefPtr<DisplayList> finishRecording(); |
| |
| bool isRecording() const { return m_canvas; } |
| |
| private: |
| FloatSize m_size; |
| RefPtr<DisplayList> m_displayList; |
| SkCanvas* m_canvas; |
| }; |
| |
| } // namespace blink |
| |
| #endif // SKY_ENGINE_CORE_PAINTING_CANVAS_H_ |