Remove taffy

Removing Taffy. Will be replacing with Yoga shortly.

Diffs=
12cf6b8c3 Remove taffy (#6670)
f2ecb3a22 Implement an MSAA fallback for PLS (#6680)
ffde4f5f6 trigger change when text modifier updates (#6675)
20b585bea add support for text feature in runtime (#6674)

Co-authored-by: Philip Chung <philterdesign@gmail.com>
This commit is contained in:
philter
2024-03-01 22:45:42 +00:00
parent 870234fddc
commit 8e7c5dae92
8 changed files with 35 additions and 931 deletions

View File

@ -1 +1 @@
8bca56dcaffd0f563a91f628b0ed432eca71acb5
12cf6b8c3cba1e2d11ec17c1e11d6c25fee423ab

View File

@ -109,8 +109,6 @@ import 'package:rive/src/rive_core/draw_rules.dart';
import 'package:rive/src/rive_core/draw_target.dart';
import 'package:rive/src/rive_core/event.dart';
import 'package:rive/src/rive_core/joystick.dart';
import 'package:rive/src/rive_core/layout/grid_track_sizing_group.dart';
import 'package:rive/src/rive_core/layout/track_sizing_function.dart';
import 'package:rive/src/rive_core/layout_component.dart';
import 'package:rive/src/rive_core/nested_artboard.dart';
import 'package:rive/src/rive_core/node.dart';
@ -176,10 +174,6 @@ class RiveCoreContext {
return NestedArtboard();
case SoloBase.typeKey:
return Solo();
case TrackSizingFunctionBase.typeKey:
return TrackSizingFunction();
case GridTrackSizingGroupBase.typeKey:
return GridTrackSizingGroup();
case ListenerFireEventBase.typeKey:
return ListenerFireEvent();
case AnimationBase.typeKey:
@ -596,56 +590,6 @@ class RiveCoreContext {
object.activeComponentId = value;
}
break;
case TrackSizingFunctionBase.minTypeTagPropertyKey:
if (object is TrackSizingFunctionBase && value is int) {
object.minTypeTag = value;
}
break;
case TrackSizingFunctionBase.minValueTagPropertyKey:
if (object is TrackSizingFunctionBase && value is int) {
object.minValueTag = value;
}
break;
case TrackSizingFunctionBase.minValuePropertyKey:
if (object is TrackSizingFunctionBase && value is double) {
object.minValue = value;
}
break;
case TrackSizingFunctionBase.maxTypeTagPropertyKey:
if (object is TrackSizingFunctionBase && value is int) {
object.maxTypeTag = value;
}
break;
case TrackSizingFunctionBase.maxValueTagPropertyKey:
if (object is TrackSizingFunctionBase && value is int) {
object.maxValueTag = value;
}
break;
case TrackSizingFunctionBase.maxValuePropertyKey:
if (object is TrackSizingFunctionBase && value is double) {
object.maxValue = value;
}
break;
case GridTrackSizingGroupBase.trackTagPropertyKey:
if (object is GridTrackSizingGroupBase && value is int) {
object.trackTag = value;
}
break;
case GridTrackSizingGroupBase.isRepeatingPropertyKey:
if (object is GridTrackSizingGroupBase && value is bool) {
object.isRepeating = value;
}
break;
case GridTrackSizingGroupBase.repeatTagPropertyKey:
if (object is GridTrackSizingGroupBase && value is int) {
object.repeatTag = value;
}
break;
case GridTrackSizingGroupBase.repeatCountPropertyKey:
if (object is GridTrackSizingGroupBase && value is int) {
object.repeatCount = value;
}
break;
case ListenerFireEventBase.eventIdPropertyKey:
if (object is ListenerFireEventBase && value is int) {
object.eventId = value;
@ -1912,13 +1856,6 @@ class RiveCoreContext {
case NestedArtboardBase.artboardIdPropertyKey:
case NestedAnimationBase.animationIdPropertyKey:
case SoloBase.activeComponentIdPropertyKey:
case TrackSizingFunctionBase.minTypeTagPropertyKey:
case TrackSizingFunctionBase.minValueTagPropertyKey:
case TrackSizingFunctionBase.maxTypeTagPropertyKey:
case TrackSizingFunctionBase.maxValueTagPropertyKey:
case GridTrackSizingGroupBase.trackTagPropertyKey:
case GridTrackSizingGroupBase.repeatTagPropertyKey:
case GridTrackSizingGroupBase.repeatCountPropertyKey:
case ListenerFireEventBase.eventIdPropertyKey:
case LinearAnimationBase.fpsPropertyKey:
case LinearAnimationBase.durationPropertyKey:
@ -2022,8 +1959,6 @@ class RiveCoreContext {
case TransformComponentBase.scaleYPropertyKey:
case NodeBase.xPropertyKey:
case NodeBase.yPropertyKey:
case TrackSizingFunctionBase.minValuePropertyKey:
case TrackSizingFunctionBase.maxValuePropertyKey:
case LinearAnimationBase.speedPropertyKey:
case NestedLinearAnimationBase.mixPropertyKey:
case NestedSimpleAnimationBase.speedPropertyKey:
@ -2169,7 +2104,6 @@ class RiveCoreContext {
case IKConstraintBase.invertDirectionPropertyKey:
case FollowPathConstraintBase.orientPropertyKey:
case FollowPathConstraintBase.offsetPropertyKey:
case GridTrackSizingGroupBase.isRepeatingPropertyKey:
case LinearAnimationBase.enableWorkAreaPropertyKey:
case LinearAnimationBase.quantizePropertyKey:
case NestedSimpleAnimationBase.isPlayingPropertyKey:
@ -2265,20 +2199,6 @@ class RiveCoreContext {
return (object as NestedAnimationBase).animationId;
case SoloBase.activeComponentIdPropertyKey:
return (object as SoloBase).activeComponentId;
case TrackSizingFunctionBase.minTypeTagPropertyKey:
return (object as TrackSizingFunctionBase).minTypeTag;
case TrackSizingFunctionBase.minValueTagPropertyKey:
return (object as TrackSizingFunctionBase).minValueTag;
case TrackSizingFunctionBase.maxTypeTagPropertyKey:
return (object as TrackSizingFunctionBase).maxTypeTag;
case TrackSizingFunctionBase.maxValueTagPropertyKey:
return (object as TrackSizingFunctionBase).maxValueTag;
case GridTrackSizingGroupBase.trackTagPropertyKey:
return (object as GridTrackSizingGroupBase).trackTag;
case GridTrackSizingGroupBase.repeatTagPropertyKey:
return (object as GridTrackSizingGroupBase).repeatTag;
case GridTrackSizingGroupBase.repeatCountPropertyKey:
return (object as GridTrackSizingGroupBase).repeatCount;
case ListenerFireEventBase.eventIdPropertyKey:
return (object as ListenerFireEventBase).eventId;
case LinearAnimationBase.fpsPropertyKey:
@ -2489,10 +2409,6 @@ class RiveCoreContext {
return (object as NodeBase).x;
case NodeBase.yPropertyKey:
return (object as NodeBase).y;
case TrackSizingFunctionBase.minValuePropertyKey:
return (object as TrackSizingFunctionBase).minValue;
case TrackSizingFunctionBase.maxValuePropertyKey:
return (object as TrackSizingFunctionBase).maxValue;
case LinearAnimationBase.speedPropertyKey:
return (object as LinearAnimationBase).speed;
case NestedLinearAnimationBase.mixPropertyKey:
@ -2787,8 +2703,6 @@ class RiveCoreContext {
return (object as FollowPathConstraintBase).orient;
case FollowPathConstraintBase.offsetPropertyKey:
return (object as FollowPathConstraintBase).offset;
case GridTrackSizingGroupBase.isRepeatingPropertyKey:
return (object as GridTrackSizingGroupBase).isRepeating;
case LinearAnimationBase.enableWorkAreaPropertyKey:
return (object as LinearAnimationBase).enableWorkArea;
case LinearAnimationBase.quantizePropertyKey:
@ -2967,41 +2881,6 @@ class RiveCoreContext {
object.activeComponentId = value;
}
break;
case TrackSizingFunctionBase.minTypeTagPropertyKey:
if (object is TrackSizingFunctionBase) {
object.minTypeTag = value;
}
break;
case TrackSizingFunctionBase.minValueTagPropertyKey:
if (object is TrackSizingFunctionBase) {
object.minValueTag = value;
}
break;
case TrackSizingFunctionBase.maxTypeTagPropertyKey:
if (object is TrackSizingFunctionBase) {
object.maxTypeTag = value;
}
break;
case TrackSizingFunctionBase.maxValueTagPropertyKey:
if (object is TrackSizingFunctionBase) {
object.maxValueTag = value;
}
break;
case GridTrackSizingGroupBase.trackTagPropertyKey:
if (object is GridTrackSizingGroupBase) {
object.trackTag = value;
}
break;
case GridTrackSizingGroupBase.repeatTagPropertyKey:
if (object is GridTrackSizingGroupBase) {
object.repeatTag = value;
}
break;
case GridTrackSizingGroupBase.repeatCountPropertyKey:
if (object is GridTrackSizingGroupBase) {
object.repeatCount = value;
}
break;
case ListenerFireEventBase.eventIdPropertyKey:
if (object is ListenerFireEventBase) {
object.eventId = value;
@ -3517,16 +3396,6 @@ class RiveCoreContext {
object.y = value;
}
break;
case TrackSizingFunctionBase.minValuePropertyKey:
if (object is TrackSizingFunctionBase) {
object.minValue = value;
}
break;
case TrackSizingFunctionBase.maxValuePropertyKey:
if (object is TrackSizingFunctionBase) {
object.maxValue = value;
}
break;
case LinearAnimationBase.speedPropertyKey:
if (object is LinearAnimationBase) {
object.speed = value;
@ -4252,11 +4121,6 @@ class RiveCoreContext {
object.offset = value;
}
break;
case GridTrackSizingGroupBase.isRepeatingPropertyKey:
if (object is GridTrackSizingGroupBase) {
object.isRepeating = value;
}
break;
case LinearAnimationBase.enableWorkAreaPropertyKey:
if (object is LinearAnimationBase) {
object.enableWorkArea = value;

View File

@ -16,33 +16,16 @@ import 'package:rive/src/rive_core/draw_target.dart';
import 'package:rive/src/rive_core/drawable.dart';
import 'package:rive/src/rive_core/event.dart';
import 'package:rive/src/rive_core/joystick.dart';
import 'package:rive/src/rive_core/layout_component.dart';
import 'package:rive/src/rive_core/nested_artboard.dart';
import 'package:rive/src/rive_core/rive_animation_controller.dart';
import 'package:rive/src/rive_core/shapes/paint/shape_paint_mutator.dart';
import 'package:rive/src/rive_core/shapes/shape_paint_container.dart';
import 'package:rive_common/math.dart';
import 'package:rive_common/rive_taffy.dart';
import 'package:rive_common/utilities.dart';
export 'package:rive/src/generated/artboard_base.dart';
class Artboard extends ArtboardBase with ShapePaintContainer {
// Should probably change this to be nullable and make it only when necessary.
final Taffy _taffy = Taffy.make();
@override
Taffy get taffy => _taffy;
final Set<LayoutComponent> _dirtyLayout = {};
Artboard() {
_taffy.disableRounding();
makeTaffyNode(_taffy);
}
void markLayoutDirty(LayoutComponent layoutComponent) {
_dirtyLayout.add(layoutComponent);
}
bool _frameOrigin = true;
bool hasChangedDrawOrderInLastUpdate = false;
@ -211,27 +194,6 @@ class Artboard extends ArtboardBase with ShapePaintContainer {
/// Update any dirty components in this artboard.
bool advance(double elapsedSeconds, {bool nested = false}) {
if (_dirtyLayout.isNotEmpty && taffyNode != null) {
var dirtyLayout = _dirtyLayout.toList();
_dirtyLayout.clear();
for (final layoutComponent in dirtyLayout) {
layoutComponent.syncStyle(taffy);
}
// for (final layout in _dependencyOrder.whereType<LayoutComponent>()) {
// if (layout.taffyNode != null) {
// taffy.markDirty(node: layout.taffyNode!);
// }
// }
var layoutResult = taffy.computeLayout(node: taffyNode!);
if (layoutResult.tag == TaffyResultTag.ok) {
// Need to sync all layout positions.
for (final layout in _dependencyOrder.whereType<LayoutComponent>()) {
layout.updateLayoutBounds(taffy);
}
} else {
print('error with layout');
}
}
bool didUpdate = false;
for (final controller in _animationControllers) {
if (controller.isActive) {

View File

@ -1,59 +0,0 @@
import 'package:rive/src/generated/layout/grid_track_sizing_group_base.dart';
import 'package:rive/src/rive_core/component.dart';
import 'package:rive/src/rive_core/layout/track_sizing_function.dart';
import 'package:rive/src/rive_core/notifier.dart';
import 'package:rive_common/rive_taffy.dart';
export 'package:rive/src/generated/layout/grid_track_sizing_group_base.dart';
enum GridTrackSizingType { templateRow, templateColumn, autoRow, autoColumn }
class GridTrackSizingGroup extends GridTrackSizingGroupBase {
TaffyGridTrackRepetitionTag get repeatType =>
TaffyGridTrackRepetitionTag.values[repeatTag];
GridTrackSizingType get trackType => GridTrackSizingType.values[trackTag];
set trackType(GridTrackSizingType type) => trackTag = type.index;
List<TrackSizingFunction> get sizingFunctions =>
children.whereType<TrackSizingFunction>().toList();
Notifier valueChanged = Notifier();
@override
void trackTagChanged(int from, int to) {}
@override
void isRepeatingChanged(bool from, bool to) {}
@override
void repeatTagChanged(int from, int to) {}
@override
void repeatCountChanged(int from, int to) {}
@override
void update(int dirt) {}
@override
void childAdded(Component child) {
super.childAdded(child);
if (child is TrackSizingFunction) {
child.valueChanged.addListener(_sizingFunctionChanged);
}
_sizingFunctionChanged();
}
@override
void childRemoved(Component child) {
super.childRemoved(child);
if (child is TrackSizingFunction) {
child.valueChanged.removeListener(_sizingFunctionChanged);
}
_sizingFunctionChanged();
}
void _sizingFunctionChanged() {
valueChanged.notify();
}
}

View File

@ -1,56 +0,0 @@
import 'package:rive/src/generated/layout/track_sizing_function_base.dart';
import 'package:rive/src/rive_core/notifier.dart';
import 'package:rive_common/rive_taffy.dart';
export 'package:rive/src/generated/layout/track_sizing_function_base.dart';
class TrackSizingFunction extends TrackSizingFunctionBase {
TaffyMinTrackSizingFunctionTag get minType =>
TaffyMinTrackSizingFunctionTag.values[minTypeTag];
TaffyDimensionTag get minValueType => TaffyDimensionTag.values[minValueTag];
TaffyMaxTrackSizingFunctionTag get maxType =>
TaffyMaxTrackSizingFunctionTag.values[maxTypeTag];
TaffyDimensionTag get maxValueType => TaffyDimensionTag.values[maxValueTag];
Notifier valueChanged = Notifier();
@override
void minTypeTagChanged(int from, int to) {
_notifyValueChanged();
}
@override
void minValueTagChanged(int from, int to) {
_notifyValueChanged();
}
@override
void minValueChanged(double from, double to) {
_notifyValueChanged();
}
@override
void maxTypeTagChanged(int from, int to) {
_notifyValueChanged();
}
@override
void maxValueTagChanged(int from, int to) {
_notifyValueChanged();
}
@override
void maxValueChanged(double from, double to) {
_notifyValueChanged();
}
@override
void update(int dirt) {}
void _notifyValueChanged() {
valueChanged.notify();
}
}

View File

@ -1,17 +1,11 @@
import 'dart:math';
import 'package:collection/collection.dart';
import 'package:flutter/rendering.dart';
import 'package:rive/src/generated/layout_component_base.dart';
import 'package:rive/src/rive_core/artboard.dart';
import 'package:rive/src/rive_core/bounds_provider.dart';
import 'package:rive/src/rive_core/component.dart';
import 'package:rive/src/rive_core/component_dirt.dart';
import 'package:rive/src/rive_core/layout/grid_track_sizing_group.dart';
import 'package:rive/src/rive_core/layout/track_sizing_function.dart';
import 'package:rive/src/rive_core/world_transform_component.dart';
import 'package:rive_common/math.dart';
import 'package:rive_common/rive_taffy.dart';
export 'package:rive/src/generated/layout_component_base.dart';
@ -61,569 +55,102 @@ class LayoutComponent extends LayoutComponentBase {
static const BitFieldLoc insetTopTypeBits = BitFieldLoc(12, 13);
static const BitFieldLoc insetBottomTypeBits = BitFieldLoc(14, 15);
List<GridTrackSizingGroup> get gridTemplateRowSizingFunctions =>
_gridTemplateRowSizing;
List<GridTrackSizingGroup> get gridTemplateColumnSizingFunctions =>
_gridTemplateColumnSizing;
List<GridTrackSizingGroup> get gridAutoRowSizingFunctions =>
_gridAutoRowSizing;
List<GridTrackSizingGroup> get gridAutoColumnSizingFunctions =>
_gridAutoColumnSizing;
final List<GridTrackSizingGroup> _gridTemplateRowSizing = [];
final List<GridTrackSizingGroup> _gridTemplateColumnSizing = [];
final List<GridTrackSizingGroup> _gridAutoRowSizing = [];
final List<GridTrackSizingGroup> _gridAutoColumnSizing = [];
TaffyFlexDirection get flexDirection =>
TaffyFlexDirection.values[flexDirectionBits.read(layoutFlags0)];
set flexDirection(TaffyFlexDirection value) =>
layoutFlags0 = flexDirectionBits.write(layoutFlags0, value.index);
TaffyFlexWrap get flexWrap =>
TaffyFlexWrap.values[flexWrapBits.read(layoutFlags1)];
set flexWrap(TaffyFlexWrap value) =>
layoutFlags1 = flexWrapBits.write(layoutFlags1, value.index);
TaffyAlignItems get alignItems =>
TaffyAlignItems.values[alignItemsBits.read(layoutFlags0)];
set alignItems(TaffyAlignItems value) =>
layoutFlags0 = alignItemsBits.write(layoutFlags0, value.index);
TaffyAlignItems get alignSelf =>
TaffyAlignItems.values[alignSelfBits.read(layoutFlags1)];
set alignSelf(TaffyAlignItems value) =>
layoutFlags1 = alignSelfBits.write(layoutFlags1, value.index);
TaffyAlignItems get justifyItems =>
TaffyAlignItems.values[justifyItemsBits.read(layoutFlags1)];
set justifyItems(TaffyAlignItems value) =>
layoutFlags1 = justifyItemsBits.write(layoutFlags1, value.index);
TaffyAlignItems get justifySelf =>
TaffyAlignItems.values[justifySelfBits.read(layoutFlags1)];
set justifySelf(TaffyAlignItems value) =>
layoutFlags1 = justifySelfBits.write(layoutFlags1, value.index);
TaffyAlignContent get justifyContent =>
TaffyAlignContent.values[justifyContentBits.read(layoutFlags1)];
set justifyContent(TaffyAlignContent value) =>
layoutFlags1 = justifyContentBits.write(layoutFlags1, value.index);
TaffyAlignContent get alignContent =>
TaffyAlignContent.values[alignContentBits.read(layoutFlags1)];
set alignContent(TaffyAlignContent value) =>
layoutFlags1 = alignContentBits.write(layoutFlags1, value.index);
TaffyGridPlacementTag get gridRowStartType =>
TaffyGridPlacementTag.values[gridRowStartTypeBits.read(layoutFlags1)];
set gridRowStartType(TaffyGridPlacementTag value) =>
layoutFlags1 = gridRowStartTypeBits.write(layoutFlags1, value.index);
TaffyGridPlacementTag get gridRowEndType =>
TaffyGridPlacementTag.values[gridRowEndTypeBits.read(layoutFlags1)];
set gridRowEndType(TaffyGridPlacementTag value) =>
layoutFlags1 = gridRowEndTypeBits.write(layoutFlags1, value.index);
TaffyGridPlacementTag get gridColumnStartType =>
TaffyGridPlacementTag.values[gridColumnStartTypeBits.read(layoutFlags1)];
set gridColumnStartType(TaffyGridPlacementTag value) =>
layoutFlags1 = gridColumnStartTypeBits.write(layoutFlags1, value.index);
TaffyGridPlacementTag get gridColumnEndType =>
TaffyGridPlacementTag.values[gridColumnEndTypeBits.read(layoutFlags1)];
set gridColumnEndType(TaffyGridPlacementTag value) =>
layoutFlags1 = gridColumnEndTypeBits.write(layoutFlags1, value.index);
TaffyGridAutoFlow get gridAutoFlow =>
TaffyGridAutoFlow.values[gridAutoFlowBits.read(layoutFlags1)];
set gridAutoFlow(TaffyGridAutoFlow value) =>
layoutFlags1 = gridAutoFlowBits.write(layoutFlags1, value.index);
TaffyDisplay get display =>
TaffyDisplay.values[displayBits.read(layoutFlags0)];
set display(TaffyDisplay value) =>
layoutFlags0 = displayBits.write(layoutFlags0, value.index);
TaffyPosition get position =>
TaffyPosition.values[positionBits.read(layoutFlags0)];
set position(TaffyPosition value) =>
layoutFlags0 = positionBits.write(layoutFlags0, value.index);
TaffyDimensionTag get marginLeftType =>
TaffyDimensionTag.values[marginLeftTypeBits.read(layoutFlags0)];
set marginLeftType(TaffyDimensionTag value) =>
layoutFlags0 = marginLeftTypeBits.write(layoutFlags0, value.index);
TaffyDimensionTag get marginRightType =>
TaffyDimensionTag.values[marginRightTypeBits.read(layoutFlags0)];
set marginRightType(TaffyDimensionTag value) =>
layoutFlags0 = marginRightTypeBits.write(layoutFlags0, value.index);
TaffyDimensionTag get marginTopType =>
TaffyDimensionTag.values[marginTopTypeBits.read(layoutFlags0)];
set marginTopType(TaffyDimensionTag value) =>
layoutFlags0 = marginTopTypeBits.write(layoutFlags0, value.index);
TaffyDimensionTag get marginBottomType =>
TaffyDimensionTag.values[marginBottomTypeBits.read(layoutFlags0)];
set marginBottomType(TaffyDimensionTag value) =>
layoutFlags0 = marginBottomTypeBits.write(layoutFlags0, value.index);
TaffyDimensionTag get paddingLeftType =>
TaffyDimensionTag.values[paddingLeftTypeBits.read(layoutFlags2)];
set paddingLeftType(TaffyDimensionTag value) =>
layoutFlags2 = paddingLeftTypeBits.write(layoutFlags2, value.index);
TaffyDimensionTag get paddingRightType =>
TaffyDimensionTag.values[paddingRightTypeBits.read(layoutFlags2)];
set paddingRightType(TaffyDimensionTag value) =>
layoutFlags2 = paddingRightTypeBits.write(layoutFlags2, value.index);
TaffyDimensionTag get paddingTopType =>
TaffyDimensionTag.values[paddingTopTypeBits.read(layoutFlags2)];
set paddingTopType(TaffyDimensionTag value) =>
layoutFlags2 = paddingTopTypeBits.write(layoutFlags2, value.index);
TaffyDimensionTag get paddingBottomType =>
TaffyDimensionTag.values[paddingBottomTypeBits.read(layoutFlags2)];
set paddingBottomType(TaffyDimensionTag value) =>
layoutFlags2 = paddingBottomTypeBits.write(layoutFlags2, value.index);
TaffyDimensionTag get insetLeftType =>
TaffyDimensionTag.values[insetLeftTypeBits.read(layoutFlags2)];
set insetLeftType(TaffyDimensionTag value) =>
layoutFlags2 = insetLeftTypeBits.write(layoutFlags2, value.index);
TaffyDimensionTag get insetRightType =>
TaffyDimensionTag.values[insetRightTypeBits.read(layoutFlags2)];
set insetRightType(TaffyDimensionTag value) =>
layoutFlags2 = insetRightTypeBits.write(layoutFlags2, value.index);
TaffyDimensionTag get insetTopType =>
TaffyDimensionTag.values[insetTopTypeBits.read(layoutFlags2)];
set insetTopType(TaffyDimensionTag value) =>
layoutFlags2 = insetTopTypeBits.write(layoutFlags2, value.index);
TaffyDimensionTag get insetBottomType =>
TaffyDimensionTag.values[insetBottomTypeBits.read(layoutFlags2)];
set insetBottomType(TaffyDimensionTag value) =>
layoutFlags2 = insetBottomTypeBits.write(layoutFlags2, value.index);
TaffyDimensionTag get gapWidthType =>
TaffyDimensionTag.values[gapWidthTypeBits.read(layoutFlags0)];
set gapWidthType(TaffyDimensionTag value) {
// Can't be set to auto, for simplicity we use the same enum here.
assert(value != TaffyDimensionTag.auto);
layoutFlags0 = gapWidthTypeBits.write(layoutFlags0, value.index);
}
TaffyDimensionTag get gapHeightType =>
TaffyDimensionTag.values[gapHeightTypeBits.read(layoutFlags0)];
set gapHeightType(TaffyDimensionTag value) {
// Can't be set to auto, for simplicity we use the same enum here.
assert(value != TaffyDimensionTag.auto);
layoutFlags0 = gapHeightTypeBits.write(layoutFlags0, value.index);
}
TaffyDimensionTag get widthType =>
TaffyDimensionTag.values[widthTypeBits.read(layoutFlags0)];
set widthType(TaffyDimensionTag value) =>
layoutFlags0 = widthTypeBits.write(layoutFlags0, value.index);
TaffyDimensionTag get heightType =>
TaffyDimensionTag.values[heightTypeBits.read(layoutFlags0)];
set heightType(TaffyDimensionTag value) =>
layoutFlags0 = heightTypeBits.write(layoutFlags0, value.index);
TaffyDimensionTag get minWidthType =>
TaffyDimensionTag.values[minWidthTypeBits.read(layoutFlags0)];
set minWidthType(TaffyDimensionTag value) =>
layoutFlags0 = minWidthTypeBits.write(layoutFlags0, value.index);
TaffyDimensionTag get minHeightType =>
TaffyDimensionTag.values[minHeightTypeBits.read(layoutFlags0)];
set minHeightType(TaffyDimensionTag value) =>
layoutFlags0 = minHeightTypeBits.write(layoutFlags0, value.index);
TaffyDimensionTag get maxWidthType =>
TaffyDimensionTag.values[maxWidthTypeBits.read(layoutFlags0)];
set maxWidthType(TaffyDimensionTag value) =>
layoutFlags0 = maxWidthTypeBits.write(layoutFlags0, value.index);
TaffyDimensionTag get maxHeightType =>
TaffyDimensionTag.values[maxHeightTypeBits.read(layoutFlags0)];
set maxHeightType(TaffyDimensionTag value) =>
layoutFlags0 = maxHeightTypeBits.write(layoutFlags0, value.index);
bool get intrinsicallySized => intrinsicallySizedBits.read(layoutFlags0) == 1;
set intrinsicallySized(bool value) =>
intrinsicallySizedBits.write(layoutFlags0, value ? 1 : 0);
void markTaffyNodeDirty() {
if (_taffyNode != null) {
taffy?.markDirty(node: _taffyNode!);
artboard?.markLayoutDirty(this);
}
}
Taffy? get taffy => artboard?.taffy;
TaffyNode? _taffyNode;
TaffyNode? get taffyNode => _taffyNode;
TaffyStyle? _style;
void syncStyle(Taffy taffy) {
if (_taffyNode == null || _style == null) {
return;
}
_syncStyle(taffy, _style!, _taffyNode!);
}
void _syncStyle(Taffy taffy, TaffyStyle style, TaffyNode taffyNode) {
bool setIntrinsicWidth = false;
bool setIntrinsicHeight = false;
if (intrinsicallySized &&
(widthType == TaffyDimensionTag.auto ||
heightType == TaffyDimensionTag.auto)) {
bool foundIntrinsicSize = false;
Size intrinsicSize = Size.zero;
forEachChild((child) {
if (child is LayoutComponent) {
return false;
}
if (child is Sizable) {
var minSize = Size(
minWidthType == TaffyDimensionTag.points ? minWidth : 0,
minHeightType == TaffyDimensionTag.points ? minHeight : 0,
);
var maxSize = Size(
maxWidthType == TaffyDimensionTag.points
? maxWidth
: double.infinity,
maxHeightType == TaffyDimensionTag.points
? maxHeight
: double.infinity,
);
var size = (child as Sizable).computeIntrinsicSize(minSize, maxSize);
intrinsicSize = Size(max(intrinsicSize.width, size.width),
max(intrinsicSize.height, size.height));
foundIntrinsicSize = true;
}
return true;
});
if (foundIntrinsicSize) {
if (widthType == TaffyDimensionTag.auto) {
setIntrinsicWidth = true;
style.size.width.tag = TaffyDimensionTag.points;
style.size.width.value = intrinsicSize.width;
}
if (heightType == TaffyDimensionTag.auto) {
setIntrinsicHeight = true;
style.size.height.tag = TaffyDimensionTag.points;
style.size.height.value = intrinsicSize.height;
}
}
}
style.display = display;
style.position = position;
if (!setIntrinsicWidth) {
style.size.width.tag = widthType;
style.size.width.value = width;
}
if (!setIntrinsicHeight) {
style.size.height.tag = heightType;
style.size.height.value = height;
}
style.minSize.width.tag = minWidthType;
style.minSize.width.value = minWidth;
style.minSize.height.tag = minHeightType;
style.minSize.height.value = minHeight;
style.maxSize.width.tag = maxWidthType;
style.maxSize.width.value = maxWidth;
style.maxSize.height.tag = maxHeightType;
style.maxSize.height.value = maxHeight;
style.gap.width.tag = gapWidthType;
style.gap.height.tag = gapHeightType;
style.flexDirection = flexDirection;
style.flexWrap = flexWrap;
style.alignItems = alignItems;
style.alignSelf = alignSelf;
style.justifyItems = justifyItems;
style.justifySelf = justifySelf;
style.alignContent = alignContent;
style.justifyContent = justifyContent;
style.gap.width.value = gapWidth;
style.gap.height.value = gapHeight;
style.flexGrow = flexGrow;
style.flexShrink = flexShrink;
//style.aspectRatio = aspectRatio;
style.margin.left.tag = marginLeftType;
style.margin.left.value = marginLeft;
style.margin.right.tag = marginRightType;
style.margin.right.value = marginRight;
style.margin.top.tag = marginTopType;
style.margin.top.value = marginTop;
style.margin.bottom.tag = marginBottomType;
style.margin.bottom.value = marginBottom;
style.padding.left.tag = paddingLeftType;
style.padding.left.value = paddingLeft;
style.padding.right.tag = paddingRightType;
style.padding.right.value = paddingRight;
style.padding.top.tag = paddingTopType;
style.padding.top.value = paddingTop;
style.padding.bottom.tag = paddingBottomType;
style.padding.bottom.value = paddingBottom;
style.inset.left.tag = insetLeftType;
style.inset.left.value = insetLeft;
style.inset.right.tag = insetRightType;
style.inset.right.value = insetRight;
style.inset.top.tag = insetTopType;
style.inset.top.value = insetTop;
style.inset.bottom.tag = insetBottomType;
style.inset.bottom.value = insetBottom;
// Grid container properties
style.gridAutoFlow = gridAutoFlow;
style.gridTemplateRows = _convertToRepeatableModels(_gridTemplateRowSizing);
style.gridTemplateColumns =
_convertToRepeatableModels(_gridTemplateColumnSizing);
style.gridAutoRows = _convertToSingleModels(_gridAutoRowSizing);
style.gridAutoColumns = _convertToSingleModels(_gridAutoColumnSizing);
// Grid child properties
style.gridRow.start.tag = gridRowStartType;
style.gridRow.start.lineIndex =
gridRowStartType == TaffyGridPlacementTag.line ? gridRowStart : 1;
style.gridRow.start.span =
gridRowStartType == TaffyGridPlacementTag.span ? gridRowStart : 1;
style.gridRow.end.tag = gridRowEndType;
style.gridRow.end.lineIndex =
gridRowEndType == TaffyGridPlacementTag.line ? gridRowEnd : 1;
style.gridRow.end.span =
gridRowEndType == TaffyGridPlacementTag.span ? gridRowEnd : 1;
style.gridColumn.start.tag = gridColumnStartType;
style.gridColumn.start.lineIndex =
gridColumnStartType == TaffyGridPlacementTag.line ? gridColumnStart : 1;
style.gridColumn.start.span =
gridColumnStartType == TaffyGridPlacementTag.span ? gridColumnStart : 1;
style.gridColumn.end.tag = gridColumnEndType;
style.gridColumn.end.lineIndex =
gridColumnEndType == TaffyGridPlacementTag.line ? gridColumnEnd : 1;
style.gridColumn.end.span =
gridColumnEndType == TaffyGridPlacementTag.span ? gridColumnEnd : 1;
taffy.setStyle(node: taffyNode, style: style);
}
List<TaffyRepeatableTrackSizingModel> _convertToRepeatableModels(
List<GridTrackSizingGroup> from) {
List<TaffyRepeatableTrackSizingModel> to = [];
for (final func in from) {
var converted = _convertToRepeatableModel(func);
to.add(converted);
}
return to;
}
List<TaffySingleTrackSizingModel> _convertToSingleModels(
List<GridTrackSizingGroup> from) {
List<TaffySingleTrackSizingModel> to = [];
for (final func in from) {
if (func.sizingFunctions.isNotEmpty) {
var converted = _convertToSingleModel(func.sizingFunctions.first);
to.add(converted);
}
}
return to;
}
TaffyRepeatableTrackSizingModel _convertToRepeatableModel(
GridTrackSizingGroup from) {
var type = from.isRepeating
? TaffyTrackSizingFunctionTag.repeat
: TaffyTrackSizingFunctionTag.single;
var converted = TaffyRepeatableTrackSizingModel(type: type);
if (from.isRepeating) {
converted.repeatType = from.repeatType;
converted.repeatCount = from.repeatCount;
List<TaffySingleTrackSizingModel> funcs = [];
for (final func in from.sizingFunctions) {
var converted = _convertToSingleModel(func);
funcs.add(converted);
}
converted.repeatModels = funcs;
} else {
converted.singleModel = _convertToSingleModel(from.sizingFunctions.first);
}
return converted;
}
TaffySingleTrackSizingModel _convertToSingleModel(TrackSizingFunction from) {
var converted = TaffySingleTrackSizingModel(
minType: from.minType,
minValueType: from.minValueType,
minValue: from.minValue,
maxType: from.maxType,
maxValueType: from.maxValueType,
maxValue: from.maxValue);
return converted;
}
void makeTaffyNode(Taffy taffy) {
var result = taffy.node();
if (result.tag == TaffyResultTag.ok) {
_taffyNode = result.node;
var style = taffy.defaultStyle();
_style?.dispose();
_style = style;
}
}
@override
void clipChanged(bool from, bool to) {}
@override
void changeArtboard(Artboard? value) {
_removeTaffyNode();
var taffy = value?.taffy;
if (taffy != null) {
makeTaffyNode(taffy);
}
super.changeArtboard(value);
artboard?.markLayoutDirty(this);
if (parent is LayoutComponent) {
(parent as LayoutComponent).syncLayoutChildren();
}
}
void gapHeightChanged(double from, double to) {}
@override
void clipChanged(bool from, bool to) => markTaffyNodeDirty();
void gapWidthChanged(double from, double to) {}
@override
void gapHeightChanged(double from, double to) => markTaffyNodeDirty();
void layoutFlags0Changed(int from, int to) {}
@override
void gapWidthChanged(double from, double to) => markTaffyNodeDirty();
void layoutFlags1Changed(int from, int to) {}
@override
void layoutFlags0Changed(int from, int to) => markTaffyNodeDirty();
void layoutFlags2Changed(int from, int to) {}
@override
void layoutFlags1Changed(int from, int to) => markTaffyNodeDirty();
void heightChanged(double from, double to) {}
@override
void layoutFlags2Changed(int from, int to) => markTaffyNodeDirty();
void widthChanged(double from, double to) {}
@override
void heightChanged(double from, double to) => markTaffyNodeDirty();
void maxHeightChanged(double from, double to) {}
@override
void widthChanged(double from, double to) => markTaffyNodeDirty();
void maxWidthChanged(double from, double to) {}
@override
void maxHeightChanged(double from, double to) => markTaffyNodeDirty();
void minHeightChanged(double from, double to) {}
@override
void maxWidthChanged(double from, double to) => markTaffyNodeDirty();
void minWidthChanged(double from, double to) {}
@override
void minHeightChanged(double from, double to) => markTaffyNodeDirty();
void flexGrowChanged(double from, double to) {}
@override
void minWidthChanged(double from, double to) => markTaffyNodeDirty();
void flexShrinkChanged(double from, double to) {}
@override
void flexGrowChanged(double from, double to) => markTaffyNodeDirty();
void aspectRatioChanged(double from, double to) {}
@override
void flexShrinkChanged(double from, double to) => markTaffyNodeDirty();
void marginBottomChanged(double from, double to) {}
@override
void aspectRatioChanged(double from, double to) => markTaffyNodeDirty();
void marginLeftChanged(double from, double to) {}
@override
void marginBottomChanged(double from, double to) => markTaffyNodeDirty();
void marginRightChanged(double from, double to) {}
@override
void marginLeftChanged(double from, double to) => markTaffyNodeDirty();
void marginTopChanged(double from, double to) {}
@override
void marginRightChanged(double from, double to) => markTaffyNodeDirty();
void paddingBottomChanged(double from, double to) {}
@override
void marginTopChanged(double from, double to) => markTaffyNodeDirty();
void paddingLeftChanged(double from, double to) {}
@override
void paddingBottomChanged(double from, double to) => markTaffyNodeDirty();
void paddingRightChanged(double from, double to) {}
@override
void paddingLeftChanged(double from, double to) => markTaffyNodeDirty();
void paddingTopChanged(double from, double to) {}
@override
void paddingRightChanged(double from, double to) => markTaffyNodeDirty();
void insetBottomChanged(double from, double to) {}
@override
void paddingTopChanged(double from, double to) => markTaffyNodeDirty();
void insetLeftChanged(double from, double to) {}
@override
void insetBottomChanged(double from, double to) => markTaffyNodeDirty();
void insetRightChanged(double from, double to) {}
@override
void insetLeftChanged(double from, double to) => markTaffyNodeDirty();
void insetTopChanged(double from, double to) {}
@override
void insetRightChanged(double from, double to) => markTaffyNodeDirty();
void gridRowStartChanged(int from, int to) {}
@override
void insetTopChanged(double from, double to) => markTaffyNodeDirty();
void gridRowEndChanged(int from, int to) {}
@override
void gridRowStartChanged(int from, int to) => markTaffyNodeDirty();
void gridColumnStartChanged(int from, int to) {}
@override
void gridRowEndChanged(int from, int to) => markTaffyNodeDirty();
@override
void gridColumnStartChanged(int from, int to) => markTaffyNodeDirty();
@override
void gridColumnEndChanged(int from, int to) => markTaffyNodeDirty();
// We should call this whenever any property on any of the sizing objects
// is updated
void gridSizingUpdated() {
markTaffyNodeDirty();
}
void gridColumnEndChanged(int from, int to) {}
@override
void update(int dirt) {
@ -640,90 +167,8 @@ class LayoutComponent extends LayoutComponentBase {
}
}
void syncLayoutChildren() {
var node = _taffyNode;
if (node == null) {
return;
}
taffy?.setChildren(
parent: node,
children: children
.whereType<LayoutComponent>()
.map((child) => child.taffyNode)
.whereNotNull()
.toList());
}
@override
void childAdded(Component child) {
super.childAdded(child);
switch (child.coreType) {
case GridTrackSizingGroupBase.typeKey:
var group = child as GridTrackSizingGroup;
group.valueChanged.addListener(_gridContainerValueChanged);
switch (group.trackType) {
case GridTrackSizingType.templateRow:
_gridTemplateRowSizing.add(child);
break;
case GridTrackSizingType.templateColumn:
_gridTemplateColumnSizing.add(child);
break;
case GridTrackSizingType.autoRow:
_gridAutoRowSizing.add(child);
break;
case GridTrackSizingType.autoColumn:
_gridAutoColumnSizing.add(child);
break;
}
}
markTaffyNodeDirty();
}
@override
void childRemoved(Component child) {
super.childRemoved(child);
switch (child.coreType) {
case GridTrackSizingGroupBase.typeKey:
var group = child as GridTrackSizingGroup;
group.valueChanged.removeListener(_gridContainerValueChanged);
switch (group.trackType) {
case GridTrackSizingType.templateRow:
_gridTemplateRowSizing.remove(child);
break;
case GridTrackSizingType.templateColumn:
_gridTemplateColumnSizing.remove(child);
break;
case GridTrackSizingType.autoRow:
_gridAutoRowSizing.remove(child);
break;
case GridTrackSizingType.autoColumn:
_gridAutoColumnSizing.remove(child);
break;
}
}
markTaffyNodeDirty();
}
void _gridContainerValueChanged() {
markTaffyNodeDirty();
}
@override
void onAdded() {
super.onAdded();
syncLayoutChildren();
}
Offset _layoutLocation = Offset.zero;
Size _layoutSize = Size.zero;
final Offset _layoutLocation = Offset.zero;
final Size _layoutSize = Size.zero;
AABB get localBounds {
return AABB.fromValues(
@ -753,51 +198,6 @@ class LayoutComponent extends LayoutComponentBase {
});
}
void updateLayoutBounds(Taffy taffy) {
var taffyNode = _taffyNode;
if (taffyNode == null) {
return;
}
var layoutValueResult = taffy.layout(node: taffyNode);
if (layoutValueResult.tag == TaffyResultTag.ok) {
var layout = layoutValueResult.layout!;
if (layout.location != _layoutLocation || layout.size != _layoutSize) {
// TODO: Sometimes taffy returns NaN for these values, we need to handle
// this/show an error.
_layoutLocation =
layout.location.isFinite ? layout.location : Offset.zero;
_layoutSize = layout.size.isFinite ? layout.size : Size.zero;
propagateSize();
markWorldTransformDirty();
} else if (false /*was content resized*/) {
markWorldTransformDirty();
}
} else {
print('hmm no layout?!');
}
}
void _removeTaffyNode() {
if (_taffyNode != null) {
artboard?.taffy.remove(node: _taffyNode!);
_taffyNode = null;
_style?.dispose();
_style = null;
}
var parent = this.parent;
if (parent is LayoutComponent) {
parent.markTaffyNodeDirty();
}
}
@override
void onRemoved() {
_removeTaffyNode();
super.onRemoved();
}
@override
void buildDependencies() {
super.buildDependencies();

View File

@ -547,7 +547,6 @@ class Text extends TextBase with TextStyleContainer implements Sizable {
if (sendToLayout) {
for (ContainerComponent? p = parent; p != null; p = p.parent) {
if (p is LayoutComponent) {
p.markTaffyNodeDirty();
// break;
}
}

View File

@ -68,12 +68,6 @@ function installRiveCpp {
git checkout v2.6 .
popd
fi
if [ $FORCE == "true" ]; then
echo "Installing rustup"
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
$HOME/.cargo/bin/rustup component add rust-src --toolchain nightly-2023-05-27-aarch64-apple-darwin
fi
}
pushd macos