ladybird/Libraries/LibGfx/Filter.h
2025-09-30 22:33:12 +01:00

58 lines
2 KiB
C++

/*
* Copyright (c) 2024-2025, Lucien Fiorini <lucienfiorini@gmail.com>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#pragma once
#include <AK/NonnullOwnPtr.h>
#include <LibGfx/Color.h>
#include <LibGfx/CompositingAndBlendingOperator.h>
#include <LibGfx/ImmutableBitmap.h>
#include <LibGfx/Rect.h>
#include <LibGfx/ScalingMode.h>
namespace Gfx {
enum class ColorFilterType {
Brightness,
Contrast,
Grayscale,
Invert,
Opacity,
Saturate,
Sepia
};
struct FilterImpl;
class Filter {
public:
Filter(Filter const&);
Filter& operator=(Filter const&);
~Filter();
static Filter arithmetic(Optional<Filter const&> background, Optional<Filter const&> foreground, float k1, float k2, float k3, float k4);
static Filter compose(Filter const& outer, Filter const& inner);
static Filter blend(Optional<Filter const&> background, Optional<Filter const&> foreground, CompositingAndBlendingOperator mode);
static Filter flood(Gfx::Color color, float opacity);
static Filter drop_shadow(float offset_x, float offset_y, float radius, Gfx::Color color, Optional<Filter const&> input = {});
static Filter blur(float radius_x, float radius_y, Optional<Filter const&> input = {});
static Filter color(ColorFilterType type, float amount, Optional<Filter const&> input = {});
static Filter color_matrix(float matrix[20], Optional<Filter const&> input = {});
static Filter saturate(float value, Optional<Filter const&> input = {});
static Filter hue_rotate(float angle_degrees, Optional<Filter const&> input = {});
static Filter image(Gfx::ImmutableBitmap const& bitmap, Gfx::IntRect const& src_rect, Gfx::IntRect const& dest_rect, Gfx::ScalingMode scaling_mode);
static Filter merge(Vector<Optional<Filter>> const&);
static Filter offset(float dx, float dy, Optional<Filter const&> input = {});
FilterImpl const& impl() const;
private:
Filter(NonnullOwnPtr<FilterImpl>&&);
NonnullOwnPtr<FilterImpl> m_impl;
};
}