本文整理汇总了C++中UnderlyingValueOwner::value方法的典型用法代码示例。如果您正苦于以下问题:C++ UnderlyingValueOwner::value方法的具体用法?C++ UnderlyingValueOwner::value怎么用?C++ UnderlyingValueOwner::value使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类UnderlyingValueOwner
的用法示例。
在下文中一共展示了UnderlyingValueOwner::value方法的10个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: applyStack
void InvalidatableInterpolation::applyStack(
const ActiveInterpolations& interpolations,
InterpolationEnvironment& environment) {
DCHECK(!interpolations.isEmpty());
size_t startingIndex = 0;
// Compute the underlying value to composite onto.
UnderlyingValueOwner underlyingValueOwner;
const InvalidatableInterpolation& firstInterpolation =
toInvalidatableInterpolation(*interpolations.at(startingIndex));
if (firstInterpolation.dependsOnUnderlyingValue()) {
underlyingValueOwner.set(
firstInterpolation.maybeConvertUnderlyingValue(environment));
} else {
const TypedInterpolationValue* firstValue =
firstInterpolation.ensureValidInterpolation(environment,
underlyingValueOwner);
// Fast path for replace interpolations that are the only one to apply.
if (interpolations.size() == 1) {
if (firstValue) {
firstInterpolation.setFlagIfInheritUsed(environment);
firstValue->type().apply(firstValue->interpolableValue(),
firstValue->getNonInterpolableValue(),
environment);
}
return;
}
underlyingValueOwner.set(firstValue);
startingIndex++;
}
// Composite interpolations onto the underlying value.
bool shouldApply = false;
for (size_t i = startingIndex; i < interpolations.size(); i++) {
const InvalidatableInterpolation& currentInterpolation =
toInvalidatableInterpolation(*interpolations.at(i));
DCHECK(currentInterpolation.dependsOnUnderlyingValue());
const TypedInterpolationValue* currentValue =
currentInterpolation.ensureValidInterpolation(environment,
underlyingValueOwner);
if (!currentValue)
continue;
shouldApply = true;
currentInterpolation.setFlagIfInheritUsed(environment);
double underlyingFraction = currentInterpolation.underlyingFraction();
if (underlyingFraction == 0 || !underlyingValueOwner ||
underlyingValueOwner.type() != currentValue->type())
underlyingValueOwner.set(currentValue);
else
currentValue->type().composite(underlyingValueOwner, underlyingFraction,
currentValue->value(),
currentInterpolation.m_currentFraction);
}
if (shouldApply && underlyingValueOwner)
underlyingValueOwner.type().apply(
*underlyingValueOwner.value().interpolableValue,
underlyingValueOwner.value().nonInterpolableValue.get(), environment);
}
示例2: composite
void CSSClipInterpolationType::composite(UnderlyingValueOwner& underlyingValueOwner, double underlyingFraction, const InterpolationValue& value, double interpolationFraction) const
{
const ClipAutos& underlyingAutos = toCSSClipNonInterpolableValue(*underlyingValueOwner.value().nonInterpolableValue).clipAutos();
const ClipAutos& autos = toCSSClipNonInterpolableValue(*value.nonInterpolableValue).clipAutos();
if (underlyingAutos == autos)
underlyingValueOwner.mutableValue().interpolableValue->scaleAndAdd(underlyingFraction, *value.interpolableValue);
else
underlyingValueOwner.set(*this, value);
}
示例3: composite
void CSSBasicShapeInterpolationType::composite(UnderlyingValueOwner& underlyingValueOwner, double underlyingFraction, const InterpolationValue& value, double interpolationFraction) const
{
if (!BasicShapeInterpolationFunctions::shapesAreCompatible(*underlyingValueOwner.value().nonInterpolableValue, *value.nonInterpolableValue)) {
underlyingValueOwner.set(*this, value);
return;
}
underlyingValueOwner.mutableValue().interpolableValue->scaleAndAdd(underlyingFraction, *value.interpolableValue);
}
示例4: composite
void CSSImageSliceInterpolationType::composite(UnderlyingValueOwner& underlyingValueOwner, double underlyingFraction, const InterpolationValue& value, double interpolationFraction) const
{
const SliceTypes& underlyingTypes = toCSSImageSliceNonInterpolableValue(*underlyingValueOwner.value().nonInterpolableValue).types();
const SliceTypes& types = toCSSImageSliceNonInterpolableValue(*value.nonInterpolableValue).types();
if (underlyingTypes == types)
underlyingValueOwner.mutableValue().interpolableValue->scaleAndAdd(underlyingFraction, *value.interpolableValue);
else
underlyingValueOwner.set(*this, value);
}
示例5: composite
void ListInterpolationFunctions::composite(UnderlyingValueOwner& underlyingValueOwner, double underlyingFraction, const InterpolationType& type, const InterpolationValue& value, NonInterpolableValuesAreCompatibleCallback nonInterpolableValuesAreCompatible, CompositeItemCallback compositeItem)
{
size_t underlyingLength = toInterpolableList(*underlyingValueOwner.value().interpolableValue).length();
if (underlyingLength == 0) {
ASSERT(!underlyingValueOwner.value().nonInterpolableValue);
underlyingValueOwner.set(type, value);
return;
}
const InterpolableList& interpolableList = toInterpolableList(*value.interpolableValue);
size_t valueLength = interpolableList.length();
if (valueLength == 0) {
ASSERT(!value.nonInterpolableValue);
underlyingValueOwner.mutableValue().interpolableValue->scale(underlyingFraction);
return;
}
const NonInterpolableList& nonInterpolableList = toNonInterpolableList(*value.nonInterpolableValue);
size_t newLength = lowestCommonMultiple(underlyingLength, valueLength);
if (!nonInterpolableListsAreCompatible(toNonInterpolableList(*underlyingValueOwner.value().nonInterpolableValue), nonInterpolableList, newLength, nonInterpolableValuesAreCompatible)) {
underlyingValueOwner.set(type, value);
return;
}
InterpolationValue& underlyingValue = underlyingValueOwner.mutableValue();
if (underlyingLength < newLength)
repeatToLength(underlyingValue, newLength);
InterpolableList& underlyingInterpolableList = toInterpolableList(*underlyingValue.interpolableValue);
NonInterpolableList& underlyingNonInterpolableList = toNonInterpolableList(*underlyingValue.nonInterpolableValue);
for (size_t i = 0; i < newLength; i++) {
compositeItem(
underlyingInterpolableList.getMutable(i),
underlyingNonInterpolableList.getMutable(i),
underlyingFraction,
*interpolableList.get(i % valueLength),
nonInterpolableList.get(i % valueLength));
}
}
示例6: composite
void SVGPointListInterpolationType::composite(
UnderlyingValueOwner& underlyingValueOwner,
double underlyingFraction,
const InterpolationValue& value,
double interpolationFraction) const {
size_t startLength =
toInterpolableList(*underlyingValueOwner.value().interpolableValue)
.length();
size_t endLength = toInterpolableList(*value.interpolableValue).length();
if (startLength == endLength)
InterpolationType::composite(underlyingValueOwner, underlyingFraction,
value, interpolationFraction);
else
underlyingValueOwner.set(*this, value);
}
示例7: isCacheValid
bool InvalidatableInterpolation::isCacheValid(
const InterpolationEnvironment& environment,
const UnderlyingValueOwner& underlyingValueOwner) const {
if (!m_isCached)
return false;
if (isNeutralKeyframeActive()) {
if (m_cachedPairConversion && m_cachedPairConversion->isFlip())
return false;
// Pairwise interpolation can never happen between different
// InterpolationTypes, neutral values always represent the underlying value.
if (!underlyingValueOwner || !m_cachedValue ||
m_cachedValue->type() != underlyingValueOwner.type())
return false;
}
for (const auto& checker : m_conversionCheckers) {
if (!checker->isValid(environment, underlyingValueOwner.value()))
return false;
}
return true;
}
示例8: composite
void CSSBorderImageLengthBoxInterpolationType::composite(
UnderlyingValueOwner& underlyingValueOwner,
double underlyingFraction,
const InterpolationValue& value,
double interpolationFraction) const {
const SideNumbers& underlyingSideNumbers =
toCSSBorderImageLengthBoxNonInterpolableValue(
*underlyingValueOwner.value().nonInterpolableValue)
.sideNumbers();
const auto& nonInterpolableValue =
toCSSBorderImageLengthBoxNonInterpolableValue(
*value.nonInterpolableValue);
const SideNumbers& sideNumbers = nonInterpolableValue.sideNumbers();
if (underlyingSideNumbers != sideNumbers) {
underlyingValueOwner.set(*this, value);
return;
}
InterpolationValue& underlyingValue = underlyingValueOwner.mutableValue();
InterpolableList& underlyingList =
toInterpolableList(*underlyingValue.interpolableValue);
Vector<RefPtr<NonInterpolableValue>>& underlyingSideNonInterpolableValues =
toCSSBorderImageLengthBoxNonInterpolableValue(
*underlyingValue.nonInterpolableValue)
.sideNonInterpolableValues();
const InterpolableList& list = toInterpolableList(*value.interpolableValue);
const Vector<RefPtr<NonInterpolableValue>>& sideNonInterpolableValues =
nonInterpolableValue.sideNonInterpolableValues();
for (size_t i = 0; i < SideIndexCount; i++) {
if (sideNumbers.isNumber[i])
underlyingList.getMutable(i)->scaleAndAdd(underlyingFraction,
*list.get(i));
else
LengthInterpolationFunctions::composite(
underlyingList.getMutable(i), underlyingSideNonInterpolableValues[i],
underlyingFraction, *list.get(i), sideNonInterpolableValues[i].get());
}
}
示例9: create
std::unique_ptr<TypedInterpolationValue>
InvalidatableInterpolation::convertSingleKeyframe(
const PropertySpecificKeyframe& keyframe,
const InterpolationEnvironment& environment,
const UnderlyingValueOwner& underlyingValueOwner) const {
if (keyframe.isNeutral() && !underlyingValueOwner)
return nullptr;
for (const auto& interpolationType : m_interpolationTypes) {
if (keyframe.isNeutral() &&
underlyingValueOwner.type() != *interpolationType)
continue;
ConversionCheckers conversionCheckers;
InterpolationValue result = interpolationType->maybeConvertSingle(
keyframe, environment, underlyingValueOwner.value(),
conversionCheckers);
addConversionCheckers(*interpolationType, conversionCheckers);
if (result)
return TypedInterpolationValue::create(
*interpolationType, std::move(result.interpolableValue),
result.nonInterpolableValue.release());
}
DCHECK(keyframe.isNeutral());
return nullptr;
}
示例10: composite
void CSSMotionRotationInterpolationType::composite(UnderlyingValueOwner& underlyingValueOwner, double underlyingFraction, const InterpolationValue& value) const
{
const MotionRotationType& underlyingType = toCSSMotionRotationNonInterpolableValue(*underlyingValueOwner.value().nonInterpolableValue).rotationType();
const MotionRotationType& rotationType = toCSSMotionRotationNonInterpolableValue(*value.nonInterpolableValue).rotationType();
if (underlyingType == rotationType)
underlyingValueOwner.mutableValue().interpolableValue->scaleAndAdd(underlyingFraction, *value.interpolableValue);
else
underlyingValueOwner.set(*this, value);
}