mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 18:28:12 +00:00

These allow you to specify the point were the gradient transitions from one color to the next (without a transition hint the transition occurs at the point 50% of the way between the two colors). There is a little bit of guesswork in this implementation as the specification left out how hints work with the color stop fixup, though it appears that they are treated the same as color stops.
34 lines
757 B
C++
34 lines
757 B
C++
/*
|
|
* Copyright (c) 2022, MacDue <macdue@dueutil.tech>
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <AK/Span.h>
|
|
#include <AK/Vector.h>
|
|
#include <LibGfx/Color.h>
|
|
#include <LibWeb/Forward.h>
|
|
#include <LibWeb/Painting/PaintContext.h>
|
|
|
|
namespace Web::Painting {
|
|
|
|
struct ColorStop {
|
|
Gfx::Color color;
|
|
float position = 0;
|
|
Optional<float> transition_hint = {};
|
|
};
|
|
|
|
using ColorStopList = Vector<ColorStop, 4>;
|
|
|
|
struct LinearGradientData {
|
|
float gradient_angle;
|
|
ColorStopList color_stops;
|
|
};
|
|
|
|
LinearGradientData resolve_linear_gradient_data(Layout::Node const&, Gfx::FloatSize const&, CSS::LinearGradientStyleValue const&);
|
|
|
|
void paint_linear_gradient(PaintContext&, Gfx::IntRect const&, LinearGradientData const&);
|
|
|
|
}
|