Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions ci/licenses_golden/licenses_flutter
Original file line number Diff line number Diff line change
Expand Up @@ -1129,6 +1129,8 @@ ORIGIN: ../../../flutter/impeller/aiks/aiks_playground.cc + ../../../flutter/LIC
ORIGIN: ../../../flutter/impeller/aiks/aiks_playground.h + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/impeller/aiks/canvas.cc + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/impeller/aiks/canvas.h + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/impeller/aiks/color_filter_factory.cc + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/impeller/aiks/color_filter_factory.h + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/impeller/aiks/image.cc + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/impeller/aiks/image.h + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/impeller/aiks/paint.cc + ../../../flutter/LICENSE
Expand Down Expand Up @@ -1225,6 +1227,10 @@ ORIGIN: ../../../flutter/impeller/compiler/types.cc + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/impeller/compiler/types.h + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/impeller/compiler/utilities.cc + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/impeller/compiler/utilities.h + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/impeller/display_list/conversion.cc + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/impeller/display_list/conversion.h + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/impeller/display_list/display_list_color_filter.cc + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/impeller/display_list/display_list_color_filter.h + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/impeller/display_list/display_list_dispatcher.cc + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/impeller/display_list/display_list_dispatcher.h + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/impeller/display_list/display_list_image_impeller.cc + ../../../flutter/LICENSE
Expand Down Expand Up @@ -3605,6 +3611,8 @@ FILE: ../../../flutter/impeller/aiks/aiks_playground.cc
FILE: ../../../flutter/impeller/aiks/aiks_playground.h
FILE: ../../../flutter/impeller/aiks/canvas.cc
FILE: ../../../flutter/impeller/aiks/canvas.h
FILE: ../../../flutter/impeller/aiks/color_filter_factory.cc
FILE: ../../../flutter/impeller/aiks/color_filter_factory.h
FILE: ../../../flutter/impeller/aiks/image.cc
FILE: ../../../flutter/impeller/aiks/image.h
FILE: ../../../flutter/impeller/aiks/paint.cc
Expand Down Expand Up @@ -3701,6 +3709,10 @@ FILE: ../../../flutter/impeller/compiler/types.cc
FILE: ../../../flutter/impeller/compiler/types.h
FILE: ../../../flutter/impeller/compiler/utilities.cc
FILE: ../../../flutter/impeller/compiler/utilities.h
FILE: ../../../flutter/impeller/display_list/conversion.cc
FILE: ../../../flutter/impeller/display_list/conversion.h
FILE: ../../../flutter/impeller/display_list/display_list_color_filter.cc
FILE: ../../../flutter/impeller/display_list/display_list_color_filter.h
FILE: ../../../flutter/impeller/display_list/display_list_dispatcher.cc
FILE: ../../../flutter/impeller/display_list/display_list_dispatcher.h
FILE: ../../../flutter/impeller/display_list/display_list_image_impeller.cc
Expand Down
2 changes: 2 additions & 0 deletions impeller/aiks/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ impeller_component("aiks") {
"aiks_context.h",
"canvas.cc",
"canvas.h",
"color_filter_factory.cc",
"color_filter_factory.h",
"image.cc",
"image.h",
"paint.cc",
Expand Down
11 changes: 11 additions & 0 deletions impeller/aiks/color_filter_factory.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "impeller/aiks/color_filter_factory.h"

namespace impeller {

ColorFilterFactory::~ColorFilterFactory() = default;

} // namespace impeller
30 changes: 30 additions & 0 deletions impeller/aiks/color_filter_factory.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#pragma once

#include <memory>

#include "impeller/entity/contents/filters/color_filter_contents.h"

namespace impeller {

class ColorFilterFactory {
public:
enum class ColorSourceType {
kBlend,
kMatrix,
kSrgbToLinearGamma,
kLinearToSrgbGamma,
};

virtual ~ColorFilterFactory();

virtual std::shared_ptr<ColorFilterContents> MakeContents(
FilterInput::Ref input) const = 0;

virtual ColorSourceType GetType() const = 0;
};

} // namespace impeller
4 changes: 2 additions & 2 deletions impeller/aiks/paint.cc
Original file line number Diff line number Diff line change
Expand Up @@ -85,8 +85,8 @@ std::shared_ptr<Contents> Paint::WithColorFilter(
std::shared_ptr<Contents> input,
bool absorb_opacity) const {
if (color_filter.has_value()) {
const ColorFilterProc& filter = color_filter.value();
auto color_filter_contents = filter(FilterInput::Make(input));
auto filter = color_filter.value();
auto color_filter_contents = filter->MakeContents(FilterInput::Make(input));
if (color_filter_contents) {
color_filter_contents->SetAbsorbOpacity(absorb_opacity);
}
Expand Down
3 changes: 2 additions & 1 deletion impeller/aiks/paint.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
#include <memory>

#include "flutter/fml/macros.h"
#include "impeller/aiks/color_filter_factory.h"
#include "impeller/entity/contents/contents.h"
#include "impeller/entity/contents/filters/color_filter_contents.h"
#include "impeller/entity/contents/filters/filter_contents.h"
Expand Down Expand Up @@ -69,7 +70,7 @@ struct Paint {
BlendMode blend_mode = BlendMode::kSourceOver;

std::optional<ImageFilterProc> image_filter;
std::optional<ColorFilterProc> color_filter;
std::optional<std::shared_ptr<ColorFilterFactory>> color_filter;
std::optional<MaskBlurDescriptor> mask_blur_descriptor;

/// @brief Wrap this paint's configured filters to the given contents.
Expand Down
4 changes: 4 additions & 0 deletions impeller/display_list/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,10 @@ import("//flutter/impeller/tools/impeller.gni")

impeller_component("display_list") {
sources = [
"conversion.cc",
"conversion.h",
"display_list_color_filter.cc",
"display_list_color_filter.h",
"display_list_dispatcher.cc",
"display_list_dispatcher.h",
"display_list_image_impeller.cc",
Expand Down
95 changes: 95 additions & 0 deletions impeller/display_list/conversion.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "flutter/impeller/display_list/conversion.h"

namespace impeller {

BlendMode ToBlendMode(flutter::DlBlendMode mode) {
switch (mode) {
case flutter::DlBlendMode::kClear:
return BlendMode::kClear;
case flutter::DlBlendMode::kSrc:
return BlendMode::kSource;
case flutter::DlBlendMode::kDst:
return BlendMode::kDestination;
case flutter::DlBlendMode::kSrcOver:
return BlendMode::kSourceOver;
case flutter::DlBlendMode::kDstOver:
return BlendMode::kDestinationOver;
case flutter::DlBlendMode::kSrcIn:
return BlendMode::kSourceIn;
case flutter::DlBlendMode::kDstIn:
return BlendMode::kDestinationIn;
case flutter::DlBlendMode::kSrcOut:
return BlendMode::kSourceOut;
case flutter::DlBlendMode::kDstOut:
return BlendMode::kDestinationOut;
case flutter::DlBlendMode::kSrcATop:
return BlendMode::kSourceATop;
case flutter::DlBlendMode::kDstATop:
return BlendMode::kDestinationATop;
case flutter::DlBlendMode::kXor:
return BlendMode::kXor;
case flutter::DlBlendMode::kPlus:
return BlendMode::kPlus;
case flutter::DlBlendMode::kModulate:
return BlendMode::kModulate;
case flutter::DlBlendMode::kScreen:
return BlendMode::kScreen;
case flutter::DlBlendMode::kOverlay:
return BlendMode::kOverlay;
case flutter::DlBlendMode::kDarken:
return BlendMode::kDarken;
case flutter::DlBlendMode::kLighten:
return BlendMode::kLighten;
case flutter::DlBlendMode::kColorDodge:
return BlendMode::kColorDodge;
case flutter::DlBlendMode::kColorBurn:
return BlendMode::kColorBurn;
case flutter::DlBlendMode::kHardLight:
return BlendMode::kHardLight;
case flutter::DlBlendMode::kSoftLight:
return BlendMode::kSoftLight;
case flutter::DlBlendMode::kDifference:
return BlendMode::kDifference;
case flutter::DlBlendMode::kExclusion:
return BlendMode::kExclusion;
case flutter::DlBlendMode::kMultiply:
return BlendMode::kMultiply;
case flutter::DlBlendMode::kHue:
return BlendMode::kHue;
case flutter::DlBlendMode::kSaturation:
return BlendMode::kSaturation;
case flutter::DlBlendMode::kColor:
return BlendMode::kColor;
case flutter::DlBlendMode::kLuminosity:
return BlendMode::kLuminosity;
}
FML_UNREACHABLE();
}

Entity::TileMode ToTileMode(flutter::DlTileMode tile_mode) {
switch (tile_mode) {
case flutter::DlTileMode::kClamp:
return Entity::TileMode::kClamp;
case flutter::DlTileMode::kRepeat:
return Entity::TileMode::kRepeat;
case flutter::DlTileMode::kMirror:
return Entity::TileMode::kMirror;
case flutter::DlTileMode::kDecal:
return Entity::TileMode::kDecal;
}
}

Color ToColor(const SkColor& color) {
return {
static_cast<Scalar>(SkColorGetR(color) / 255.0), //
static_cast<Scalar>(SkColorGetG(color) / 255.0), //
static_cast<Scalar>(SkColorGetB(color) / 255.0), //
static_cast<Scalar>(SkColorGetA(color) / 255.0) //
};
}

} // namespace impeller
22 changes: 22 additions & 0 deletions impeller/display_list/conversion.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#pragma once

#include "flutter/display_list/display_list_blend_mode.h"
#include "flutter/display_list/display_list_tile_mode.h"
#include "flutter/impeller/entity/entity.h"
#include "flutter/impeller/geometry/color.h"
#include "flutter/impeller/geometry/scalar.h"
#include "third_party/skia/include/core/SkColor.h"

namespace impeller {

BlendMode ToBlendMode(flutter::DlBlendMode mode);

Entity::TileMode ToTileMode(flutter::DlTileMode tile_mode);

Color ToColor(const SkColor& color);

} // namespace impeller
82 changes: 82 additions & 0 deletions impeller/display_list/display_list_color_filter.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "impeller/display_list/display_list_color_filter.h"
#include "impeller/aiks/color_filter_factory.h"
#include "impeller/display_list/conversion.h"
#include "impeller/entity/contents/color_source_contents.h"

namespace impeller {

DlBlendColorFilterFactory::DlBlendColorFilterFactory(
const flutter::DlColorFilter* filter)
: filter_(filter->asBlend()) {}

DlBlendColorFilterFactory::~DlBlendColorFilterFactory() {}

ColorFilterFactory::ColorSourceType DlBlendColorFilterFactory::GetType() const {
return ColorFilterFactory::ColorSourceType::kBlend;
}

std::shared_ptr<ColorFilterContents> DlBlendColorFilterFactory::MakeContents(
FilterInput::Ref input) const {
auto blend_mode = ToBlendMode(filter_->mode());
auto color = ToColor(filter_->color());
return ColorFilterContents::MakeBlend(blend_mode, {std::move(input)}, color);
}

/// DlMatrixColorFilterFactory

DlMatrixColorFilterFactory::DlMatrixColorFilterFactory(
const flutter::DlColorFilter* filter)
: filter_(filter->asMatrix()) {}

DlMatrixColorFilterFactory::~DlMatrixColorFilterFactory() {}

ColorFilterFactory::ColorSourceType DlMatrixColorFilterFactory::GetType()
const {
return ColorFilterFactory::ColorSourceType::kMatrix;
}

std::shared_ptr<ColorFilterContents> DlMatrixColorFilterFactory::MakeContents(
FilterInput::Ref input) const {
const flutter::DlMatrixColorFilter* dl_matrix = filter_->asMatrix();
impeller::FilterContents::ColorMatrix color_matrix;
dl_matrix->get_matrix(color_matrix.array);
return ColorFilterContents::MakeColorMatrix({std::move(input)}, color_matrix);
}

/// DlSrgbToLinearColorFilterFactory

DlSrgbToLinearColorFilterFactory::DlSrgbToLinearColorFilterFactory() {}

DlSrgbToLinearColorFilterFactory::~DlSrgbToLinearColorFilterFactory() {}

ColorFilterFactory::ColorSourceType DlSrgbToLinearColorFilterFactory::GetType()
const {
return ColorFilterFactory::ColorSourceType::kSrgbToLinearGamma;
}

std::shared_ptr<ColorFilterContents>
DlSrgbToLinearColorFilterFactory::MakeContents(FilterInput::Ref input) const {
return ColorFilterContents::MakeSrgbToLinearFilter({std::move(input)});
}

/// DlLinearToSrgbColorFilterFactory

DlLinearToSrgbColorFilterFactory::DlLinearToSrgbColorFilterFactory() {}

DlLinearToSrgbColorFilterFactory::~DlLinearToSrgbColorFilterFactory() {}

ColorFilterFactory::ColorSourceType DlLinearToSrgbColorFilterFactory::GetType()
const {
return ColorFilterFactory::ColorSourceType::kLinearToSrgbGamma;
}

std::shared_ptr<ColorFilterContents>
DlLinearToSrgbColorFilterFactory::MakeContents(FilterInput::Ref input) const {
return ColorFilterContents::MakeLinearToSrgbFilter({std::move(input)});
}

} // namespace impeller
Loading