Giter Club home page Giter Club logo

Comments (2)

karan-jarvis avatar karan-jarvis commented on August 10, 2024 1

First, you need to update the path history class like this:-

class _PathHistory {
  var redoPath = [];
  List<MapEntry<Path, Paint>> _paths;
  Paint currentPaint;
  Paint _backgroundPaint;
  bool _inDrag;

  bool get isEmpty => _paths.isEmpty || (_paths.length == 1 && _inDrag);

  _PathHistory()
      : _paths = <MapEntry<Path, Paint>>[],
        _inDrag = false,
        _backgroundPaint = new Paint()..blendMode = BlendMode.dstOver,
        currentPaint = new Paint()
          ..color = Colors.black
          ..strokeWidth = 1.0
          ..style = PaintingStyle.fill;

  void setBackgroundColor(Color backgroundColor) {
    _backgroundPaint.color = backgroundColor;
  }

  void undo() {
    if (!_inDrag) {
      if(_paths.isNotEmpty){
        redoPath.add(_paths.last);
      }
      _paths.removeLast();
      print("elements are ${redoPath.length}");
      print("_paths elements are ${_paths.length}");
    }
  }
  
  void redo(){
      _paths.add(redoPath.last);
      redoPath.removeLast();
      print("redo path are ${redoPath.length}");
      print("_paths elements are ${_paths.length}");
  }

  void clear() {
    if (!_inDrag) {
      _paths.clear();
      redoPath.clear();
      print("elements of undo ${_paths.length}");
      print("elements of redo ${redoPath.length}");
    }
  }

  void add(Offset startPoint) {
    if (!_inDrag) {
      _inDrag = true;
      Path path = new Path();
      path.moveTo(startPoint.dx, startPoint.dy);
      _paths.add(new MapEntry<Path, Paint>(path, currentPaint));
    }
  }

  void updateCurrent(Offset nextPoint) {
    if (_inDrag) {
      Path path = _paths.last.key;
      path.lineTo(nextPoint.dx, nextPoint.dy);
    }
  }

  void endCurrent() {
    _inDrag = false;
  }

  void draw(Canvas canvas, Size size) {
    canvas.saveLayer(Offset.zero & size, Paint());
    for (MapEntry<Path, Paint> path in _paths) {
      Paint p = path.value;
      canvas.drawPath(path.key, p);
    }
    canvas.drawRect(
        new Rect.fromLTWH(0.0, 0.0, size.width, size.height), _backgroundPaint);
    canvas.restore();
  }
}

End Then Add This redo Methode In Painter controller like this:-

void redo(){
    if (!isFinished()){
      _pathHistory.redo();
      notifyListeners();
    }
  }

you need to also update the undo method that I already do in path history's code

You're Welcome! :-)

from painter.

jameszasod avatar jameszasod commented on August 10, 2024 1

First, you need to update the path history class like this:-

class _PathHistory {
  var redoPath = [];
  List<MapEntry<Path, Paint>> _paths;
  Paint currentPaint;
  Paint _backgroundPaint;
  bool _inDrag;

  bool get isEmpty => _paths.isEmpty || (_paths.length == 1 && _inDrag);

  _PathHistory()
      : _paths = <MapEntry<Path, Paint>>[],
        _inDrag = false,
        _backgroundPaint = new Paint()..blendMode = BlendMode.dstOver,
        currentPaint = new Paint()
          ..color = Colors.black
          ..strokeWidth = 1.0
          ..style = PaintingStyle.fill;

  void setBackgroundColor(Color backgroundColor) {
    _backgroundPaint.color = backgroundColor;
  }

  void undo() {
    if (!_inDrag) {
      if(_paths.isNotEmpty){
        redoPath.add(_paths.last);
      }
      _paths.removeLast();
      print("elements are ${redoPath.length}");
      print("_paths elements are ${_paths.length}");
    }
  }
  
  void redo(){
      _paths.add(redoPath.last);
      redoPath.removeLast();
      print("redo path are ${redoPath.length}");
      print("_paths elements are ${_paths.length}");
  }

  void clear() {
    if (!_inDrag) {
      _paths.clear();
      redoPath.clear();
      print("elements of undo ${_paths.length}");
      print("elements of redo ${redoPath.length}");
    }
  }

  void add(Offset startPoint) {
    if (!_inDrag) {
      _inDrag = true;
      Path path = new Path();
      path.moveTo(startPoint.dx, startPoint.dy);
      _paths.add(new MapEntry<Path, Paint>(path, currentPaint));
    }
  }

  void updateCurrent(Offset nextPoint) {
    if (_inDrag) {
      Path path = _paths.last.key;
      path.lineTo(nextPoint.dx, nextPoint.dy);
    }
  }

  void endCurrent() {
    _inDrag = false;
  }

  void draw(Canvas canvas, Size size) {
    canvas.saveLayer(Offset.zero & size, Paint());
    for (MapEntry<Path, Paint> path in _paths) {
      Paint p = path.value;
      canvas.drawPath(path.key, p);
    }
    canvas.drawRect(
        new Rect.fromLTWH(0.0, 0.0, size.width, size.height), _backgroundPaint);
    canvas.restore();
  }
}

End Then Add This redo Methode In Painter controller like this:-

void redo(){
    if (!isFinished()){
      _pathHistory.redo();
      notifyListeners();
    }
  }

you need to also update the undo method that I already do in path history's code

You're Welcome! :-)

Thank you so much!, I'm new in Flutter xD

from painter.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.