#ifndef TilingData_h
#define TilingData_h
#include <wtf/Noncopyable.h>
namespace WebCore {
class FloatRect;
class IntRect;
class IntPoint;
class TilingData {
public:
TilingData(int maxTextureSize, int totalSizeX, int totalSizeY, bool hasBorderTexels);
void setTotalSize(int totalSizeX, int totalSizeY);
void setMaxTextureSize(int);
int maxTextureSize() const { return m_maxTextureSize; }
int totalSizeX() const { return m_totalSizeX; }
int totalSizeY() const { return m_totalSizeY; }
void setHasBorderTexels(bool);
int borderTexels() const { return m_borderTexels; }
bool hasEmptyBounds() const { return !numTilesX() || !numTilesY(); }
int numTilesX() const { return m_numTilesX; }
int numTilesY() const { return m_numTilesY; }
int tileXIndexFromSrcCoord(int) const;
int tileYIndexFromSrcCoord(int) const;
IntRect tileBounds(int, int) const;
IntRect tileBoundsWithBorder(int, int) const;
FloatRect tileBoundsNormalized(int, int) const;
int tilePositionX(int xIndex) const;
int tilePositionY(int yIndex) const;
int tileSizeX(int xIndex) const;
int tileSizeY(int yIndex) const;
IntRect overlappedTileIndices(const IntRect& srcRect) const;
IntRect overlappedTileIndices(const FloatRect& srcRect) const;
IntPoint textureOffset(int xIndex, int yIndex) const;
private:
TilingData() : m_maxTextureSize(0), m_totalSizeX(0), m_totalSizeY(0) {}
void assertTile(int i, int j) const { ASSERT_UNUSED(i, i >= 0 && i < numTilesX()); ASSERT_UNUSED(j, j >= 0 && j < numTilesY()); }
void recomputeNumTiles();
int m_maxTextureSize;
int m_totalSizeX;
int m_totalSizeY;
int m_borderTexels;
int m_numTilesX;
int m_numTilesY;
};
}
#endif // TilingData_h