Index: Source/platform/graphics/GraphicsContext.cpp |
diff --git a/Source/platform/graphics/GraphicsContext.cpp b/Source/platform/graphics/GraphicsContext.cpp |
index ea4c236379d60074690698731cdc50d69cd69c12..2d915201123df25a4e95f4475e1fd5f5b78b741e 100644 |
--- a/Source/platform/graphics/GraphicsContext.cpp |
+++ b/Source/platform/graphics/GraphicsContext.cpp |
@@ -137,10 +137,36 @@ GraphicsContext::GraphicsContext(SkCanvas* canvas, DisabledMode disableContextOr |
{ |
ASSERT(canvas); |
- // FIXME: Do some tests to determine how many states are typically used, and allocate |
- // several here. |
- m_paintStateStack.append(GraphicsContextState::create()); |
- m_paintState = m_paintStateStack.last().get(); |
+ initializeStateStack(); |
+} |
+ |
+GraphicsContext::GraphicsContext(const FloatRect& bounds, DisabledMode disableContextOrPainting) |
+ : m_canvas(0) |
+ , m_paintStateStack() |
+ , m_paintStateIndex(0) |
+ , m_pendingCanvasSave(false) |
+ , m_annotationMode(0) |
+#if ENABLE(ASSERT) |
+ , m_annotationCount(0) |
+ , m_layerCount(0) |
+ , m_disableDestructionChecks(false) |
+#endif |
+ , m_disabledState(disableContextOrPainting) |
+ , m_deviceScaleFactor(1.0f) |
+ , m_regionTrackingMode(RegionTrackingDisabled) |
+ , m_trackTextRegion(false) |
+ , m_accelerated(false) |
+ , m_isCertainlyOpaque(true) |
+ , m_printing(false) |
+ , m_antialiasHairlineImages(false) |
+{ |
+ initializeStateStack(); |
+ |
+ RefPtr<DisplayList> displayList = DisplayList::create(bounds); |
+ SkCanvas* savedCanvas = 0; |
+ SkMatrix savedMatrix = SkMatrix::I(); |
+ |
+ beginRecordingImpl(displayList, 0, savedCanvas, savedMatrix); |
} |
GraphicsContext::~GraphicsContext() |
@@ -157,6 +183,14 @@ GraphicsContext::~GraphicsContext() |
#endif |
} |
+void GraphicsContext::initializeStateStack() |
+{ |
+ // FIXME: Do some tests to determine how many states are typically used, and allocate |
+ // several here. |
+ m_paintStateStack.append(GraphicsContextState::create()); |
+ m_paintState = m_paintStateStack.last().get(); |
+} |
+ |
void GraphicsContext::resetCanvas(SkCanvas* canvas) |
{ |
ASSERT(canvas); |
@@ -495,17 +529,16 @@ void GraphicsContext::endLayer() |
#endif |
} |
-void GraphicsContext::beginRecording(const FloatRect& bounds, uint32_t recordFlags) |
+void GraphicsContext::beginRecordingImpl(PassRefPtr<DisplayList> displayList, uint32_t recordFlags, |
+ SkCanvas* savedCanvas, SkMatrix& savedMatrix) |
{ |
- RefPtr<DisplayList> displayList = DisplayList::create(bounds); |
+ RefPtr<DisplayList> pDisplayList = displayList; |
+ ASSERT(!pDisplayList->picture()); |
SkPictureRecorder* recorder = 0; |
- SkCanvas* savedCanvas = m_canvas; |
- SkMatrix savedMatrix = getTotalMatrix(); |
- |
if (!contextDisabled()) { |
- FloatRect bounds = displayList->bounds(); |
+ FloatRect bounds = pDisplayList->bounds(); |
IntSize recordingSize = enclosingIntRect(bounds).size(); |
recorder = new SkPictureRecorder; |
m_canvas = recorder->beginRecording(recordingSize.width(), recordingSize.height(), 0, recordFlags); |
@@ -519,7 +552,17 @@ void GraphicsContext::beginRecording(const FloatRect& bounds, uint32_t recordFla |
} |
} |
- m_recordingStateStack.append(RecordingState(recorder, savedCanvas, savedMatrix, displayList)); |
+ m_recordingStateStack.append(RecordingState(recorder, savedCanvas, savedMatrix, pDisplayList)); |
+} |
+ |
+void GraphicsContext::beginRecording(const FloatRect& bounds, uint32_t recordFlags) |
+{ |
+ RefPtr<DisplayList> displayList = DisplayList::create(bounds); |
+ |
+ SkCanvas* savedCanvas = m_canvas; |
+ SkMatrix savedMatrix = getTotalMatrix(); |
+ |
+ beginRecordingImpl(displayList, recordFlags, savedCanvas, savedMatrix); |
} |
PassRefPtr<DisplayList> GraphicsContext::endRecording() |