// LAF Gfx Library
// Copyright (c) 2020-2024  Igara Studio S.A.
//
// This file is released under the terms of the MIT license.
// Read LICENSE.txt for more information.

#ifndef GFX_MATRIX_NONE_H_INCLUDED
#define GFX_MATRIX_NONE_H_INCLUDED
#pragma once

#include "gfx/rect.h"

namespace gfx {

class Matrix {
public:
  Matrix() {}

  static Matrix MakeScale(float sx, float sy) { return Matrix(); }
  static Matrix MakeScale(float scale) { return Matrix(); }
  static Matrix MakeTrans(float x, float y) { return Matrix(); }
  static Matrix MakeAll(float scaleX,
                        float skewX,
                        float transX,
                        float skewY,
                        float scaleY,
                        float transY,
                        float pers0,
                        float pers1,
                        float pers2)
  {
    return Matrix();
  }

  Matrix& reset() { return *this; }
  bool isIdentity() const { return true; }
  bool isScaleTranslate() const { return false; }
  bool isTranslate() const { return false; }

  float getScaleX() const { return 1.0f; }
  float getScaleY() const { return 1.0f; }
  float getSkewY() const { return 0.0f; }
  float getSkewX() const { return 0.0f; }
  float getTranslateX() const { return 0.0f; }
  float getTranslateY() const { return 0.0f; }
  float getPerspX() const { return 0.0f; }
  float getPerspY() const { return 0.0f; }

  Matrix& setIdentity() { return *this; }
  Matrix& setTranslate(float dx, float dy) { return *this; }
  void setScale(float sx, float sy, float px, float py) {}
  void setScale(float sx, float sy) {}
  void setRotate(float degrees, float px, float py) {}
  void setRotate(float degrees) {}
  void setScaleTranslate(float sx, float sy, float tx, float ty) {}
  Matrix& preTranslate(float dx, float dy) { return *this; }
  Matrix& postTranslate(float dx, float dy) { return *this; }

  Matrix& setConcat(const Matrix& a, const Matrix& b) { return *this; }
  Matrix& preConcat(const Matrix& other) { return *this; }
  Matrix& postConcat(const Matrix& other) { return *this; }

  RectF mapRect(const RectF& src) const { return RectF(); }
};

} // namespace gfx

#endif
