// Copyright 2018 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 SRC_UI_LIB_ESCHER_PAPER_PAPER_DRAWABLE_H_
#define SRC_UI_LIB_ESCHER_PAPER_PAPER_DRAWABLE_H_

#include "src/ui/lib/escher/paper/paper_drawable_flags.h"
#include "src/ui/lib/escher/paper/paper_readme.h"

namespace escher {

// |PaperDrawable| is an abstract drawable object which can be rendered by
// |PaperRenderer|, or anything that passes the right args to |DrawInScene()|.
//
// There are three levels of sophistication for users of |PaperDrawable|:
// 1) Use pre-existing subclasses of |PaperDrawable|.
// 2) Implement new subclass of |PaperDrawable| using the existing functionality
//    provided by arguments to |DrawInScene()|.
// 3) Experts only!!  Extend the functionality of e.g. |PaperDrawCallFactory| to
//    support the requirements of the new |PaperDrawable| subclass.
class PaperDrawable {
 public:
  // Subclasses have a large amount of freedom when implementing this method.
  // The only constraint is that any items pushed onto |transform_stack| must be
  // popped before the method returns.
  virtual void DrawInScene(const PaperScene* scene, PaperDrawCallFactory* draw_call_factory,
                           PaperTransformStack* transform_stack, Frame* frame,
                           PaperDrawableFlags flags) = 0;
};

}  // namespace escher

#endif  // SRC_UI_LIB_ESCHER_PAPER_PAPER_DRAWABLE_H_
