mirror of
https://github.com/rive-app/rive-flutter
synced 2025-06-22 01:55:59 +00:00
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:
@ -1 +1 @@
|
||||
8bca56dcaffd0f563a91f628b0ed432eca71acb5
|
||||
12cf6b8c3cba1e2d11ec17c1e11d6c25fee423ab
|
||||
|
@ -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;
|
||||
|
@ -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) {
|
||||
|
@ -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();
|
||||
}
|
||||
}
|
@ -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();
|
||||
}
|
||||
}
|
@ -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();
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
|
Reference in New Issue
Block a user