blob: 9143d140e194d79b3ec91b3ca09add084384b367 [file] [log] [blame]
/*
* Copyright (C) 2006 Nikolas Zimmermann <zimmermann@kde.org>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public License
* along with this library; see the file COPYING.LIB. If not, write to
* the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301, USA.
*/
#ifndef THIRD_PARTY_BLINK_RENDERER_CORE_SVG_RADIAL_GRADIENT_ATTRIBUTES_H_
#define THIRD_PARTY_BLINK_RENDERER_CORE_SVG_RADIAL_GRADIENT_ATTRIBUTES_H_
#include "third_party/blink/renderer/core/svg/gradient_attributes.h"
#include "third_party/blink/renderer/core/svg/svg_length.h"
#include "third_party/blink/renderer/platform/heap/heap.h"
namespace blink {
struct RadialGradientAttributes final : GradientAttributes {
DISALLOW_NEW();
public:
RadialGradientAttributes()
: cx_(MakeGarbageCollected<SVGLength>(SVGLengthMode::kWidth)),
cy_(MakeGarbageCollected<SVGLength>(SVGLengthMode::kHeight)),
r_(MakeGarbageCollected<SVGLength>(SVGLengthMode::kOther)),
fx_(MakeGarbageCollected<SVGLength>(SVGLengthMode::kWidth)),
fy_(MakeGarbageCollected<SVGLength>(SVGLengthMode::kHeight)),
fr_(MakeGarbageCollected<SVGLength>(SVGLengthMode::kOther)),
cx_set_(false),
cy_set_(false),
r_set_(false),
fx_set_(false),
fy_set_(false),
fr_set_(false) {
cx_->SetValueAsString("50%");
cy_->SetValueAsString("50%");
r_->SetValueAsString("50%");
}
SVGLength* Cx() const { return cx_.Get(); }
SVGLength* Cy() const { return cy_.Get(); }
SVGLength* R() const { return r_.Get(); }
SVGLength* Fx() const { return fx_.Get(); }
SVGLength* Fy() const { return fy_.Get(); }
SVGLength* Fr() const { return fr_.Get(); }
void SetCx(SVGLength* value) {
cx_ = value;
cx_set_ = true;
}
void SetCy(SVGLength* value) {
cy_ = value;
cy_set_ = true;
}
void SetR(SVGLength* value) {
r_ = value;
r_set_ = true;
}
void SetFx(SVGLength* value) {
fx_ = value;
fx_set_ = true;
}
void SetFy(SVGLength* value) {
fy_ = value;
fy_set_ = true;
}
void SetFr(SVGLength* value) {
fr_ = value;
fr_set_ = true;
}
bool HasCx() const { return cx_set_; }
bool HasCy() const { return cy_set_; }
bool HasR() const { return r_set_; }
bool HasFx() const { return fx_set_; }
bool HasFy() const { return fy_set_; }
bool HasFr() const { return fr_set_; }
void Trace(Visitor* visitor) {
visitor->Trace(cx_);
visitor->Trace(cy_);
visitor->Trace(r_);
visitor->Trace(fx_);
visitor->Trace(fy_);
visitor->Trace(fr_);
}
private:
// Properties
Member<SVGLength> cx_;
Member<SVGLength> cy_;
Member<SVGLength> r_;
Member<SVGLength> fx_;
Member<SVGLength> fy_;
Member<SVGLength> fr_;
// Property states
bool cx_set_ : 1;
bool cy_set_ : 1;
bool r_set_ : 1;
bool fx_set_ : 1;
bool fy_set_ : 1;
bool fr_set_ : 1;
};
// Wrapper object for the RadialGradientAttributes part object.
class RadialGradientAttributesWrapper final
: public GarbageCollected<RadialGradientAttributesWrapper> {
public:
RadialGradientAttributesWrapper() = default;
RadialGradientAttributes& Attributes() { return attributes_; }
void Set(const RadialGradientAttributes& attributes) {
attributes_ = attributes;
}
void Trace(Visitor* visitor) { visitor->Trace(attributes_); }
private:
RadialGradientAttributes attributes_;
};
} // namespace blink
#endif