Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit 924c172

Browse files
authored
[web] fix ==/hashCode/toString for several classes across renderers (#49786)
Fix equality and hash code in `ParagraphStyle` and `StrutStyle` across renderers. Since those classes transitively rely on `Paint` and other classes, also fix those at least to a point that they pass the `test/painting/text_style_test.dart` test on the framework side.
1 parent 98c16b4 commit 924c172

File tree

17 files changed

+1162
-221
lines changed

17 files changed

+1162
-221
lines changed

lib/web_ui/lib/src/engine/canvaskit/image_filter.dart

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -120,19 +120,6 @@ class _CkBlurImageFilter extends CkImageFilter {
120120
borrow(_ref.nativeObject);
121121
}
122122

123-
String get _modeString {
124-
switch (tileMode) {
125-
case ui.TileMode.clamp:
126-
return 'clamp';
127-
case ui.TileMode.mirror:
128-
return 'mirror';
129-
case ui.TileMode.repeated:
130-
return 'repeated';
131-
case ui.TileMode.decal:
132-
return 'decal';
133-
}
134-
}
135-
136123
@override
137124
bool operator ==(Object other) {
138125
if (runtimeType != other.runtimeType) {
@@ -149,7 +136,7 @@ class _CkBlurImageFilter extends CkImageFilter {
149136

150137
@override
151138
String toString() {
152-
return 'ImageFilter.blur($sigmaX, $sigmaY, $_modeString)';
139+
return 'ImageFilter.blur($sigmaX, $sigmaY, ${tileModeString(tileMode)})';
153140
}
154141
}
155142

lib/web_ui/lib/src/engine/canvaskit/painting.dart

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -296,6 +296,85 @@ class CkPaint implements ui.Paint {
296296
void dispose() {
297297
_ref.dispose();
298298
}
299+
300+
// Must be kept in sync with the default in paint.cc.
301+
static const double _kStrokeMiterLimitDefault = 4.0;
302+
303+
// Must be kept in sync with the default in paint.cc.
304+
static const int _kColorDefault = 0xFF000000;
305+
306+
// Must be kept in sync with the default in paint.cc.
307+
static final int _kBlendModeDefault = ui.BlendMode.srcOver.index;
308+
309+
@override
310+
String toString() {
311+
String resultString = 'Paint()';
312+
313+
assert(() {
314+
final StringBuffer result = StringBuffer();
315+
String semicolon = '';
316+
result.write('Paint(');
317+
if (style == ui.PaintingStyle.stroke) {
318+
result.write('$style');
319+
if (strokeWidth != 0.0) {
320+
result.write(' ${strokeWidth.toStringAsFixed(1)}');
321+
} else {
322+
result.write(' hairline');
323+
}
324+
if (strokeCap != ui.StrokeCap.butt) {
325+
result.write(' $strokeCap');
326+
}
327+
if (strokeJoin == ui.StrokeJoin.miter) {
328+
if (strokeMiterLimit != _kStrokeMiterLimitDefault) {
329+
result.write(' $strokeJoin up to ${strokeMiterLimit.toStringAsFixed(1)}');
330+
}
331+
} else {
332+
result.write(' $strokeJoin');
333+
}
334+
semicolon = '; ';
335+
}
336+
if (!isAntiAlias) {
337+
result.write('${semicolon}antialias off');
338+
semicolon = '; ';
339+
}
340+
if (color != const ui.Color(_kColorDefault)) {
341+
result.write('$semicolon$color');
342+
semicolon = '; ';
343+
}
344+
if (blendMode.index != _kBlendModeDefault) {
345+
result.write('$semicolon$blendMode');
346+
semicolon = '; ';
347+
}
348+
if (colorFilter != null) {
349+
result.write('${semicolon}colorFilter: $colorFilter');
350+
semicolon = '; ';
351+
}
352+
if (maskFilter != null) {
353+
result.write('${semicolon}maskFilter: $maskFilter');
354+
semicolon = '; ';
355+
}
356+
if (filterQuality != ui.FilterQuality.none) {
357+
result.write('${semicolon}filterQuality: $filterQuality');
358+
semicolon = '; ';
359+
}
360+
if (shader != null) {
361+
result.write('${semicolon}shader: $shader');
362+
semicolon = '; ';
363+
}
364+
if (imageFilter != null) {
365+
result.write('${semicolon}imageFilter: $imageFilter');
366+
semicolon = '; ';
367+
}
368+
if (invertColors) {
369+
result.write('${semicolon}invert: $invertColors');
370+
}
371+
result.write(')');
372+
resultString = result.toString();
373+
return true;
374+
}());
375+
376+
return resultString;
377+
}
299378
}
300379

301380
final Float32List _invertColorMatrix = Float32List.fromList(const <double>[

lib/web_ui/lib/src/engine/canvaskit/shader.dart

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,9 @@ abstract class SimpleCkShader implements CkShader {
5454
void dispose() {
5555
_ref.dispose();
5656
}
57+
58+
@override
59+
String toString() => 'Gradient()';
5760
}
5861

5962
class CkGradientSweep extends SimpleCkShader implements ui.Gradient {
@@ -133,6 +136,9 @@ class CkGradientLinear extends SimpleCkShader implements ui.Gradient {
133136
matrix4 != null ? toSkMatrixFromFloat32(matrix4!) : null,
134137
);
135138
}
139+
140+
@override
141+
String toString() => 'Gradient()';
136142
}
137143

138144
class CkGradientRadial extends SimpleCkShader implements ui.Gradient {
@@ -161,6 +167,9 @@ class CkGradientRadial extends SimpleCkShader implements ui.Gradient {
161167
0,
162168
);
163169
}
170+
171+
@override
172+
String toString() => 'Gradient()';
164173
}
165174

166175
class CkGradientConical extends SimpleCkShader implements ui.Gradient {

0 commit comments

Comments
 (0)