// Copyright 2017 The Chromium 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 THIRD_PARTY_BLINK_RENDERER_CORE_GEOMETRY_DOM_QUAD_H_
#define THIRD_PARTY_BLINK_RENDERER_CORE_GEOMETRY_DOM_QUAD_H_

#include "third_party/blink/renderer/bindings/core/v8/script_value.h"
#include "third_party/blink/renderer/core/core_export.h"
#include "third_party/blink/renderer/platform/bindings/script_wrappable.h"

namespace blink {

class DOMPoint;
class DOMPointInit;
class DOMQuadInit;
class DOMRect;
class DOMRectInit;

class CORE_EXPORT DOMQuad : public ScriptWrappable {
  DEFINE_WRAPPERTYPEINFO();

 public:
  static DOMQuad* Create(const DOMPointInit* p1,
                         const DOMPointInit* p2,
                         const DOMPointInit* p3,
                         const DOMPointInit* p4);
  static DOMQuad* fromRect(const DOMRectInit*);
  static DOMQuad* fromQuad(const DOMQuadInit*);

  DOMQuad(const DOMPointInit* p1,
          const DOMPointInit* p2,
          const DOMPointInit* p3,
          const DOMPointInit* p4);
  DOMQuad(double x, double y, double width, double height);

  DOMPoint* p1() const { return p1_; }
  DOMPoint* p2() const { return p2_; }
  DOMPoint* p3() const { return p3_; }
  DOMPoint* p4() const { return p4_; }

  DOMRect* getBounds();

  ScriptValue toJSONForBinding(ScriptState*) const;

  void Trace(Visitor* visitor) const override {
    visitor->Trace(p1_);
    visitor->Trace(p2_);
    visitor->Trace(p3_);
    visitor->Trace(p4_);
    ScriptWrappable::Trace(visitor);
  }

  void set_needs_bounds_calculation(bool value) {
    needs_bounds_calculation_ = value;
  }

 private:
  void CalculateBounds();

  Member<DOMPoint> p1_;
  Member<DOMPoint> p2_;
  Member<DOMPoint> p3_;
  Member<DOMPoint> p4_;

  double x_;
  double y_;
  double width_;
  double height_;
  bool needs_bounds_calculation_;
};

}  // namespace blink

#endif
