#ifndef UI_GFX_GEOMETRY_LINEAR_GRADIENT_H_
#define UI_GFX_GEOMETRY_LINEAR_GRADIENT_H_
#include <stdint.h>
#include <array>
#include <cstddef>
#include <cstdint>
#include <string>
#include "base/component_export.h"
namespace gfx {
class AxisTransform2d;
class Transform;
class COMPONENT_EXPORT(GEOMETRY_SKIA) LinearGradient {
public:
struct Step {
float fraction = 0;
uint8_t alpha = 0;
friend bool operator==(const Step&, const Step&) = default;
};
static LinearGradient& GetEmpty();
static constexpr size_t kMaxStepSize = 8;
using StepArray = std::array<Step, kMaxStepSize>;
LinearGradient();
explicit LinearGradient(int16_t angle);
LinearGradient(const LinearGradient& copy);
LinearGradient& operator=(const LinearGradient& gradient_mask) = default;
bool IsEmpty() const { return !step_count_; }
void AddStep(float fraction, uint8_t alpha);
const StepArray& steps() const { return steps_; }
StepArray& steps() { return steps_; }
size_t step_count() const { return step_count_; }
int16_t angle() const { return angle_; }
void set_angle(int16_t degree) { angle_ = degree; }
void ReverseSteps();
void ApplyTransform(const Transform& transform);
void ApplyTransform(const AxisTransform2d& transform);
std::string ToString() const;
friend bool operator==(const LinearGradient&,
const LinearGradient&) = default;
private:
int16_t angle_ = 0;
size_t step_count_ = 0;
StepArray steps_;
};
}
#endif