blob: 4b5a5c7e623544ba6c931ad52e67af875b012091 [file] [log] [blame]
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef ScopedPaintChunkProperties_h
#define ScopedPaintChunkProperties_h
#include "platform/graphics/paint/DisplayItem.h"
#include "platform/graphics/paint/PaintChunk.h"
#include "platform/graphics/paint/PaintChunkProperties.h"
#include "platform/graphics/paint/PaintController.h"
#include "wtf/Allocator.h"
#include "wtf/Noncopyable.h"
namespace blink {
class ScopedPaintChunkProperties {
DISALLOW_NEW_EXCEPT_PLACEMENT_NEW();
WTF_MAKE_NONCOPYABLE(ScopedPaintChunkProperties);
public:
ScopedPaintChunkProperties(PaintController& paintController,
const DisplayItemClient& client,
DisplayItem::Type type,
const PaintChunkProperties& properties)
: m_paintController(paintController),
m_previousProperties(paintController.currentPaintChunkProperties()) {
PaintChunk::Id id(client, type);
m_paintController.updateCurrentPaintChunkProperties(&id, properties);
}
// Omits the type parameter, in case that the client creates only one
// PaintChunkProperties node during each painting.
ScopedPaintChunkProperties(PaintController& paintController,
const DisplayItemClient& client,
const PaintChunkProperties& properties)
: ScopedPaintChunkProperties(paintController,
client,
DisplayItem::kUninitializedType,
properties) {}
~ScopedPaintChunkProperties() {
// We should not return to the previous id, because that may cause a new
// chunk to use the same id as that of the previous chunk before this
// ScopedPaintChunkProperties. The painter should create another scope of
// paint properties with new id, or the new chunk will have no id and will
// not match any old chunk and will be treated as fully invalidated for
// rasterization.
m_paintController.updateCurrentPaintChunkProperties(nullptr,
m_previousProperties);
}
private:
PaintController& m_paintController;
PaintChunkProperties m_previousProperties;
};
} // namespace blink
#endif // ScopedPaintChunkProperties_h