tahoma2d/toonz/sources/include/toonz/ttileset.h

155 lines
3.7 KiB
C
Raw Normal View History

2016-05-17 03:04:11 +12:00
#pragma once
2016-03-19 06:57:51 +13:00
#ifndef TTILESET_HEADER
#define TTILESET_HEADER
#include "trastercm.h"
2016-03-27 13:30:32 +13:00
#include <QString>
2016-03-19 06:57:51 +13:00
#undef DVAPI
#undef DVVAR
#ifdef TOONZLIB_EXPORTS
#define DVAPI DV_EXPORT_API
#define DVVAR DV_EXPORT_VAR
#else
#define DVAPI DV_IMPORT_API
#define DVVAR DV_IMPORT_VAR
#endif
2016-06-15 18:43:10 +12:00
class DVAPI TTileSet {
2016-03-19 06:57:51 +13:00
public:
2016-06-15 18:43:10 +12:00
// per adesso, facciamo che comprime sempre,
// appena costruisce l'oggetto. Poi potremmo dare la scelta,
// anche per decidere se farlo subito o meno.
class DVAPI Tile {
TDimension m_dim;
int m_pixelSize;
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
public:
TRect m_rasterBounds;
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
Tile();
Tile(const TRasterP &ras, const TPoint &p);
virtual ~Tile();
virtual QString id() const = 0;
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
virtual Tile *clone() const = 0;
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
// expressed in byte
int getSize() { return m_dim.lx * m_dim.ly * m_pixelSize; }
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
private:
Tile(const Tile &tile);
Tile &operator=(const Tile &tile);
};
2016-03-19 06:57:51 +13:00
protected:
2016-06-15 18:43:10 +12:00
TDimension m_srcImageSize;
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
typedef std::vector<Tile *> Tiles;
Tiles m_tiles;
2016-03-19 06:57:51 +13:00
public:
2016-06-15 18:43:10 +12:00
TTileSet(const TDimension &dim) : m_srcImageSize(dim) {}
virtual ~TTileSet();
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
int getMemorySize() const;
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
void add(Tile *tile);
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
// crea un tile estraendo rect*ras->getBounds() da ras.
// Nota: se rect e' completamente fuori non fa nulla
// Nota: clona il raster!
virtual void add(const TRasterP &ras, TRect rect) = 0;
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
void getRects(std::vector<TRect> &rects) const;
TRect getBBox() const;
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
int getTileCount() const { return (int)m_tiles.size(); }
TDimension getSrcImageSize() const { return m_srcImageSize; }
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
virtual TTileSet *clone() const = 0;
2016-03-19 06:57:51 +13:00
};
//********************************************************************************
class DVAPI TTileSetCM32 final : public TTileSet {
2016-03-19 06:57:51 +13:00
public:
2016-06-15 18:43:10 +12:00
// per adesso, facciamo che comprime sempre,
// appena costruisce l'oggetto. Poi potremmo dare la scelta,
// anche per decidere se farlo subito o meno.
class DVAPI Tile final : public TTileSet::Tile {
2016-06-15 18:43:10 +12:00
public:
Tile();
Tile(const TRasterCM32P &ras, const TPoint &p);
~Tile();
2016-06-20 14:23:05 +12:00
QString id() const override {
return "TileCM" + QString::number((uintptr_t) this);
2016-06-20 14:23:05 +12:00
}
2016-03-19 06:57:51 +13:00
2016-06-19 20:06:29 +12:00
Tile *clone() const override;
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
void getRaster(TRasterCM32P &ras) const;
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
private:
Tile(const Tile &tile);
Tile &operator=(const Tile &tile);
};
2016-03-19 06:57:51 +13:00
public:
2016-06-15 18:43:10 +12:00
TTileSetCM32(const TDimension &dim) : TTileSet(dim) {}
~TTileSetCM32();
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
// crea un tile estraendo rect*ras->getBounds() da ras.
// Nota: se rect e' completamente fuori non fa nulla
// Nota: clona il raster!
2016-06-19 20:06:29 +12:00
void add(const TRasterP &ras, TRect rect) override;
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
const Tile *getTile(int index) const;
Tile *editTile(int index) const;
2016-03-19 06:57:51 +13:00
2016-06-19 20:06:29 +12:00
TTileSetCM32 *clone() const override;
2016-03-19 06:57:51 +13:00
};
//********************************************************************************
class DVAPI TTileSetFullColor final : public TTileSet {
2016-03-19 06:57:51 +13:00
public:
2016-06-15 18:43:10 +12:00
// per adesso, facciamo che comprime sempre,
// appena costruisce l'oggetto. Poi potremmo dare la scelta,
// anche per decidere se farlo subito o meno.
class DVAPI Tile final : public TTileSet::Tile {
2016-06-15 18:43:10 +12:00
public:
Tile();
Tile(const TRasterP &ras, const TPoint &p);
~Tile();
2016-06-19 20:06:29 +12:00
QString id() const override {
return "TTileSet32::Tile" + QString::number((uintptr_t) this);
2016-06-15 18:43:10 +12:00
}
2016-03-19 06:57:51 +13:00
2016-06-19 20:06:29 +12:00
Tile *clone() const override;
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
void getRaster(TRasterP &ras) const;
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
private:
Tile(const Tile &tile);
Tile &operator=(const Tile &tile);
};
2016-03-19 06:57:51 +13:00
public:
2016-06-15 18:43:10 +12:00
TTileSetFullColor(const TDimension &dim) : TTileSet(dim) {}
~TTileSetFullColor();
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
// crea un tile estraendo rect*ras->getBounds() da ras.
// Nota: se rect e' completamente fuori non fa nulla
// Nota: clona il raster!
2016-06-19 20:06:29 +12:00
void add(const TRasterP &ras, TRect rect) override;
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
const Tile *getTile(int index) const;
Tile *editTile(int index) const;
2016-03-19 06:57:51 +13:00
2016-06-19 20:06:29 +12:00
TTileSetFullColor *clone() const override;
2016-03-19 06:57:51 +13:00
};
#endif