blob: d5859153bff55d6f139e3a9f18668f2d6b3b709d [file] [log] [blame]
/*
* Copyright 2015 Google Inc. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "cobalt/cssom/radial_gradient_value.h"
#include "base/stringprintf.h"
#include "cobalt/cssom/keyword_names.h"
#include "cobalt/cssom/property_value_visitor.h"
namespace cobalt {
namespace cssom {
void RadialGradientValue::Accept(PropertyValueVisitor* visitor) {
visitor->VisitRadialGradient(this);
}
std::string RadialGradientValue::ToString() const {
std::string result;
switch (shape_) {
case kCircle:
result.append(kCircleKeywordName);
break;
case kEllipse:
result.append(kEllipseKeywordName);
break;
default:
NOTREACHED();
}
if (size_keyword_) {
result.push_back(' ');
switch (size_keyword_.value()) {
case kClosestSide:
result.append(kClosestSideKeywordName);
break;
case kFarthestSide:
result.append(kFarthestSideKeywordName);
break;
case kClosestCorner:
result.append(kClosestCornerKeywordName);
break;
case kFarthestCorner:
result.append(kFarthestCornerKeywordName);
break;
default:
NOTREACHED();
}
} else if (size_value_) {
result.push_back(' ');
result.append(size_value_->ToString());
}
if (position_) {
result.push_back(' ');
result.append(kAtKeywordName);
for (size_t i = 0; i < position_->value().size(); ++i) {
result.push_back(' ');
result.append(position_->value()[i]->ToString());
}
}
for (size_t i = 0; i < color_stop_list_.size(); ++i) {
if (!result.empty()) result.append(", ");
result.append(color_stop_list_[i]->ToString());
}
return result;
}
bool RadialGradientValue::operator==(const RadialGradientValue& other) const {
// shape must the same.
if (shape_ != other.shape_) {
return false;
}
// The optionals must match.
if (!size_keyword_ != !other.size_keyword_) {
return false;
}
if (size_keyword_) {
if (!(*size_keyword_ == *other.size_keyword_)) {
return false;
}
}
if (!size_value_ != !other.size_value_) {
return false;
}
if (size_value_) {
if (!(*size_value_ == *other.size_value_)) {
return false;
}
}
if (!position_ != !other.position_) {
return false;
}
if (position_ && !(*position_ == *other.position_)) {
return false;
}
// The stop lists must be equal.
return ColorStopListsEqual(color_stop_list_, other.color_stop_list_);
}
} // namespace cssom
} // namespace cobalt