Chromium Code Reviews| Index: Source/platform/graphics/GraphicsContext.h |
| diff --git a/Source/platform/graphics/GraphicsContext.h b/Source/platform/graphics/GraphicsContext.h |
| index 42189353bdfe69e13ce2c54ddf4266a8c248cf2f..adbba90477ea2bd52829fede55cf85628622fe66 100644 |
| --- a/Source/platform/graphics/GraphicsContext.h |
| +++ b/Source/platform/graphics/GraphicsContext.h |
| @@ -98,9 +98,6 @@ public: |
| void disableDestructionChecks() { m_disableDestructionChecks = true; } |
| #endif |
| - void saveLayer(const SkRect* bounds, const SkPaint*); |
| - void restoreLayer(); |
| - |
| bool hasStroke() const { return strokeStyle() != NoStroke && strokeThickness() > 0; } |
| float strokeThickness() const { return immutableState()->strokeData().thickness(); } |
| @@ -326,6 +323,8 @@ public: |
| void drawLineForDocumentMarker(const FloatPoint&, float width, DocumentMarkerLineStyle); |
| void beginTransparencyLayer(float opacity, const FloatRect* = 0); |
| + // Apply CompositeOperator when the layer is composited on the backdrop (i.e. endLayer()). |
| + // Don't change the current CompositeOperator state. |
| void beginLayer(float opacity, CompositeOperator, const FloatRect* = 0, ColorFilter = ColorFilterNone, ImageFilter* = 0); |
| void endLayer(); |
| @@ -436,6 +435,9 @@ private: |
| static void draw2xMarker(SkBitmap*, int); |
| #endif |
| + void saveLayer(const SkRect* bounds, const SkPaint*); |
| + void restoreLayer(); |
|
dshwang
2014/10/16 15:58:20
go to private:
Justin Novosad
2014/10/16 17:51:58
Good idea
|
| + |
| // Helpers for drawing a focus ring (drawFocusRing) |
| float prepareFocusRingPaint(SkPaint&, const Color&, int width) const; |
| void drawFocusRingPath(const SkPath&, const Color&, int width); |
| @@ -492,9 +494,14 @@ private: |
| #if ENABLE(ASSERT) |
| unsigned m_annotationCount; |
| - unsigned m_layerCount; |
| bool m_disableDestructionChecks; |
| #endif |
| + // Keep the top of the clip stack of each layer. It's needed because beginLayer()/endLayer() has the different contract |
| + // from SkCanvas::saveLayer()/restore(). When endLayer() calls SkCanvas::restore(), the clip state is restored before beginLayer(). |
| + // This member is used to re-apply all clip operations after beginLayer(). Important to note that SkCanvas::saveLayer() |
| + // may perform an additional clip operation, which prevent endLayer() from getting the stack pointer by itself. |
| + Vector<unsigned> m_clipStackPointersOfLayerStack; |
| + |
| // Tracks the region painted opaque via the GraphicsContext. |
| RegionTracker m_trackedRegion; |