Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

PAINTROID-454: Flutter: Add Layers #102

Draft
wants to merge 17 commits into
base: develop
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
17 commits
Select commit Hold shift + click to select a range
b4d9680
PAINTROID-454: Flutter: Add Layers
Lenkomotive Oct 9, 2024
23485ba
PAINTROID-454: Flutter: Add Layers - remove unused parameter
Lenkomotive Oct 9, 2024
08de768
PAINTROID-454: Flutter: Add Layers - refactor ToolOptions to use fade…
Lenkomotive Oct 9, 2024
0f84aa8
PAINTROID-454: Flutter: Add Layers - hide after clicking on canvas
Lenkomotive Oct 9, 2024
80a1af5
PAINTROID-454: Flutter: Add Layers - hide after clicking on canvas
Lenkomotive Oct 9, 2024
bc56d56
PAINTROID-454: Flutter: Add Layers - reorder positions, select, delet…
Lenkomotive Oct 10, 2024
9d428d8
PAINTROID-454: Flutter: Add Layers - reorder positions, select, delet…
Lenkomotive Oct 10, 2024
3dc0ed4
PAINTROID-454: Flutter: Add Layers - reorder positions, fix some bugs
Lenkomotive Oct 12, 2024
6eb0be0
PAINTROID-454: Flutter: Add Layers - add more functionality
Lenkomotive Oct 12, 2024
8190c03
PAINTROID-454: Flutter: Add Layers - select only one
Lenkomotive Oct 19, 2024
4eec72b
PAINTROID-454: Flutter: Add Layers - add image to layer
Lenkomotive Oct 19, 2024
d5297c0
PAINTROID-454: Flutter: Add Layers - combining all images
Lenkomotive Oct 19, 2024
f15d742
PAINTROID-454: Flutter: Add Layers - revert layer combination
Lenkomotive Jan 24, 2025
e6f8c4e
Merge branch 'develop' into PAINTROID-454
Lenkomotive Jan 24, 2025
dd165c4
PAINTROID-454: Flutter: Add Layers - revert layer combination
Lenkomotive Jan 24, 2025
f074728
PAINTROID-454: Flutter: Add Layers
Lenkomotive Jan 24, 2025
2c6c8ae
PAINTROID-454: Flutter: Add Layers
Lenkomotive Jan 25, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 6 additions & 6 deletions ios/Podfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -121,18 +121,18 @@ SPEC CHECKSUMS:
file_picker: ce3938a0df3cc1ef404671531facef740d03f920
Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7
flutter_localization: f43b18844a2b3d2c71fd64f04ffd6b1e64dd54d4
image_picker_ios: 99dfe1854b4fa34d0364e74a78448a0151025425
integration_test: 252f60fa39af5e17c3aa9899d35d908a0721b573
image_picker_ios: c560581cceedb403a6ff17f2f816d7fea1421fc1
integration_test: ce0a3ffa1de96d1a89ca0ac26fca7ea18a749ef4
launch_review: 75d5a956ba8eaa493e9c9d4bf4c05e505e8d5ed0
package_info_plus: 115f4ad11e0698c8c1c5d8a689390df880f47e85
path_provider_foundation: 3784922295ac71e43754bd15e0653ccfd36a147c
path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46
permission_handler_apple: e76247795d700c14ea09e3a2d8855d41ee80a2e6
SDWebImage: dfe95b2466a9823cf9f0c6d01217c06550d7b29a
shared_preferences_foundation: b4c3b4cddf1c21f02770737f147a3f5da9d39695
shared_preferences_foundation: fcdcbc04712aee1108ac7fda236f363274528f78
sqflite: 673a0e54cc04b7d6dba8d24fb8095b31c3a99eec
SwiftyGif: 706c60cf65fa2bc5ee0313beece843c8eb8194d4
url_launcher_ios: bbd758c6e7f9fd7b5b1d4cde34d2b95fcce5e812
url_launcher_ios: 5334b05cef931de560670eeae103fd3e431ac3fe

PODFILE CHECKSUM: 303789365c3a8d7bc562e5e65d7e8e15218ec5c6

COCOAPODS: 1.15.0
COCOAPODS: 1.16.2
24 changes: 16 additions & 8 deletions lib/core/commands/command_factory/command_factory.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import 'dart:ui';

