Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(317)

Unified Diff: Source/platform/graphics/GraphicsContext.cpp

Issue 541913002: Create a GraphicsContext from a DisplayList. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@display-list-changes
Patch Set: Rebased Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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()

Powered by Google App Engine
This is Rietveld 408576698