| 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()
|
|
|