import 'package:flutter/cupertino.dart';
import 'package:paintroid/core/commands/command_implementation/graphic/line_command.dart';
import 'package:paintroid/core/commands/command_implementation/graphic/path_command.dart';
import 'package:paintroid/core/commands/command_implementation/graphic/shape/circle_shape_command.dart';
Expand All @@ -13,34 +12,43 @@ class CommandFactory {
PathCommand createPathCommand(
PathWithActionHistory path,
Paint paint,
ValueKey layerKey,
) =>
PathCommand(path, paint);
PathCommand(path, paint, layerKey);

LineCommand createLineCommand(
PathWithActionHistory path,
Paint paint,
Offset startPoint,
Offset endPoint,
ValueKey layerKey,
) =>
LineCommand(path, paint, startPoint, endPoint);
LineCommand(path, paint, layerKey, startPoint, endPoint);

SquareShapeCommand createSquareShapeCommand(
Paint paint,
Offset topLeft,
Offset topRight,
Offset bottomLeft,
Offset bottomRight,
ValueKey layerKey,
) =>
SquareShapeCommand(paint, topLeft, topRight, bottomLeft, bottomRight);
SquareShapeCommand(
paint, layerKey, topLeft, topRight, bottomLeft, bottomRight);

CircleShapeCommand createCircleShapeCommand(
Paint paint,
double radius,
Offset center,
ValueKey layerKey,
) =>
CircleShapeCommand(paint, radius, center);
CircleShapeCommand(paint, layerKey, radius, center);

SprayCommand createSprayCommand(List<Offset> points, Paint paint) {
return SprayCommand(points, paint);
SprayCommand createSprayCommand(
List<Offset> points,
Paint paint,
ValueKey layerKey,
) {
return SprayCommand(points, paint, layerKey);
}
}
Original file line number Diff line number Diff line change
@@ -1,13 +1,16 @@
import 'dart:ui';

import 'package:flutter/cupertino.dart';
import 'package:paintroid/core/commands/command_implementation/command.dart';
import 'package:paintroid/core/json_serialization/converter/paint_converter.dart';
import 'package:paintroid/core/json_serialization/converter/value_key_converter.dart';

abstract class GraphicCommand extends Command {
const GraphicCommand(this.paint);
const GraphicCommand(this.paint, this.layerKey);

@PaintConverter()
final Paint paint;

@ValueKeyConverter()
final ValueKey layerKey;

void call(Canvas canvas);
}
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
import 'dart:ui';

import 'package:freezed_annotation/freezed_annotation.dart';

import 'package:paintroid/core/commands/command_implementation/graphic/graphic_command.dart';
import 'package:paintroid/core/commands/path_with_action_history.dart';
import 'package:paintroid/core/json_serialization/converter/offset_converter.dart';
import 'package:paintroid/core/json_serialization/converter/paint_converter.dart';
import 'package:paintroid/core/json_serialization/converter/path_with_action_history_converter.dart';
import 'package:paintroid/core/json_serialization/converter/value_key_converter.dart';
import 'package:paintroid/core/json_serialization/versioning/serializer_version.dart';
import 'package:paintroid/core/json_serialization/versioning/version_strategy.dart';

Expand All @@ -30,6 +30,7 @@ class LineCommand extends GraphicCommand {
LineCommand(
this.path,
super.paint,
super.layerKey,
this.startPoint,
this.endPoint, {
this.type = SerializerType.LINE_COMMAND,
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
@@ -1,13 +1,12 @@
import 'dart:ui';

import 'package:flutter/widgets.dart';

import 'package:json_annotation/json_annotation.dart';

import 'package:paintroid/core/commands/command_implementation/graphic/graphic_command.dart';
import 'package:paintroid/core/commands/path_with_action_history.dart';
import 'package:paintroid/core/json_serialization/converter/paint_converter.dart';
import 'package:paintroid/core/json_serialization/converter/path_with_action_history_converter.dart';
import 'package:paintroid/core/json_serialization/converter/value_key_converter.dart';
import 'package:paintroid/core/json_serialization/versioning/serializer_version.dart';
import 'package:paintroid/core/json_serialization/versioning/version_strategy.dart';

Expand All @@ -20,7 +19,8 @@ class PathCommand extends GraphicCommand {

PathCommand(
this.path,
super.paint, {
super.paint,
super.layerKey, {
this.type = SerializerType.PATH_COMMAND,
int? version,
}) : version =
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:paintroid/core/commands/command_implementation/graphic/shape/shape_command.dart';
import 'package:paintroid/core/json_serialization/converter/offset_converter.dart';
import 'package:paintroid/core/json_serialization/converter/paint_converter.dart';
import 'package:paintroid/core/json_serialization/converter/value_key_converter.dart';
import 'package:paintroid/core/json_serialization/versioning/serializer_version.dart';
import 'package:paintroid/core/json_serialization/versioning/version_strategy.dart';

Expand All @@ -20,6 +21,7 @@ class CircleShapeCommand extends ShapeCommand {

CircleShapeCommand(
super.paint,
super.layerKey,
this.radius,
this.center, {
int? version,
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import 'package:paintroid/core/commands/command_implementation/graphic/graphic_command.dart';

abstract class ShapeCommand extends GraphicCommand {
ShapeCommand(super.paint);
ShapeCommand(super.paint, super.layerKey);
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:paintroid/core/commands/command_implementation/graphic/shape/shape_command.dart';
import 'package:paintroid/core/json_serialization/converter/offset_converter.dart';
import 'package:paintroid/core/json_serialization/converter/paint_converter.dart';
import 'package:paintroid/core/json_serialization/converter/value_key_converter.dart';
import 'package:paintroid/core/json_serialization/versioning/serializer_version.dart';
import 'package:paintroid/core/json_serialization/versioning/version_strategy.dart';

Expand Down Expand Up @@ -32,6 +33,7 @@ class SquareShapeCommand extends ShapeCommand {

SquareShapeCommand(
super.paint,
super.layerKey,
this.topLeft,
this.topRight,
this.bottomLeft,
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:paintroid/core/commands/command_implementation/graphic/graphic_command.dart';
import 'package:paintroid/core/json_serialization/converter/offset_converter.dart';
import 'package:paintroid/core/json_serialization/converter/paint_converter.dart';
import 'package:paintroid/core/json_serialization/converter/value_key_converter.dart';
import 'package:paintroid/core/json_serialization/versioning/serializer_version.dart';
import 'package:paintroid/core/json_serialization/versioning/version_strategy.dart';

Expand All @@ -19,7 +20,8 @@ class SprayCommand extends GraphicCommand {

SprayCommand(
this.points,
super.paint, {
super.paint,
super.layerKey, {
this.type = SerializerType.SPRAY_COMMAND,
int? version,
}) : version =
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

17 changes: 12 additions & 5 deletions lib/core/commands/command_manager/command_manager.dart
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
import 'dart:ui';

import 'package:flutter/cupertino.dart';
import 'package:paintroid/core/commands/command_implementation/command.dart';
import 'package:paintroid/core/commands/command_implementation/graphic/graphic_command.dart';
import 'package:paintroid/core/commands/command_implementation/graphic/line_command.dart';
import 'package:paintroid/core/commands/command_implementation/graphic/shape/circle_shape_command.dart';
import 'package:paintroid/core/commands/command_implementation/graphic/shape/square_shape_command.dart';
import 'package:paintroid/core/commands/command_implementation/graphic/spray_command.dart';
import 'package:paintroid/core/tools/line_tool/vertex.dart';
import 'package:paintroid/core/tools/line_tool/vertex_stack.dart';
import 'package:paintroid/core/tools/tool_data.dart';
import 'package:paintroid/core/commands/command_implementation/graphic/spray_command.dart';

enum ActionType { UNDO, REDO }

Expand Down Expand Up @@ -38,9 +37,11 @@ class CommandManager {
void executeAllCommands(Canvas canvas) {
for (final command in _undoStack) {
if (command is GraphicCommand) {
print(command.layerKey);
command.call(canvas);
}
}
print('-----------------------');
}

void discardLastCommand() {
Expand Down Expand Up @@ -110,8 +111,7 @@ class CommandManager {
return ToolData.SHAPES;
} else if (command.runtimeType == CircleShapeCommand) {
return ToolData.SHAPES;
}
else if (command.runtimeType == SprayCommand) {
} else if (command.runtimeType == SprayCommand) {
return ToolData.SPRAY;
} else {
return ToolData.BRUSH;
Expand All @@ -129,4 +129,11 @@ class CommandManager {

return lineCommands.reversed.toList();
}

void removeCommandsOfLayer(ValueKey layerKey) {
_undoStack.removeWhere((command) =>
(command is GraphicCommand && command.layerKey == layerKey));
_redoStack.removeWhere((command) =>
(command is GraphicCommand && command.layerKey == layerKey));
}
}
19 changes: 19 additions & 0 deletions lib/core/json_serialization/converter/value_key_converter.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import 'package:flutter/cupertino.dart';
import 'package:freezed_annotation/freezed_annotation.dart';

class ValueKeyConverter
implements JsonConverter<ValueKey, Map<String, dynamic>> {
const ValueKeyConverter();

@override
ValueKey fromJson(Map<String, dynamic> json) {
return ValueKey(json['value']);
}

@override
Map<String, dynamic> toJson(ValueKey key) {
return {
'value': key.value,
};
}
}
7 changes: 4 additions & 3 deletions lib/core/providers/object/tools/brush_tool_provider.dart
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@

import 'package:riverpod_annotation/riverpod_annotation.dart';

import 'package:paintroid/core/commands/command_factory/command_factory_provider.dart';
import 'package:paintroid/core/commands/command_manager/command_manager_provider.dart';
import 'package:paintroid/core/commands/graphic_factory/graphic_factory_provider.dart';
import 'package:paintroid/core/enums/tool_types.dart';
import 'package:paintroid/core/providers/state/layer_menu_state_provider.dart';
import 'package:paintroid/core/tools/implementation/brush_tool.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';

part 'brush_tool_provider.g.dart';

Expand All @@ -17,6 +16,8 @@ class BrushToolProvider extends _$BrushToolProvider {
commandManager: ref.watch(commandManagerProvider),
commandFactory: ref.watch(commandFactoryProvider),
graphicFactory: ref.watch(graphicFactoryProvider),
layerKey:
ref.watch(layerMenuStateProvider.notifier).getSelectedLayerKey(),
type: ToolType.BRUSH,
);
}
Expand Down
2 changes: 1 addition & 1 deletion lib/core/providers/object/tools/brush_tool_provider.g.dart

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading
Loading