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

Unified Diff: Source/core/paint/ViewDisplayList.h

Issue 653303003: Generalize paint chunks to clips, and implement clips in LayerPainter. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Fix Created 6 years, 2 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
« no previous file with comments | « Source/core/paint/LayerPainter.cpp ('k') | Source/core/paint/ViewDisplayList.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/paint/ViewDisplayList.h
diff --git a/Source/core/paint/ViewDisplayList.h b/Source/core/paint/ViewDisplayList.h
index 9f6fb5720ba618cb29e97da7705f7cb8f79b0ec0..c80c578b2fefe4ae5bf1f8b0e3357a4a9fe7c56e 100644
--- a/Source/core/paint/ViewDisplayList.h
+++ b/Source/core/paint/ViewDisplayList.h
@@ -6,6 +6,7 @@
#define ViewDisplayList_h
#include "core/rendering/PaintPhase.h"
+#include "platform/geometry/RoundedRect.h"
#include "platform/graphics/DisplayList.h"
#include "wtf/HashSet.h"
#include "wtf/OwnPtr.h"
@@ -13,13 +14,50 @@
namespace blink {
+class ClipRect;
class GraphicsContext;
class RenderObject;
+class RenderLayer;
struct AtomicPaintChunk;
-typedef Vector<OwnPtr<AtomicPaintChunk> > PaintCommandList;
-struct AtomicPaintChunk {
+struct DisplayItem {
+ virtual void replay(GraphicsContext*) = 0;
+
+ virtual ~DisplayItem() { }
+};
+
+struct ClipDisplayItem : DisplayItem {
+ RenderLayer* layer;
+ enum ClipType {
+ LayerOverflowControls,
+ LayerBackground,
+ LayerParent,
+ LayerFilter,
+ LayerForeground,
+ LayerFragmentFloat,
+ LayerFragmentForeground,
+ LayerFragmentChildOutline,
+ LayerFragmentOutline,
+ LayerFragmentMask,
+ LayerFragmentClippingMask,
+ LayerFragmentParent,
+ LayerFragmentSelection,
+ LayerFragmentChildBlockBackgrounds
+ };
+ ClipType clipType;
+ IntRect clipRect;
+ Vector<RoundedRect> roundedRectClips;
+
+ virtual void replay(GraphicsContext*);
+};
+
+struct EndClipDisplayItem : DisplayItem {
+ RenderLayer* layer;
+ virtual void replay(GraphicsContext*);
+};
+
+struct AtomicPaintChunk : DisplayItem {
AtomicPaintChunk(PassRefPtr<DisplayList> inDisplayList, RenderObject* inRenderer, PaintPhase inPhase)
: displayList(inDisplayList), renderer(inRenderer), phase(inPhase) { };
@@ -28,8 +66,12 @@ struct AtomicPaintChunk {
// This auxillary data can be moved off the chunk if needed.
RenderObject* renderer;
PaintPhase phase;
+
+ virtual void replay(GraphicsContext*);
};
+typedef Vector<OwnPtr<DisplayItem> > PaintList;
+
class PaintCommandRecorder {
public:
explicit PaintCommandRecorder(GraphicsContext*, RenderObject*, PaintPhase, const FloatRect&);
@@ -41,22 +83,35 @@ private:
PaintPhase m_phase;
};
+class ClipRecorder {
+public:
+ explicit ClipRecorder(RenderLayer*, GraphicsContext*, ClipDisplayItem::ClipType, const ClipRect&);
+ void addRoundedRectClip(const RoundedRect&);
+
+ ~ClipRecorder();
+
+private:
+ OwnPtr<ClipDisplayItem> m_clipDisplayItem;
+ GraphicsContext* m_graphicsContext;
+ RenderLayer* m_renderLayer;
+};
+
class ViewDisplayList {
public:
ViewDisplayList() { };
- const PaintCommandList& paintCommandList();
- void add(WTF::PassOwnPtr<AtomicPaintChunk>);
+ const PaintList& paintList();
+ void add(WTF::PassOwnPtr<DisplayItem>);
void invalidate(const RenderObject*);
private:
- bool isRepaint(PaintCommandList::iterator, const AtomicPaintChunk&);
+ bool isRepaint(PaintList::iterator, const DisplayItem&);
// Update m_paintList with any invalidations or new paints.
- void updatePaintCommandList();
+ void updatePaintList();
- PaintCommandList m_paintList;
+ PaintList m_paintList;
HashSet<const RenderObject*> m_invalidated;
- PaintCommandList m_newPaints;
+ PaintList m_newPaints;
};
} // namespace blink
« no previous file with comments | « Source/core/paint/LayerPainter.cpp ('k') | Source/core/paint/ViewDisplayList.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698