Skip to content

Commit

Permalink
Use rendererstates instead of ElementsRemoved in select
Browse files Browse the repository at this point in the history
  • Loading branch information
CodeDoctorDE committed Sep 26, 2023
1 parent 6b75dbe commit 23acf03
Show file tree
Hide file tree
Showing 5 changed files with 35 additions and 17 deletions.
18 changes: 14 additions & 4 deletions app/lib/cubits/current_index.dart
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ class CurrentIndexCubit extends Cubit<CurrentIndex> {
foregrounds: handler.createForegrounds(
this, document, blocState.page, info, blocState.currentArea),
toolbar: handler.getToolbar(bloc),
rendererStates: handler.getRendererStates(bloc),
rendererStates: handler.rendererStates,
temporaryForegrounds: null,
temporaryHandler: null,
temporaryToolbar: null,
Expand Down Expand Up @@ -154,7 +154,7 @@ class CurrentIndexCubit extends Cubit<CurrentIndex> {
handler: handler,
foregrounds: foregrounds,
toolbar: handler.getToolbar(bloc),
rendererStates: handler.getRendererStates(bloc),
rendererStates: handler.rendererStates,
cursor: handler.cursor ?? MouseCursor.defer,
));
}
Expand All @@ -173,7 +173,7 @@ class CurrentIndexCubit extends Cubit<CurrentIndex> {
temporaryHandler: handler,
temporaryForegrounds: temporaryForegrounds,
temporaryToolbar: handler.getToolbar(bloc),
temporaryRendererStates: handler.getRendererStates(bloc),
temporaryRendererStates: handler.rendererStates,
temporaryCursor: handler.cursor,
));
}
Expand Down Expand Up @@ -214,12 +214,21 @@ class CurrentIndexCubit extends Cubit<CurrentIndex> {
.createForegrounds(this, document, page, info, currentArea);
await Future.wait(foregrounds
.map((e) async => await e.setup(document, assetService, page)));
final rendererStates = state.handler.rendererStates;
final temporaryRendererStates = state.temporaryHandler?.rendererStates;
final shouldBake = state.rendererStates != rendererStates ||
state.temporaryRendererStates != temporaryRendererStates;
emit(state.copyWith(
temporaryForegrounds: temporaryForegrounds,
foregrounds: foregrounds,
cursor: state.handler.cursor ?? MouseCursor.defer,
temporaryCursor: state.temporaryHandler?.cursor,
rendererStates: rendererStates,
temporaryRendererStates: temporaryRendererStates,
));
if (shouldBake) {
bake(document, page, info, reset: true);
}
}
}

