blob: e91bc2474a67388153e4fefb97dd41cc6b07e536 [file] [log] [blame]
// Copyright 2016 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 THIRD_PARTY_BLINK_RENDERER_PLATFORM_TESTING_PAINT_PROPERTY_TEST_HELPERS_H_
#define THIRD_PARTY_BLINK_RENDERER_PLATFORM_TESTING_PAINT_PROPERTY_TEST_HELPERS_H_
#include "third_party/blink/renderer/platform/graphics/paint/clip_paint_property_node.h"
#include "third_party/blink/renderer/platform/graphics/paint/effect_paint_property_node.h"
#include "third_party/blink/renderer/platform/graphics/paint/property_tree_state.h"
#include "third_party/blink/renderer/platform/graphics/paint/transform_paint_property_node.h"
namespace blink {
// Convenient shorthands.
inline const TransformPaintPropertyNode& t0() {
return TransformPaintPropertyNode::Root();
}
inline const ClipPaintPropertyNode& c0() {
return ClipPaintPropertyNode::Root();
}
inline const EffectPaintPropertyNode& e0() {
return EffectPaintPropertyNode::Root();
}
inline scoped_refptr<EffectPaintPropertyNode> CreateOpacityEffect(
const EffectPaintPropertyNode& parent,
const TransformPaintPropertyNode& local_transform_space,
const ClipPaintPropertyNode* output_clip,
float opacity,
CompositingReasons compositing_reasons = CompositingReason::kNone) {
EffectPaintPropertyNode::State state;
state.local_transform_space = &local_transform_space;
state.output_clip = output_clip;
state.opacity = opacity;
state.direct_compositing_reasons = compositing_reasons;
state.compositor_element_id = CompositorElementIdFromUniqueObjectId(
NewUniqueObjectId(), CompositorElementIdNamespace::kPrimary);
return EffectPaintPropertyNode::Create(parent, std::move(state));
}
inline scoped_refptr<EffectPaintPropertyNode> CreateOpacityEffect(
const EffectPaintPropertyNode& parent,
float opacity,
CompositingReasons compositing_reasons = CompositingReason::kNone) {
return CreateOpacityEffect(parent, parent.Unalias().LocalTransformSpace(),
parent.Unalias().OutputClip(), opacity,
compositing_reasons);
}
inline scoped_refptr<EffectPaintPropertyNode> CreateAnimatingOpacityEffect(
const EffectPaintPropertyNode& parent,
float opacity = 1.f,
const ClipPaintPropertyNode* output_clip = nullptr) {
EffectPaintPropertyNode::State state;
state.local_transform_space = &parent.Unalias().LocalTransformSpace();
state.output_clip = output_clip;
state.opacity = opacity;
state.direct_compositing_reasons = CompositingReason::kActiveOpacityAnimation;
state.compositor_element_id = CompositorElementIdFromUniqueObjectId(
NewUniqueObjectId(), CompositorElementIdNamespace::kPrimaryEffect);
return EffectPaintPropertyNode::Create(parent, std::move(state));
}
inline scoped_refptr<EffectPaintPropertyNode> CreateFilterEffect(
const EffectPaintPropertyNode& parent,
const TransformPaintPropertyNode& local_transform_space,
const ClipPaintPropertyNode* output_clip,
CompositorFilterOperations filter,
const FloatPoint& filters_origin = FloatPoint(),
CompositingReasons compositing_reasons = CompositingReason::kNone) {
EffectPaintPropertyNode::State state;
state.local_transform_space = &local_transform_space;
state.output_clip = output_clip;
state.filter = std::move(filter);
state.filters_origin = filters_origin;
state.direct_compositing_reasons = compositing_reasons;
state.compositor_element_id = CompositorElementIdFromUniqueObjectId(
NewUniqueObjectId(), CompositorElementIdNamespace::kEffectFilter);
return EffectPaintPropertyNode::Create(parent, std::move(state));
}
inline scoped_refptr<EffectPaintPropertyNode> CreateFilterEffect(
const EffectPaintPropertyNode& parent,
CompositorFilterOperations filter,
const FloatPoint& paint_offset = FloatPoint(),
CompositingReasons compositing_reasons = CompositingReason::kNone) {
return CreateFilterEffect(parent, parent.Unalias().LocalTransformSpace(),
parent.Unalias().OutputClip(), filter, paint_offset,
compositing_reasons);
}
inline scoped_refptr<EffectPaintPropertyNode> CreateAnimatingFilterEffect(
const EffectPaintPropertyNode& parent,
CompositorFilterOperations filter = CompositorFilterOperations(),
const ClipPaintPropertyNode* output_clip = nullptr) {
EffectPaintPropertyNode::State state;
state.local_transform_space = &parent.Unalias().LocalTransformSpace();
state.output_clip = output_clip;
state.filter = std::move(filter);
state.direct_compositing_reasons = CompositingReason::kActiveFilterAnimation;
state.compositor_element_id = CompositorElementIdFromUniqueObjectId(
NewUniqueObjectId(), CompositorElementIdNamespace::kEffectFilter);
return EffectPaintPropertyNode::Create(parent, std::move(state));
}
inline scoped_refptr<EffectPaintPropertyNode> CreateBackdropFilterEffect(
const EffectPaintPropertyNode& parent,
const TransformPaintPropertyNode& local_transform_space,
const ClipPaintPropertyNode* output_clip,
CompositorFilterOperations backdrop_filter,
const FloatPoint& filters_origin = FloatPoint(),
CompositingReasons compositing_reasons = CompositingReason::kNone) {
EffectPaintPropertyNode::State state;
state.local_transform_space = &local_transform_space;
state.output_clip = output_clip;
state.backdrop_filter = std::move(backdrop_filter);
state.filters_origin = filters_origin;
state.direct_compositing_reasons = compositing_reasons;
state.compositor_element_id = CompositorElementIdFromUniqueObjectId(
NewUniqueObjectId(), CompositorElementIdNamespace::kPrimary);
return EffectPaintPropertyNode::Create(parent, std::move(state));
}
inline scoped_refptr<EffectPaintPropertyNode> CreateBackdropFilterEffect(
const EffectPaintPropertyNode& parent,
CompositorFilterOperations backdrop_filter,
const FloatPoint& paint_offset = FloatPoint(),
CompositingReasons compositing_reasons = CompositingReason::kNone) {
return CreateBackdropFilterEffect(
parent, parent.Unalias().LocalTransformSpace(),
parent.Unalias().OutputClip(), backdrop_filter, paint_offset,
compositing_reasons);
}
inline scoped_refptr<EffectPaintPropertyNode>
CreateAnimatingBackdropFilterEffect(
const EffectPaintPropertyNode& parent,
CompositorFilterOperations backdrop_filter = CompositorFilterOperations(),
const ClipPaintPropertyNode* output_clip = nullptr) {
EffectPaintPropertyNode::State state;
state.local_transform_space = &parent.Unalias().LocalTransformSpace();
state.output_clip = output_clip;
state.backdrop_filter = std::move(backdrop_filter);
state.direct_compositing_reasons =
CompositingReason::kActiveBackdropFilterAnimation;
state.compositor_element_id = CompositorElementIdFromUniqueObjectId(
NewUniqueObjectId(), CompositorElementIdNamespace::kPrimaryEffect);
return EffectPaintPropertyNode::Create(parent, std::move(state));
}
inline scoped_refptr<ClipPaintPropertyNode> CreateClip(
const ClipPaintPropertyNode& parent,
const TransformPaintPropertyNode& local_transform_space,
const FloatRoundedRect& clip_rect,
CompositingReasons compositing_reasons = CompositingReason::kNone) {
ClipPaintPropertyNode::State state;
state.local_transform_space = &local_transform_space;
state.clip_rect = clip_rect;
state.direct_compositing_reasons = compositing_reasons;
return ClipPaintPropertyNode::Create(parent, std::move(state));
}
inline scoped_refptr<ClipPaintPropertyNode> CreateClipPathClip(
const ClipPaintPropertyNode& parent,
const TransformPaintPropertyNode& local_transform_space,
const FloatRoundedRect& clip_rect) {
ClipPaintPropertyNode::State state;
state.local_transform_space = &local_transform_space;
state.clip_rect = clip_rect;
state.clip_path = base::AdoptRef(new RefCountedPath);
return ClipPaintPropertyNode::Create(parent, std::move(state));
}
inline scoped_refptr<TransformPaintPropertyNode> Create2DTranslation(
const TransformPaintPropertyNode& parent,
float x,
float y) {
return TransformPaintPropertyNode::Create(
parent, TransformPaintPropertyNode::State{FloatSize(x, y)});
}
inline scoped_refptr<TransformPaintPropertyNode> CreateTransform(
const TransformPaintPropertyNode& parent,
const TransformationMatrix& matrix,
const FloatPoint3D& origin = FloatPoint3D(),
CompositingReasons compositing_reasons = CompositingReason::kNone) {
TransformPaintPropertyNode::State state{
TransformPaintPropertyNode::TransformAndOrigin(matrix, origin)};
state.direct_compositing_reasons = compositing_reasons;
return TransformPaintPropertyNode::Create(parent, std::move(state));
}
inline scoped_refptr<TransformPaintPropertyNode> CreateAnimatingTransform(
const TransformPaintPropertyNode& parent,
const TransformationMatrix& matrix = TransformationMatrix(),
const FloatPoint3D& origin = FloatPoint3D()) {
TransformPaintPropertyNode::State state{
TransformPaintPropertyNode::TransformAndOrigin(matrix, origin)};
state.direct_compositing_reasons =
CompositingReason::kActiveTransformAnimation;
state.compositor_element_id = CompositorElementIdFromUniqueObjectId(
NewUniqueObjectId(), CompositorElementIdNamespace::kPrimaryTransform);
return TransformPaintPropertyNode::Create(parent, std::move(state));
}
inline scoped_refptr<TransformPaintPropertyNode> CreateScrollTranslation(
const TransformPaintPropertyNode& parent,
float offset_x,
float offset_y,
const ScrollPaintPropertyNode& scroll,
CompositingReasons compositing_reasons = CompositingReason::kNone) {
TransformPaintPropertyNode::State state{FloatSize(offset_x, offset_y)};
state.direct_compositing_reasons = compositing_reasons;
state.scroll = &scroll;
return TransformPaintPropertyNode::Create(parent, std::move(state));
}
inline PropertyTreeState DefaultPaintChunkProperties() {
return PropertyTreeState::Root();
}
} // namespace blink
#endif // THIRD_PARTY_BLINK_RENDERER_PLATFORM_TESTING_PAINT_PROPERTY_TEST_HELPERS_H_