// Copyright 2013 The Flutter 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 FLUTTER_FLOW_LAYERS_CLIP_RRECT_LAYER_H_
#define FLUTTER_FLOW_LAYERS_CLIP_RRECT_LAYER_H_

#include "flutter/flow/layers/clip_shape_layer.h"

namespace flutter {

class ClipRRectLayer : public ClipShapeLayer<SkRRect> {
 public:
  ClipRRectLayer(const SkRRect& clip_rrect, Clip clip_behavior);

  void Preroll(PrerollContext* context, const SkMatrix& matrix) override;

  void Paint(PaintContext& context) const override;

 protected:
  const SkRect& clip_shape_bounds() const override;

  void OnMutatorsStackPushClipShape(MutatorsStack& mutators_stack) override;

  void OnCanvasClipShape(SkCanvas* canvas) const override;

 private:
  FML_DISALLOW_COPY_AND_ASSIGN(ClipRRectLayer);
};

}  // namespace flutter

#endif  // FLUTTER_FLOW_LAYERS_CLIP_RRECT_LAYER_H_