Expand Down Expand Up @@ -313,7 +322,7 @@ class CurrentIndexCubit extends Cubit<CurrentIndex> {
temporaryForegrounds: temporaryForegrounds,
temporaryToolbar: handler.getToolbar(bloc),
temporaryCursor: handler.cursor,
temporaryRendererStates: handler.getRendererStates(bloc),
temporaryRendererStates: handler.rendererStates,
));
}
return handler;
Expand Down Expand Up @@ -387,6 +396,7 @@ class CurrentIndexCubit extends Cubit<CurrentIndex> {
page,
info,
transform: state.transformCubit.state,
states: state.allRendererStates,
cameraViewport: reset
? cameraViewport.unbake(
unbakedElements: visibleElements,
Expand Down
2 changes: 1 addition & 1 deletion app/lib/handlers/handler.dart
Original file line number Diff line number Diff line change
Expand Up @@ -240,7 +240,7 @@ abstract class Handler<T> {

PreferredSizeWidget? getToolbar(DocumentBloc bloc) => null;

Map<Renderer, RendererState> getRendererStates(DocumentBloc bloc) => const {};
Map<Renderer, RendererState> get rendererStates => const {};

void dispose(DocumentBloc bloc) {}

Expand Down
21 changes: 12 additions & 9 deletions app/lib/handlers/select.dart
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,7 @@ class SelectHandler extends Handler<SelectTool> {
HandTransformCorner? _transformCorner;
List<Renderer<PadElement>> _selected = [];
List<Renderer<PadElement>> _transformed = [];
bool _duplicate = false;
Offset? _transformStartOffset;
Offset? _contextMenuOffset;
Rect? _rectangleFreeSelection;
Expand All @@ -173,15 +174,14 @@ class SelectHandler extends Handler<SelectTool> {
_selected = [];
_transformCorner = corner;
_transformStartOffset = _currentMousePosition;
if (!duplicate) {
final state = bloc.state;
if (state is! DocumentLoaded) return;
bloc.add(ElementsRemoved(
next.map((e) => state.page.content.indexOf(e.element)).toList()));
}
_duplicate = duplicate;
bloc.refresh();
}

@override
Map<Renderer, RendererState> get rendererStates => Map.fromEntries(
_transformed.map((e) => MapEntry(e, RendererState.hidden)));

@override
void resetInput(DocumentBloc bloc) {
_resetTransform();
Expand Down Expand Up @@ -360,10 +360,13 @@ class SelectHandler extends Handler<SelectTool> {
final current = _getTransformed();
_selected = current ?? _transformed;
_transformCorner = null;
_transformed = [];
_transformMode = HandTransformMode.scale;
await Future.sync(() =>
bloc.add(ElementsCreated(current!.map((e) => e.element).toList())));
await Future.sync(() => bloc.add(_duplicate
? ElementsCreated(current!.map((e) => e.element).toList())
: ElementsChanged(Map.fromEntries(current!.mapIndexed((i, e) =>
MapEntry(state.page.content.indexOf(_transformed[i].element),
[e.element]))))));
_transformed = [];
bloc.refresh();
return true;
}
Expand Down
5 changes: 3 additions & 2 deletions app/lib/view_painter.dart
Original file line number Diff line number Diff line change
Expand Up @@ -154,7 +154,7 @@ class ViewPainter extends CustomPainter {
}
canvas.scale(transform.size, transform.size);
canvas.translate(transform.position.dx, transform.position.dy);
for (var renderer in cameraViewport.unbakedElements) {
for (final renderer in cameraViewport.unbakedElements) {
final state = states[renderer];
if (!invisibleLayers.contains(renderer.element.layer) &&
state != RendererState.hidden) {
Expand Down Expand Up @@ -187,6 +187,7 @@ class ViewPainter extends CustomPainter {
renderBackground != oldDelegate.renderBackground ||
transform != oldDelegate.transform ||
cameraViewport != oldDelegate.cameraViewport ||
colorScheme != oldDelegate.colorScheme;
colorScheme != oldDelegate.colorScheme ||
states != oldDelegate.states;
}
}
6 changes: 5 additions & 1 deletion app/lib/views/view.dart
Original file line number Diff line number Diff line change
Expand Up @@ -184,7 +184,10 @@ class _MainViewViewportState extends State<MainViewViewport>
previous.foregrounds != current.foregrounds ||
previous.handler != current.handler ||
previous.temporaryHandler != current.temporaryHandler ||
previous.temporaryForegrounds != current.temporaryForegrounds,
previous.temporaryForegrounds != current.temporaryForegrounds ||
previous.rendererStates != current.rendererStates ||
previous.temporaryRendererStates !=
current.temporaryRendererStates,
builder: (context, currentIndex) => Actions(
actions: getHandler().getActions(context),
child: DefaultTextEditingShortcuts(
Expand Down Expand Up @@ -342,6 +345,7 @@ class _MainViewViewportState extends State<MainViewViewport>
cameraViewport: currentIndex.cameraViewport,
transform: transform,
invisibleLayers: state.invisibleLayers,
states: currentIndex.allRendererStates,
currentArea: state.currentArea,
colorScheme: Theme.of(context).colorScheme,
),
Expand Down

0 comments on commit 23acf03

Please sign in to comment.