text: // Copyright 2017 The Fuchsia Authors. All rights reserved.
  // Use of this source code is governed by a BSD-style license that can be
  // found in the LICENSE file.
  
  #ifndef GARNET_BIN_UI_SKETCHY_STROKE_STROKE_FITTER_H_
  #define GARNET_BIN_UI_SKETCHY_STROKE_STROKE_FITTER_H_
  
  #include "garnet/bin/ui/sketchy/stroke/stroke_path.h"
  
  #include <vector>
  #include "src/lib/fxl/macros.h"
  #include "third_party/glm/glm/vec2.hpp"
  
  namespace sketchy_service {
  
  class StrokePath;
  
  // Wraps around StrokePath and generates the fitted path into it.
  class StrokeFitter final {
   public:
    explicit StrokeFitter(glm::vec2 start_pt);
    void Extend(const std::vector<glm::vec2>& sampled_pts);
  
    // Fits the entire curve, populates the path, and pops the points that are
    // stable enough. Returns if the path is stable or not.
    bool FitAndPop(StrokePath* path);
  
   private:
    void FitSampleRange(int start_index, int end_index, glm::vec2 left_tangent,
                        glm::vec2 right_tangent, StrokePath* path);
  
    std::vector<glm::vec2> points_;
    std::vector<float> params_;
  
    FXL_DISALLOW_COPY_AND_ASSIGN(StrokeFitter);
  };
  
  }  // namespace sketchy_service
  
  #endif  // GARNET_BIN_UI_SKETCHY_STROKE_STROKE_FITTER_H_
  