mirror of
https://github.com/GraphiteEditor/Graphite.git
synced 2026-09-15 22:28:10 +08:00
Improve graphic List<T> fill/stroke paint handling (#4240)
* Fix empty color list ignoring paint target * Avoid cloning renderable lists for paint presence checks * Refactor after code review by gemini * Make singular matrix check more robust * Extract transform_is_invertible helper; clarify has_paint_at docs --------- Co-authored-by: Keavon Chambers <keavon@keavon.com>
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
use crate::renderer::{RenderParams, format_transform_matrix};
|
||||
use crate::renderer::{RenderParams, format_transform_matrix, transform_is_invertible};
|
||||
use crate::{Render, RenderSvgSegmentList, SvgRender};
|
||||
use core_types::color::SRGBA8;
|
||||
use core_types::list::List;
|
||||
@@ -65,7 +65,9 @@ impl RenderExt for List<Color> {
|
||||
_render_params: &RenderParams,
|
||||
target: PaintTarget,
|
||||
) -> Self::Output {
|
||||
let Some(color) = self.element(0) else { return r#" fill="none""#.to_string() };
|
||||
let Some(color) = self.element(0) else {
|
||||
return format!(r#" {}="none""#, target.paint_attr());
|
||||
};
|
||||
|
||||
let mut result = format!(r##" {}="#{}""##, target.paint_attr(), SRGBA8::from(*color).to_rgb_hex());
|
||||
if color.a() < 1. {
|
||||
@@ -117,7 +119,7 @@ impl RenderExt for List<GradientStops> {
|
||||
let start = transform_points.transform_point2(DVec2::ZERO);
|
||||
let end = transform_points.transform_point2(DVec2::X);
|
||||
|
||||
let gradient_transform = if transformed_bounds.matrix2.determinant() != 0. {
|
||||
let gradient_transform = if transform_is_invertible(transformed_bounds) {
|
||||
transformed_bounds.inverse()
|
||||
} else {
|
||||
DAffine2::IDENTITY // Ignore if the transform cannot be inverted (the bounds are zero). See issue #1944.
|
||||
|
||||
Reference in New Issue
Block a user